La consola de Linux para novatos (IV)

En esta cuarta entrega veremos en detalle los enlaces duros y los enlaces simbólicos

consola-linux-tux

Continuamos con la serie de artículos dedicados a conocer un poco más en detalle la consola de Linux, la herramienta común a todas las distribuciones de GNU/Linux.

Parece que tiene buena acogida, y todos aprendemos algo. Tanto yo escribiendo las entradas, como vosotros leyéndolas y aportando vuestros conocimientos en los comentarios, gracias por ello!!

Si quieres ver todos los capítulos de la serie lo puedes hacer en este enlace, bajo la etiqueta consola-linux

A ponerse el delantal que nos metemos en la cocina!!

¿De qué va el capítulo de hoy? susetan

En anteriores artículos hablé por encima de los enlaces simbólicos o enlaces duros, no sé si será la traducción más correcta. Y prometí que más adelante hablaría de ellos. Y como lo prometido es deuda, aqui está.

Un enlace es una especie de “acceso directo”, un archivo que realmente apunta a otro archivo en otra ubicación. Existen 2 tipos, los enlaces duros (hard links) o enlaces simbólicos (symbolic links)

Los enlaces duros están heredados directamente de la forma en la que se hacen enlaces en Unix, y tienen 2 grandes limitaciones: sólo pueden apuntar a archivos, no a directorios y a archivos que se encuentren en el mismo sistema de archivos, o sea que no se pueden apuntar a archivos de otras particiones.

Los enlaces simbólicos son más modernos y pueden apuntar tanto a archivos como a directorios, sin limitaciones de dónde se encuentren.

Borrar un enlace simbólico no borra el archivo al que apunta. Y si se borra el archivo al que apunta el enlace simbólico simplemente apuntará a nada, por lo que se dice que el enlace está roto y al hacer un dir en la consola se nos mostrará de un color diferente indicando esta peculiaridad.

¿Pero esto de los enlaces para qué puede servir?

Imaginemos que varios programas de una aplicación necesitan acceder a un archivo llamado “config”, pero que este archivo sufre muchos cambios de versión porque se van desarrollando mejoras. Si cambiamos el nombre por ejemplo “config_v1” necesitaremos cambiar la llamada en todos los programas a esta nueva versión para que todo funcione bien.

Aquí es donde los enlaces nos pueden ayudar!

Imaginemos que tenemos el archivo “config_v2” y al que creamos un enlace simbólico llamado “config” Cuando los programas accedan a “config” este les llevará hasta el fichero al que apunta que será “config_v2” sin necesidad de hacer cambios en todos los programas.

Es más! si los desarrolladores liberan “config_v3” podemos borrar el enlace y crear otro llamado “config” que apunte a esta nueva versión y todo estará correcto! Y si la nueva versión contiene errores siempre podremos volver a la versión 2 con un nuevo enlace que apunte al anterior archivo.

itux-Apple

Oido cocina! ahora quiero empezar a darle a los fogones!! Pues empecemos!

Para crear enlaces el comando es ln (link = enlace) esto crea enlaces “duros” y para crear enlaces simbólicos deberemos especificarlo mediante la opción -s.

Para crearlos, escribimos el comando seguido de la ruta del archivo o directorio al que queremos enlazar y despues seguido el nombre que queremos dar al enlace, así

ln -s ~/prueba_1/archivo_1.txt enlace_archivo1

Esto nos creará un enlace simbólico. En el directorio actual un enlace llamado enlace_archivo1 que apuntará al archivo_1.txt que está en el directorio prueba_1 de nuestro Home (el símbolo ~ reemplaza a la ruta de nuestro home)

Si damos dir veremos al igual que los directorios y archivos la siguiente línea (o algo parecido)

lrwxrwxrwx 1 victorhck users 38 jul  1 21:09 enlace_archivo1 -> /home/victorhck/prueba_2/archivo_3.txt

La primera letra de los permisos nos indica que es un enlace (link) y nos dice cómo se llama el enlace y a dónde apunta.

Borra el archivo al que apunta y vuelve a visualizar el contenido con dir. Ahora el enlace lo presenta en otro color indicando que está roto por faltar el elemento al que apunta.

Si ahora creamos un enlace duro, igual que el comando anterior, pero sin la opción -s nos creará un enlace, pero aparentemente no sabremos si es propiamente un archivo o efectivamente un enlace.

Un truco para saberlo es por ejemplo fijarse que tanto el enlace como el archivo tienen igual tamaño en bytes. U otra forma más inequívoca es listar los archivos indicando el ínodo del disco duro donde está el contenido, tanto el enlace como el archivo tendrán el mismo inodo. Para listar el inodo añadir el atributo -i a dir o ls.

Crea un par de directorios de prueba, con unos archivos .txt dentro de ellos y prueba a crear enlaces simbólicos y duros, borra los archivos a los que apunta y prueba por ti mismo todo esto que te he contado, para que veas que no me lo invento!! 😉

Nos seguimos leyendo la semana que viene!!

5ª entrega ya disponible: https://victorhckinthefreeworld.wordpress.com/2014/07/16/la-consola-de-linux-para-novatos-v/

———————————————————-

11 pensamientos en “La consola de Linux para novatos (IV)

  1. Yo llevo más de un año usando solo linux. recuerdo que cuando intentaba instalar un programa X, o iniciar un programa X, que no abria, lo iniciaba desde la terminal, y me decía algo como falta tal archivo “lib” o alguna librería. Después vine a entender la utilidad de ls -n.

    Ejemplo, Una aplicación X, me dice, falta librería ZLIB.0 y miro en la carpeta /usr/lib y tengo la librería ZLIB.1, pues pruebo, y creo un enlace simbólico, así “ln -s /usr/lib7ZLIB.0 /usr/lib7ZLIB.1”. Muchas veces funciona.

    Después descubrí que el ln -s, tiene otras funciones, como dejar la /home en la misma partición que la raíz, y crear enlaces simbólicos que pusieran mis archivos que estaban en otra partición (ext4), dentro de la carpeta /home, o también, poner mis juegos de steam o play on linux en otra partición (ext4), y crear enlaces a las respectivas carpetas de configuración de steam o playonlinux, simulando la carpeta donde tengo alojados mis juegos.

    • Creo que se a que te refieres cris, yo lo utilizo de igual manera.
      Tengo en mi equipo instalado archlinux y win$, al igual que una particion de respaldo. La cosa es que tengo videos y musica esparcidos por todas las particiones, las cuales monto desde el arranque. Para poder tener concentrado los accesos a todos los carpetas que se encuentran aqui y alla utilizo los enlaces simbolicos.

      En el caso de los videos creo un enlace simbolico desde mi carpeta personal de videos hasta la carpeta con videos que se encuentra en otra particion, en mi caso es:
      ln -s /media/respaldo/Dark\ Libra/Escritorio/Vanguard /Anime_respaldo
      esto me da un enlace asi:
      lrwxrwxrwx 1 sagittarius users 46 abr 30 13:45 Anime_respaldo -> /media/respaldo/Dark Libra/Escritorio/Vanguard/

      De igual forma desde mi carpeta personal de musica creo enlaces con mis carpetas dispersas por otras particiones:
      lrwxrwxrwx 1 sagittarius users 31 jun 11 20:37 mus_win -> /media/windows7/SO Linux/Musica/
      lrwxrwxrwx 1 sagittarius users 43 abr 28 21:50 respaldo -> /media/respaldo/Dark Libra/Mi musica/Musica/

      De esta forma me es mas sencillo acceder a toda mis videos desde el reproductor VLC que uso, porque al crear un enlace desde la carpeta de, ~/videos -> a las carpetas con videos en otras particiones, puedo ver todos mis archivos en la lista de “Mis videos” del reproductor.

  2. Hola.

    Sé que al autor del blog no le importa que sea un poco pedante en estos casos, así que ahí va. No he seguido al detalle el resto de entregas, así que puede que repita algo; sin embargo, prefiero evitar perder consistencia en la explicación.

    El sistema de ficheros FAT es lo suficientemente básico para entender cómo funciona el almacenamiento de ficheros en un disco.

    En FAT tú tienes una tabla. Cada fila contiene el nombre del fichero que tienes en ese disco, algunas propiedades (digamos, fecha de creación, fecha de modificación, atributos como si es “invisible”, si es ejecutable…) y la localización física en términos que maneje el disco duro (no lo sé en detalle, pero usará cilindros y sectores).

    Cualquier sistema de archivo funciona igual, si bien la mayoría son infinitamente más complejos. En esencia, lo que tú ves cuando listas un directorio (en tu gestor de ficheros o con un simple ls -o dir en MS-DOS/Windows) no son ficheros reales. Tú no tienes un fichero en /home/usuario/mi_fichero. En FAT, lo que tienes es una línea que se llama /home/usuario/mi_fichero, con las propiedades que sean y con la ubicación _del contenido de ese fichero_. Digo en FAT, porque cada sistema de ficheros tiene diferentes formas de implementar eso, si bien la idea sigue siendo correcta.

    Si haces un ls -a, verás dos ficheros más además de los “ocultos”, bueno, en realidad son dos ficheros ocultos más. El punto y los dos puntos. Ambos son ficheros especiales: el punto es un enlace al directorio actual, mientras que el dos puntos es un enlace al directorio superior. Básicamente, el contenido del punto es el contenido del directorio y el contenido del dos puntos es el contenido del directorio anterior.

    Un enlace blando o simbólico es simplemente como un puntero o apuntador en programación, y simplemente contiene la ubicación del fichero al que apunta dentro del sistema de ficheros (o en algún otro). Volviendo a FAT, si tienes un fichero y un enlace simbólico a dicho fichero:

    c:\Windows\cosa_mala
    d:\mis_cosas\acceso_a_cosa_mala

    el enlace “acceso_a_cosa_mala” contendrá la ubicación en la FAT de c:\Windows\cosa_mala.

    Los enlaces duros no son más que entradas en el sistema de ficheros que contienen la ubicación en el disco del fichero al que apunten. En esencia, todo lo que no es un acceso simbólico u otro tipo especial de fichero (como los de bloques, etc.) es necesariamente un enlace duro.

    Tú tienes /home/usuario/lista_de_la_compra.txt, en el que guardas la lista de la compra de esta semana. Bien, ya tienes tu enlace duro. Puedes crear un enlace simbólico desde tu pendrive

    ln -s /home/usuario/lista_de_la_compra /run/var/usuario/mi_pendrive/lista

    Y así, cuando tú abres el fichero del pendrive abrirás el fichero del disco. Simple.

    Imagina ahora un enlace duro.

    ln /home/usuario/lista_de_la_compra /home/usuario/cosas/ultima_lista

    Enhorabuena, ya tienes dos enlaces duros al mismo fichero. Piensa en el nombre de un fichero como un enlace a su contenido y estarás sobre la pista. Ahora, si borras el primero

    rm /home/usuario/lista_de_la_compra

    Seguirás pudiendo acceder al contenido del fichero a través de /home/usuario/cosas/ultima_lista

    Fíjate que es el mismo fichero y está guardado en el mismo lugar del disco. Lo que cambia es simplemente su nombre.

    Ahora bien, deberías haber adivinado que si abres el enlace simbólico /run/var/usuario/mi_pendrive/lista no podrás acceder a tu fichero, ya que este enlace apunta a una entrada, a un nombre, en el sistema de ficheros, que ya no existe porque lo has eliminado. Se habla entonces de “enlace roto”.

    Y sí, no puedes crear enlaces duros en distintos sistemas de ficheros. Bueno, más bien en realidad simplemente no tiene sentido, aunque las modernas implementaciones de Bash y las herramientas ls, ln y demás, tienden a evitar que puedas hacer cosas que no tienen sentido.

    Es decir, cada enlace duro es la ubicación de un fichero en el disco. Precisamente, en ese disco que tiene ese sistema de ficheros concreto. Imagina que enlazas el contenido de un pendrive ¿vas a tenerlo enchufado todo el tiempo? xdd

    Bien, esta explicación tiene el inconveniente de que simplifica algunas cosas y aun así es más “rollo” que la del artículo del blog. Es lo que tiene xdd Pero si a alguien le interesa este tema, tendrá la base para comprenderlo en profundidad, más allá de crear enlaces entre /home/usuario/miscosas y un disco montado en otro lugar.

    $ mkdir directorio
    $ touch cosa.txt
    $ ln cosa.txt directorio/parida.txt
    $ echo “esto es una parida” >> cosa.txt
    $ cat cosa.txt
    esto es una parida
    $ cat directorio/parida.txt
    esto es una parida
    $ rm cosa.txt
    $ cat directorio/parida.txt
    esto es una parida

    Salud!

    • Nota: las interfaces gráficas no proveen una forma conveniente de manejar enlaces duros, así que están cayendo en desuso. Otro motivo es la generalización de indexadores y buscadores semánticos, como también el hecho de que un único usuario doméstico no pueda sacar tanto rendimiento de esto.

      $ ls Descargas
      parida_polno.avi
      $ ln Descargas/parida_polno.avi Vídeos/parida_que_no_quiero_que_veas.avi
      (…) Días después
      $ rm Descargas/*avi
      $ ls Vídeos
      parida_que_no_quiero_que_veas.avi
      otro_video.avi
      video_manifa_lunes.mov
      grupo_death.flv

    • Karl, no sólo agradezco tu comentario sino que enseña mucho más del mio que se queda muy simple en comparación a tu gran explicación!!
      Muchas gracias por compartirlo!
      Saludos!!

    • me alegro!
      Además el colega Karl lo ha dejado más claro!
      Sus conocimientos son mayores y su modo didáctico de explicar las cosas mucho mejor! Gran aporte que le agradezco!!
      Salud!

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s