104.6 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
104 Dispositivos, sistemas de archivos Linux, estándar de jerarquía del sistema de archivos |
Objetivo: |
104.6 Crear y cambiar enlaces físicos y simbólicos |
Lección: |
1 de 1 |
Introducción
En Linux, algunos archivos reciben un tratamiento especial ya sea por el lugar en el que se almacenan, como los archivos temporales, o la forma en que interactúan con el sistema de archivos, como los enlaces. En esta lección aprenderá qué son los enlaces y cómo administrarlos.
Entender los Enlaces
Como ya se mencionó, en Linux todo se trata como un archivo. Pero hay un tipo especial de archivo, llamado link, y hay dos tipos de enlaces en un sistema Linux:
- Enlaces simbólicos
-
También llamados enlaces suaves, apuntan a la ruta de otro archivo. Si borra el archivo al que apunta el enlace (llamado target), el enlace seguirá existiendo, pero “deja de funcionar”, ya que ahora apunta a “nada”.
- Enlaces duros
-
Piense en un enlace físico como un segundo nombre para el archivo original. No son duplicados, sino que son una entrada adicional en el sistema de archivos que apunta al mismo lugar (inodo) en el disco.
Tip
|
Un inodo es una estructura de datos que almacena atributos para un objeto (como un archivo o directorio) en un sistema de archivos. Entre esos atributos están los permisos, la propiedad y en qué bloques del disco se almacenan los datos del objeto. Piense en ello como una entrada en un índice, de ahí el nombre, que proviene de “index node”. |
Trabajar con Enlaces duros
Creación de enlaces duros
El comando para crear un enlace físico en Linux es ln
. La sintaxis básica es:
$ ln TARGET LINK_NAME
El TARGET
ya debe existir (este es el archivo al que apuntará el enlace), y si el objetivo no está en el directorio actual, o si desea crear el enlace en otro lugar, debe especificar la ruta completa. Por ejemplo, el comando:
$ ln target.txt /home/carol/Documents/hardlink
creará un archivo llamado hardlink
en el directorio /home/carol/Documents/
, vinculado al archivo target.txt
en el directorio actual.
Si omite el último parámetro (LINK_NAME
), se creará un vínculo con el mismo nombre que el objetivo en el directorio actual.
Gestión de enlaces duros
Los enlaces duros son entradas en el sistema de archivos que tienen diferentes nombres pero apuntan a los mismos datos en el disco. Todos estos nombres son iguales y pueden usarse para hacer referencia a un archivo. Si cambia el contenido de uno de los nombres, el contenido de todos los demás nombres que apuntan a ese archivo cambia, ya que todos estos nombres apuntan a los mismos datos. Si elimina uno de los nombres, los otros nombres seguirán funcionando.
Esto sucede porque cuando “borras” un archivo, los datos no se borran del disco. El sistema simplemente elimina la entrada en la tabla del sistema de archivos que apunta al inodo correspondiente a los datos en el disco. Pero si tiene una segunda entrada que apunta al mismo inodo, aún puede acceder a los datos. Piense en ello como dos caminos que convergen en el mismo punto. Incluso si bloquea o redirige una de las carreteras, aún puede llegar al destino utilizando la otra.
Puede verificar esto usando el parámetro -i
de ls
. Considere los siguientes contenidos de un directorio:
$ ls -li total 224 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 hardlink 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 target.txt
El número antes de los permisos es el número de inodo. ¿Nota que tanto el archivo hardlink
como el archivo target.txt
tienen el mismo número (3806696
)? Esto se debe a que uno es un vínculo duro del otro.
Pero, ¿cuál es el original y cuál es el enlace? Realmente no se puede decir, ya que para todos los propósitos prácticos son iguales.
Tenga en cuenta que cada enlace fijo que apunta a un archivo aumenta el conteo de enlaces del archivo. Este es el número justo después de los permisos en la salida de ls -l
. De forma predeterminada, cada archivo tiene un recuento de enlaces de 1
(los directorios tienen un recuento de 2
), y cada vínculo físico a él aumenta el recuento en uno. Entonces, esa es la razón del recuento de enlaces de 2
en los archivos de la lista anterior.
A diferencia de los enlaces simbólicos, solo puede crear enlaces físicos a archivos, y tanto el enlace como el destino deben residir en el mismo sistema de archivos.
Mover y eliminar enlaces duros
Dado que los enlaces duros se tratan como archivos normales, se pueden eliminar con rm
y renombrarlos o moverlos por el sistema de archivos con mv
. Y dado que un enlace fijo apunta al mismo inodo del objetivo, se puede mover libremente, sin miedo a “romper” el enlace.
Enlaces Simbólicos
Creación de enlaces simbólicos
El comando utilizado para crear un enlace simbólico también es ln
, pero con el parámetro -s
agregado. Al igual que:
$ ln -s target.txt /home/carol/Documents/softlink
Esto creará un archivo llamado softlink
en el directorio /home/carol/Documents/
, apuntando al archivo target.txt
en el directorio actual.
Al igual que con los enlaces físicos, puede omitir el nombre del enlace para crear un enlace con el mismo nombre que el destino en el directorio actual.
Gestión de enlaces simbólicos
Los enlaces simbólicos apuntan a otra ruta en el sistema de archivos. Puede crear enlaces suaves a archivos y directorios, incluso en diferentes particiones. Es bastante fácil detectar un enlace simbólico con la salida del comando ls
:
$ ls -lh total 112K -rw-r--r-- 1 carol carol 110K Jun 7 10:13 target.txt lrwxrwxrwx 1 carol carol 12 Jun 7 10:14 softlink -> target.txt
En el ejemplo anterior, el primer carácter de los permisos para el archivo softlink
es l
, lo que indica un enlace simbólico. Además, justo después del nombre del archivo, verá el nombre del destino al que apunta el enlace, el archivo target.txt
.
Tenga en cuenta que en los listados de archivos y directorios, los enlaces suaves siempre muestran los permisos rwx
para el usuario, el grupo y otros, pero en la práctica los permisos de acceso para ellos son los mismos que los del objetivo.
Mover y eliminar enlaces simbólicos
Al igual que los enlaces físicos, los enlaces simbólicos pueden eliminarse usando rm
y moverse o renombrarse usando mv
. Sin embargo, se debe tener especial cuidado al crearlos, para evitar “romper” el enlace si se mueve de su ubicación original.
Al crear enlaces simbólicos, debe tener en cuenta que, a menos que se especifique completamente una ruta, la ubicación del objetivo se interpreta como relativa a la ubicación del enlace. Esto puede crear problemas si se mueve el vínculo o el archivo al que apunta.
Esto es más fácil de entender con un ejemplo. Supongamos que tiene un archivo llamado original.txt
en el directorio actual y desea crear un enlace simbólico llamado softlink
. Podrías usar:
$ ln -s original.txt softlink
Y aparentemente todo estaría bien. Comprobemos con ls
:
$ ls -lh total 112K -r--r--r-- 1 carol carol 110K Jun 7 10:13 original.txt lrwxrwxrwx 1 carol carol 12 Jun 7 19:23 softlink -> original.txt
Vea cómo se construye el enlace: softlink
apunta a (→
) original.txt
. Sin embargo, veamos qué sucede si mueve el enlace al directorio anterior e intentas mostrar su contenido usando el comando less
:
$ mv softlink ../ $ less ../softlink ../softlink: No such file or directory
Dado que no se especificó la ruta a original.txt
, el sistema asume que está en el mismo directorio que el enlace. Cuando esto ya no es cierto, el enlace deja de funcionar.
La forma de evitar esto es especificar siempre la ruta completa al destino al crear el enlace:
$ ln -s /home/carol/Documents/original.txt softlink
De esta manera, no importa dónde mueva el enlace, seguirá funcionando, porque apunta a la ubicación absoluta del objetivo. Verifique con ls
:
$ ls -lh total 112K lrwxrwxrwx 1 carol carol 40 Jun 7 19:34 softlink -> /home/carol/Documents/original.txt
Ejercicios Guiados
-
¿Cuál es el parámetro para
chmod
en el modo symbolic para habilitar el bit sticky en un directorio? -
Imagina que hay un archivo llamado
document.txt
en el directorio/home/carol/Documents
. ¿Cuál es el comando para crear un enlace simbólico llamadotext.txt
en el directorio actual? -
Explique la diferencia entre un vínculo físico a un archivo y una copia de este archivo.
Ejercicios Exploratorios
-
Imagine que dentro de un directorio crea un archivo llamado
recipes.txt
. Dentro de este directorio, también creará un enlace físico a este archivo, llamadoreceitas.txt
, y un enlace simbólico (o soft) a este llamadorezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s recipes.txt rezepte.txt
El contenido del directorio debería ser así:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Recuerde que, como enlace físico,
receitas.txt
apunta al mismo inodo que se asigna arecipes.txt
. ¿Qué pasaría con el enlace suaverezepte.txt
si se elimina el archivoreceitas.txt
? ¿Por qué? -
Imagine que tiene una unidad flash conectada a su sistema y montada en
/media/youruser/FlashA
. Desea crear un enlace llamadoschematics.pdf
en su directorio de inicio, apuntando al archivoesquema.pdf
en la raíz de la unidad flash. Entonces, escribe el comando:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
¿Qué pasaría? ¿Por qué?
-
Considere la siguiente salida de
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
¿Cuántos enlaces apuntan al archivo
document.txt
? -
¿Son enlaces suaves o duros?
-
¿Qué parámetro debería pasar a
ls
para ver qué inodo ocupa cada archivo?
-
-
Imagine que tiene en su directorio
~/Documents
un archivo llamadoclients.txt
que contiene algunos nombres de clientes y un directorio llamadosomedir
. Dentro de este hay un archivo diferente también llamadoclients.txt
con diferentes nombres. Para replicar esta estructura, use los siguientes comandos.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Luego cree un enlace dentro de
somedir
llamadopartners.txt
apuntando a este archivo, con los comandos:$ cd somedir/ $ ln -s clients.txt partners.txt
Entonces, la estructura del directorio es:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Ahora, mueva
partners.txt
desomedir
a~/Documents
y liste su contenido.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
¿Seguirá funcionando el enlace? Si es así, ¿qué archivo tendrá su contenido en la lista? ¿Por qué?
-
Considere los siguientes archivos:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
¿Cuáles son los permisos de acceso para
partners.txt
? ¿Por qué?
Resumen
En esta lección aprendimos:
-
Qué son los enlaces.
-
La diferencia entre enlaces simbólicos y duros.
-
Cómo crear enlaces.
-
Cómo mover, renombrar o eliminar estos enlaces.
Los siguientes comandos se discutieron en esta lección:
-
ln
: El comando “link”. Por sí mismo, este comando crea un vínculo físico. Con la opción-s
se puede crear un enlace simbólico o suave. Recuerde que los enlaces físicos solo pueden residir en la misma partición y sistema de archivos, y los enlaces simbólicos pueden atravesar particiones y sistemas de archivos (incluso el almacenamiento conectado a la red). -
El parámetro
-i
dels
, que permite ver el número de inodo de un archivo.
Respuestas a los ejercicios guiados
-
¿Cuál es el parámetro para
chmod
en el modo symbolic para habilitar el bit sticky en un directorio?El símbolo del bit sticky en modo simbólico es
t
. Como queremos habilitar (agregar) este permiso al directorio, el parámetro debe ser+t
. -
Imagina que hay un archivo llamado
document.txt
en el directorio/home/carol/Documents
. ¿Cuál es el comando para crear un enlace simbólico llamadotext.txt
en el directorio actual?ln -s
es el comando para crear un enlace simbólico. Dado que debe especificar la ruta completa al archivo al que está vinculando, el comando es:$ ln -s /home/carol/Documents/document.txt text.txt
-
Explique la diferencia entre un vínculo físico a un archivo y una copia de este archivo.
Un enlace físico es solo otro nombre para un archivo. Aunque parezca un duplicado del archivo original, a todos los efectos, tanto el enlace como el original son iguales, ya que apuntan a los mismos datos en el disco. Los cambios realizados en el contenido del enlace se reflejarán en el original y viceversa. Una copia es una entidad completamente independiente que ocupa un lugar diferente en el disco. Los cambios en la copia no se reflejarán en el original y viceversa.
Respuestas a ejercicios exploratorios
-
Imagine que dentro de un directorio creas un archivo llamado
recipes.txt
. Dentro de este directorio, también creará un enlace físico a este archivo, llamadoreceitas.txt
, y un enlace simbólico (o soft) a este llamadorezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s receitas.txt rezepte.txt
El contenido del directorio debería ser así:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Recuerde que, como enlace físico,
receitas.txt
apunta al mismo inodo que se asigna arecipes.txt
. ¿Qué pasaría con el enlace suaverezepte.txt
si se elimina el archivoreceitas.txt
? ¿Por qué?El enlace suave
rezepte.txt
dejaría de funcionar. Esto se debe a que los enlaces suaves apuntan a nombres, no a inodos, y el nombrereceitas.txt
ya no existe, incluso si los datos todavía están en el disco con el nombrerecipes.txt
. -
Imagine que tiene una unidad flash conectada a su sistema y montada en
/media/youruser/FlashA
. Desea crear un enlace llamadoschematics.pdf
en su directorio de inicio, apuntando al archivoesquema.pdf
en la raíz de la unidad flash. Entonces, escribe el comando:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
¿Qué pasaría? ¿Por qué?
El comando fallaría. El mensaje de error sería
Invalid cross-device link
, y aclara la razón: los enlaces físicos no pueden apuntar a un objetivo en una partición o dispositivo diferente. La única forma de crear un enlace como este es usar un enlace simbólico o suave, agregando el parámetro-s
aln
. -
Considere la siguiente salida de
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
¿Cuántos enlaces apuntan al archivo
document.txt
?Cada archivo comienza con un recuento de enlaces de
1
. Dado que el número de enlaces del archivo es4
, hay tres enlaces que apuntan a ese archivo. -
¿Son enlaces suaves o duros?
Son enlaces duros, ya que los enlaces suaves no aumentan el número de enlaces de un archivo.
-
¿Qué parámetro debería pasar a
ls
para ver qué inodo ocupa cada archivo?El parámetro es
-i
. El inodo se mostrará como la primera columna en la salida dels
, como se muestra a continuación:$ ls -lahi total 3,1M 5388773 drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . 5245554 drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. 5388840 -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt 5388837 -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
-
Imagine que tiene en su directorio
~/Documents
un archivo llamadoclients.txt
que contiene algunos nombres de clientes y un directorio llamadosomedir
. Dentro de este hay un archivo diferente también llamadoclients.txt
con diferentes nombres. Para replicar esta estructura, use los siguientes comandos.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Luego cree un enlace dentro de
somedir
llamadopartners.txt
apuntando a este archivo, con los comandos:$ cd somedir/ $ ln -s clients.txt partners.txt
Entonces, la estructura del directorio es:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Ahora, mueva
partners.txt
desomedir
a~/Documents
y liste su contenido.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
¿Seguirá funcionando el enlace? Si es así, ¿qué archivo tendrá su contenido en la lista? ¿Por qué?
Esto es “complicado”, pero el vínculo funcionará, y el archivo que aparece en la lista será el de
~/Documentos
, que contiene los nombresJohn
,Michael
,Bob
.Recuerde que, dado que no especificó la ruta completa al destino
clients.txt
al crear el enlace suavepartners.txt
, la ubicación de destino se interpretará como relativa a la ubicación del enlace, que en este caso es el directorio actual.Cuando el enlace se movió de
~/Documents/somedir
a~/Documents
, debería dejar de funcionar, ya que el destino ya no estaba en el mismo directorio que el enlace. Sin embargo, da la casualidad de que hay un archivo llamadoclients.txt
en~/Documents
, por lo que el enlace apuntará a este archivo, en lugar del destino original dentro de~/somedir
.Para evitar esto, siempre especifique la ruta completa al objetivo al crear un enlace simbólico.
-
Considere los siguientes archivos:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
¿Cuáles son los permisos de acceso para
partners.txt
? ¿Por qué?Los permisos de acceso para
partners.txt
sonrw-r—r--
, ya que los enlaces siempre heredan los mismos permisos de acceso que el destino.