Tutoriales

Conceptos básicos del administrador del sistema: creación de enlaces suaves en Linux

En mi artículo anterior, demostré cómo crear un enlace físico que parece un archivo único pero que en realidad apunta a otro archivo. Un enlace fijo solo puede apuntar a un archivo, no a un directorio, y no se agrega al recuento general de inodos.

[ Keep your most commonly used commands handy with the Linux commands cheat sheet. ]

Un inodo es una estructura de datos que describe un objeto del sistema de archivos, como un archivo o un directorio. Almacena metadatos sobre el objeto, incluidas marcas de tiempo, mapas de bloques o atributos extendidos.

Puede ver un inodo en acción creando un directorio y luego viendo su información de inodo y tamaño:

$ mkdir dir

$ ls -li
total 0
25606589 drwxrwxr-x. 2 localuser localuser 6 set 19 15:21 dir

$ stat dir

  File: dir
  Size: 6         	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 25606589    Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/localuser)   Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-09-19 15:21:27.616000000 -0300
Modify: 2022-09-19 15:21:27.616000000 -0300
Change: 2022-09-19 15:21:27.616000000 -0300
 Birth: 2022-09-19 15:21:27.616000000 -0300

usar ls comando con -i Mostrar opciones para inodos.Puede ver la dirección de inodo dada dir El directorio a continuación es 25606589.Puede confirmar el inodo y ver otra información de metadatos stat Ordenar.

Cree un archivo en este directorio y verifique la misma información:

$ touch dir/file

$ stat dir

  File: dir
  Size: 18        	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 25606589    Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/localuser)   Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-09-19 15:29:37.495000000 -0300
Modify: 2022-09-19 15:29:40.276000000 -0300
Change: 2022-09-19 15:29:40.276000000 -0300
 Birth: 2022-09-19 15:21:27.616000000 -0300

$ ls -li dir/file

25606591 -rw-rw-r--. 1 localuser localuser 0 set 19 15:29 dir/file

$ stat dir/file

  File: dir/file
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 25606591    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/localuser)   Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-09-19 15:29:40.276000000 -0300
Modify: 2022-09-19 15:29:40.276000000 -0300
Change: 2022-09-19 15:29:40.276000000 -0300
 Birth: 2022-09-19 15:29:40.276000000 -0300

El archivo tiene su propia dirección de inodo (25606591) y tiene un tamaño de 0 bytes porque no tiene contenido. Simplemente agregue un byte de datos y vea qué sucede:

$ echo 1 > dir/file

$ stat dir/file

  File: dir/file
  Size: 2         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 25606591    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/localuser)   Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-09-19 15:29:40.276000000 -0300
Modify: 2022-09-19 15:36:18.812000000 -0300
Change: 2022-09-19 15:36:18.812000000 -0300
 Birth: 2022-09-19 15:29:40.276000000 -0300

Aunque solo agregó 1B de datos, el archivo ahora ocupa 8 sectores. Esto se debe a que está utilizando el tamaño de disco de bloque predeterminado de 4KiB y el tamaño de sector de 512B.

La dirección de inodo sigue siendo la misma, lo cual es importante porque, independientemente del tamaño del archivo, siempre se hace referencia a ella por su dirección de inodo, no por cada sector individual consumido. Sin embargo, si copia el archivo, la copia obtendrá su propia dirección de inodo y ocupará otros 8 sectores. Esto es importante porque no copia cuando crea el enlace.

¿Qué es un enlace simbólico?

A diferencia de los enlaces duros, los enlaces simbólicos (también llamados enlaces «suaves») son solo archivos especiales que apuntan a archivos o directorios en el sistema. Los enlaces simbólicos tienen ventajas sobre los enlaces duros en ciertos escenarios, como crear un enlace a un directorio, apuntar a un archivo o directorio en otro sistema de archivos, tener un inodo y permisos diferentes que el archivo o directorio original y tener un tamaño más pequeño. Al actuar como un puntero al contenido original en lugar de un espejo del mismo, su tamaño es solo la cantidad de bytes necesarios para formar el nombre del archivo o directorio.

[ Learn how to manage your Linux environment for success. ]

Sin embargo, los enlaces simbólicos tienen limitaciones. Debido a que solo está creando un puntero a un directorio, si cambia el nombre o la ubicación del directorio original, «romperá» su puntero. Su enlace simbólico ya no podrá encontrar el archivo o el directorio al que se vincula a menos que cambie el objeto original al nombre o la ubicación que se usó para crear el enlace simbólico. Además, los enlaces simbólicos no heredan los permisos originales del archivo original. Esto significa que cualquier cambio de permiso realizado en el archivo original no se reflejará en el enlace simbólico.

Crear enlaces blandos

Para crear un enlace simbólico, utilice ln comando, que es el mismo que el comando y la sintaxis utilizados para los enlaces duros, excepto que incluye -s opciones Aquí hay un ejemplo:

$ ln -s /tmp/hard ./dir/soft

$ ls -li dir/
total 0
25811328 lrwxrwxrwx. 1 localuser localuser 9 set 20 13:13 soft -> /tmp/hard

$ ln -s /home/localuser/dir/ /tmp/softdir

$ ls -li
total 0
25606589 drwxrwxr-x. 2 localuser localuser 18 set 20 13:13 dir

$ ls -li /tmp/
total 4
25606591 -rw-rw-r--. 1 localuser localuser  2 set 19 16:54 hard
 8410604 lrwxrwxrwx. 1 localuser localuser 20 set 20 13:18 softdir -> /home/localuser/dir/

si está trabajando en un recinto de color ls comando, los enlaces simbólicos creados para archivos o directorios son de color verde claro o verde azulado, mientras que los archivos originales son blancos y los directorios originales son azul oscuro. Estos colores le permiten identificar fácilmente los enlaces simbólicos y el contenido original. Además, los enlaces simbólicos creados para archivos y directorios no son los mismos que la dirección de inodo original.

Finalmente, los enlaces simbólicos de archivos también varían en tamaño y permisos. Compara los siguientes ejemplos:

$ stat dir/

  File: dir/
  Size: 18        	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 25606589    Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/localuser)   Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-09-20 13:13:25.137000000 -0300
Modify: 2022-09-20 13:13:15.527000000 -0300
Change: 2022-09-20 13:13:15.527000000 -0300
 Birth: 2022-09-19 15:21:27.616000000 -0300

$ stat /tmp/softdir/

  File: /tmp/softdir/
  Size: 18        	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 25606589    Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/localuser)   Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-09-20 13:13:25.137000000 -0300
Modify: 2022-09-20 13:13:15.527000000 -0300
Change: 2022-09-20 13:13:15.527000000 -0300
 Birth: 2022-09-19 15:21:27.616000000 -0300

$ stat /tmp/hard

  File: /tmp/hard
  Size: 2         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 25606591    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/localuser)   Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-09-19 16:56:22.024000000 -0300
Modify: 2022-09-19 16:54:59.123000000 -0300
Change: 2022-09-19 16:56:03.380000000 -0300
 Birth: 2022-09-19 15:29:40.276000000 -0300

$ stat dir/soft

  File: dir/soft -> /tmp/hard
  Size: 9         	Blocks: 0          IO Block: 4096   symbolic link
Device: fd00h/64768d	Inode: 25811328    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/localuser)   Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-09-20 13:13:25.137000000 -0300
Modify: 2022-09-20 13:13:15.527000000 -0300
Change: 2022-09-20 13:13:15.527000000 -0300
 Birth: 2022-09-20 13:13:15.527000000 -0300

Tenga en cuenta que el enlace simbólico creado para el archivo no consume ningún bloque de disco y tiene un tamaño de 9 (la longitud del archivo) /tmp/hard ruta completa) precisamente porque es solo un puntero. Puede manipular enlaces simbólicos como el archivo original, y los cambios en su contenido se reflejan en el archivo original:

$ cat dir/soft

0

$ cat /tmp/hard

0

$ echo 1 > dir/soft

$ cat dir/soft

1

$ cat /tmp/hard

1

actualizar enlace simbólico

Si mueve el archivo o el directorio al que apunta el enlace simbólico, la conexión se interrumpe:

$ mv ~/dir ~/moved

$ cd /tmp/softdir
bash: cd: dir: No such file or directory

Puede actualizar el enlace simbólico usando -f Opciones:

$ ln -sf ~/moved /tmp/softdir

$ ls -l /tmp/softdir
lrwxrwxrwx 1 localuser...3 Oct  3 18:42 softdir -> moved

[ Get the guide to installing applications on Linux. ]

Borrar archivos

Cuando elimina el archivo al que apunta el enlace simbólico, la conexión se corta (a diferencia de un enlace duro, los datos desaparecen inmediatamente). Vea cómo los dos son diferentes a continuación:

$ rm /tmp/hard

$ ls -li /tmp/
total 0
8410604 lrwxrwxrwx. 1 localuser localuser 20 set 20 13:18 softdir -> /home/localuser/dir/

$ ls -li dir/
total 0
25811328 lrwxrwxrwx. 1 localuser localuser 9 set 20 13:13 soft ->

$ file dir/soft
dir/soft: broken symbolic link to /tmp/hard

$ cat dir/soft
cat: dir/soft: No such file or directory

Si usa terminal con color ls comando, puede ver la salida en rojo oscuro del nombre del enlace simbólico y el texto blanco parpadeante en el fondo rojo claro del archivo original que ya no existe.Este file El comando muestra que su enlace simbólico ahora está roto. ¿Qué sucede si intentas escribir algo en un enlace simbólico roto?

$ ls -li /tmp/

total 0
8410604 lrwxrwxrwx. 1 localuser localuser 20 set 20 13:18 softdir -> /home/localuser/dir/

$ echo 0 > dir/soft

$ ls -li dir/soft

25606591 lrwxrwxrwx. 1 localuser localuser 9 set 20 13:39 dir/soft -> /tmp/hard

$ file dir/soft

dir/soft: symbolic link to /tmp/hard

$ ls -li /tmp/hard

8410609 -rw-rw-r--. 1 localuser localuser 2 set 20 13:44 /tmp/hard

$ stat /tmp/hard

  File: /tmp/hard
  Size: 2         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 8410609     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/localuser)   Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2022-09-20 13:44:55.300000000 -0300
Modify: 2022-09-20 13:44:55.300000000 -0300
Change: 2022-09-20 13:44:55.300000000 -0300
 Birth: 2022-09-20 13:44:55.300000000 -0300

Crea un nuevo archivo con el mismo nombre en la misma ruta señalada por el enlace simbólico con el contenido recién agregado.

Pero no sucede lo mismo cuando se trata de directorios:

$ rm -rf dir/

$ ls -li

$ ls -li /tmp/

total 4
8410609 -rw-rw-r--. 1 localuser localuser  2 set 20 13:44 hard
8410604 lrwxrwxrwx. 1 localuser localuser 20 set 20 13:18 softdir ->

$ cd /tmp/softdir

-bash: cd: /tmp/softdir: No such file or directory

$ file /tmp/softdir

/tmp/softdir: broken symbolic link to /home/localuser/dir/

$ echo 0 > /tmp/softdir/soft

-bash: /tmp/softdir/soft: No such file or directory

Aquí se aplica el mismo esquema de color descrito anteriormente para el enlace roto. No podrá acceder al directorio original a través de su enlace simbólico roto o al intentar crear algo en ese archivo. No vuelve a crear el directorio, lo que significa que ha perdido todo y el enlace simbólico está realmente roto, a menos que cree otro directorio (un nuevo directorio) con el mismo nombre y ubicación que el original:

$ pwd
/home/localuser

$ mkdir dir

$ ls -li
total 0
21451985 drwxrwxr-x. 2 localuser localuser 6 set 20 13:55 dir

$ ls -li /tmp/
total 4
8410609 -rw-rw-r--. 1 localuser localuser  2 set 20 13:44 hard
8410604 lrwxrwxrwx. 1 localuser localuser 20 set 20 13:18 softdir -> /home/localuser/dir/

$ cd /tmp/softdir

$ pwd
/tmp/softdir

$ touch file

$ ls -li
total 0
21451986 -rw-rw-r--. 1 localuser localuser 0 set 20 13:56 file

$ ls -li /home/localuser/dir/
total 0
21451986 -rw-rw-r--. 1 localuser localuser 0 set 20 13:56 file

Cuando utilice enlaces simbólicos, asegúrese de mantener siempre el contenido original para evitar enlaces rotos en su sistema.

envolver

Como administrador del sistema, debe comprender y saber cómo crear y manipular enlaces físicos y simbólicos, y los conceptos detrás de ellos. Esta habilidad le proporciona un conjunto completo de recursos y posibilidades para simplificar, facilitar, mejorar y automatizar la administración del sistema. Espero que este artículo y mi artículo anterior sobre enlaces duros lo hayan ayudado a comprender el tema, lo hayan ayudado en su ruta de certificación de Linux y hayan aumentado su conocimiento general de administrador de sistemas.

LEER  Comando y Control (C2)

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba