GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo crear enlaces duros y blandos (enlace simbólico) en sistemas Linux

Muchas veces, en cualquier sistema operativo basado en Linux/Unix, es aconsejable comprender los conceptos subyacentes, luego solo uno puede apreciar la belleza de los comandos y cómo se implementan.

Algunos pequeños detalles nos ayudarán mucho en la depuración y solución de problemas de muchas situaciones desafiantes si sabemos con anticipación acerca de estos comandos y conceptos relacionados.

En este tema, cubriré qué son los enlaces, los diferentes tipos, los caracteres distintivos y cómo pueden usarse mejor junto con los conceptos requeridos.

Al ejecutar el comando "man ln", puede ver que dice "hacer un enlace entre archivos" y no dice sobre enlaces blandos o duros.

[email protected] ~}$ man ln

De manera similar, el comando "man link" se describe como "llamar a la función de enlace para crear un archivo".

Enlace suave:

El enlace suave, como sugiere el nombre, es solo un nuevo enlace creado para el nuevo archivo. En este caso, el número de inodo del archivo nuevo apuntará al archivo antiguo.

Enlace fijo:

En este caso, el archivo antiguo y el nuevo apuntarán al mismo número de inodo.

Enlace simbólico:

En algunas variantes de Unix/Linux, tanto los enlaces simbólicos como los suaves se tratan de la misma manera. Pero la diferencia real es que tanto el número de inodo del archivo nuevo como el antiguo apuntarán a un nuevo número de inodo. Esto dependerá completamente de la implementación.

Nota 1 :- En muchos casos, las terminologías de enlace suave y simbólico se usan indistintamente. Pero uno tiene que ser consciente de cuándo usar qué.

Uso del comando "ln" para crear enlaces duros y suaves

Creación de enlace fijo

1) El comando "man ln" proporcionará el siguiente resultado.

[email protected] ~}$ man ln
ln  - make links between files

2) Cuando se pasa el comando "ln" sin ningún argumento, se genera el error "operando de archivo faltante".

[email protected] ~}$ln
ln: missing file operand
Try 'ln --help' for more information.

3) Crear el enlace duro entre dos archivos. Primero verifique si hay archivos existentes, si los hay, de lo contrario, cree el archivo o los archivos nuevos y luego vincúlelos. A continuación se muestra el enfoque paso a paso,

[email protected] ~}$ ls -la
total 24
drwx------  4 root root 4096 Feb  6 15:23 .
drwxr-xr-x 23 root root 4096 Jan 25 16:39 ..
-rw-r--r--  1 root root 3122 Jan 25 16:41 .bashrc
drwx------  2 root root 4096 Feb  6 15:23 .cache
-rw-r--r--  1 root root    0 Jan 25 16:41 .hushlogin
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
drwxr-xr-x  2 root root 4096 Jan 25 16:41 .ssh

yo) Cree el archivo usando el comando "tocar"

[email protected] ~}$ touch 123.txt
[email protected] ~}$ ls -l
total 0
-rw-r--r-- 1 root root 0 Feb  6 15:51 123.txt

ii) Ingrese el contenido en el archivo usando el comando "cat" y presione "ctrl+c" para guardar y salir.

[email protected] ~}$ cat > 123.txt
Welcome to this World!
^C

iii) Cree el enlace duro entre los archivos "123.txt" y "321.txt". En este caso ya existía el “123.txt” con contenidos “Bienvenidos a este Mundo”.

[email protected] ~}$ ln 123.txt 321.txt
[email protected] ~}$ ls -l
total 8
-rw-r--r-- 2 root root 23 Feb  6 15:52 123.txt
-rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt

iv) Verifique los números de inodo (nodo de índice) de los archivos. Para ambos archivos, el número de inodo es el mismo y es 794583. También verifique el contenido del nuevo archivo "321.txt", que también es el mismo que "123.txt".

[email protected] ~}$ ls -li
total 8
794583 -rw-r--r-- 2 root root 23 Feb  6 15:52 123.txt
794583 -rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt
$ cat 321.txt
Welcome to this World!

Nota 2 :- El número de inodo es un número de índice único generado para cualquier archivo que se crea en los sistemas operativos Linux/unix. Estos números de inodo se almacenan en atributos de directorio/archivo en el directorio /proc. Pero en el caso de los enlaces, estos números de inodo se comparten entre los archivos y solo la ruta se actualiza en la tabla de archivos.

v) Cree un archivo más llamado "456.txt" y vincúlelo usando el comando ln a "321.txt". Ahora los tres archivos tienen los mismos números de inodo. El contenido de "456.txt" será el mismo que el del archivo original.

[email protected] ~}$  ls -li
total 12
794583 -rw-r--r-- 3 root root 23 Feb  6 15:52 123.txt
794583 -rw-r--r-- 3 root root 23 Feb  6 15:52 321.txt
794583 -rw-r--r-- 3 root root 23 Feb  6 15:52 456.txt
$ cat 456.txt
Welcome to this World!
[email protected] ~}$   ls -l
total 12
-rw-r--r-- 3 root root 23 Feb  6 15:52 123.txt
-rw-r--r-- 3 root root 23 Feb  6 15:52 321.txt
-rw-r--r-- 3 root root 23 Feb  6 15:52 456.txt

vi) Cuando se elimine el archivo de origen o cualquiera de estos archivos, no afectará a otros archivos. El archivo de origen se puede eliminar con el comando "rm". El contenido de otro archivo tampoco tendrá ningún impacto.

[email protected] ~}$ rm 123.txt
[email protected] ~}$ ls -l
total 8
-rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt
-rw-r--r-- 2 root root 23 Feb  6 15:52 456.txt
[email protected] ~}$ ls -li
total 8
794583 -rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt
794583 -rw-r--r-- 2 root root 23 Feb  6 15:52 456.txt
[email protected] ~}$ cat 456.txt
Welcome to this World!

vii) No se permite la creación de enlaces duros entre directorios.

[email protected] ~}$ls -l
total 8
-rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt
-rw-r--r-- 2 root root 23 Feb  6 15:52 456.txt
[email protected] ~}$ mkdir abc
[email protected] ~}$ ln abc def
ln: abc: hard link not allowed for directory

viii) Cualquier cambio en el contenido de un archivo afectará y cambiará el contenido de otro archivo en consecuencia, a continuación se explican los pasos,

[email protected] ~}$ vi 321.txt
Welcome to this World!
You are welcomed to this new world
:wq
[email protected] ~}$ ls -l
total 12
-rw-r--r-- 2 root root   59 Feb  6 16:24 321.txt
-rw-r--r-- 2 root root   59 Feb  6 16:24 456.txt
drwxr-xr-x 2 root root 4096 Feb  6 16:18 abc
[email protected] ~}$ cat 456.txt
Welcome to this World!
You are welcomed to this new world

Creación de vínculos suaves:

1)  Cree el archivo "src.txt" usando el comando "tocar" e ingrese el contenido como "Hello World" usando el comando cat y luego presione "ctrl+c" para guardar y salir.

[email protected] ~}$ touch src.txt
[email protected] ~}$ cat > src.txt
Hello World
^C
[email protected] ~}$ ls -l
total 4
-rw-r--r-- 1 root root 12 Feb  6 16:32 src.txt

2) Cree el archivo de destino como "dst.txt" y usando las opciones de línea de comando "ln -s" cree el enlace simbólico (también llamado enlace suave). Verifique el contenido del archivo "dst.txt" y se puede ver el mismo contenido que el de "src.txt".

[email protected] ~}$ ln -s src.txt dst.txt
[email protected] ~}$  ls -l
total 4
lrwxrwxrwx 1 root root  7 Feb  6 16:33 dst.txt -> src.txt
-rw-r--r-- 1 root root 12 Feb  6 16:32 src.txt
[email protected] ~}$  cat dst.txt
Hello World

3) En el caso de enlaces simbólicos, el número de inodo del archivo de origen y el archivo de destino difieren. Además, en los permisos aparece la letra “l” indicando que se trata de enlaces. “dst.txt–>src.txt” será el nuevo enlace establecido ahora.

[email protected] ~}$  ls -li
total 4
794584 lrwxrwxrwx 1 root root  7 Feb  6 16:33 dst.txt -> src.txt
794583 -rw-r--r-- 1 root root 12 Feb  6 16:32 src.txt

4) Se permite la creación simbólica de directorios. Esto se explica a continuación en los pasos

[email protected] ~}$ mkdir abc
[email protected] ~}$ ln -s abc def
$ ls -l
total 8
drwxr-xr-x 2 root root 4096 Feb  6 16:34 abc
lrwxrwxrwx 1 root root    3 Feb  6 16:34 def -> abc
lrwxrwxrwx 1 root root    7 Feb  6 16:33 dst.txt -> src.txt
-rw-r--r-- 1 root root   12 Feb  6 16:32 src.txt

5) Número de inodo para todos los archivos/directorios (el origen y el destino son diferentes)

[email protected] ~}$  ls -li
total 8
794585 drwxr-xr-x 2 root root 4096 Feb  6 16:34 abc
794586 lrwxrwxrwx 1 root root    3 Feb  6 16:34 def -> abc
794584 lrwxrwxrwx 1 root root    7 Feb  6 16:33 dst.txt -> src.txt
794583 -rw-r--r-- 1 root root   12 Feb  6 16:32 src.txt

6) Se pueden crear enlaces simbólicos para directorios como se explicó anteriormente. Una vez que se crean estos directorios con enlace simbólico, dentro de estos directorios se pueden crear archivos. Esto hará que sea más interesante saber cómo se comporta esto ahora. Cuando los archivos se crean en el directorio de origen, lo mismo se refleja en el directorio de destino también. Los siguientes pasos explican esto claramente.

[email protected] ~}$ $ cd abc
[email protected] ~}$  touch 123.txt
[email protected] ~}$  vi 123.txt
Hello
:wq!
[email protected] ~}$  touch 456.txt
[email protected] ~}$  cd ..
[email protected] ~}$  ls -l
total 8
drwxr-xr-x 2 root root 4096 Feb  6 16:36 abc
lrwxrwxrwx 1 root root    3 Feb  6 16:34 def -> abc
lrwxrwxrwx 1 root root    7 Feb  6 16:33 dst.txt -> src.txt
-rw-r--r-- 1 root root   12 Feb  6 16:32 src.txt
[email protected] ~}$ cd def
[email protected] ~}$ ls -l
total 4
-rw-r--r-- 1 root root 6 Feb  6 16:37 123.txt
-rw-r--r-- 1 root root 0 Feb  6 16:36 456.txt
[email protected] ~}$ cat 123.txt
Hello

Nota 3 :- Podemos tener cualquier número de enlaces anidados. Pero el usuario/administrador que crea estos enlaces simbólicos debe ser consciente del hecho de que esto generará confusión. A veces se pueden olvidar y generar resultados no deseados. Así que tienen que tener cuidado.

Nota 4 :- Hay algunas posibilidades de enlace "simbólico" o "suave" que apunta a un enlace inexistente. Esto se llama "enlace colgante". Esto apuntará a ninguna parte.

Nota 5 :- hay llamadas al sistema que se usan en linux/unix para crear enlaces simbólicos OR a nivel de programación (usando programas C/C++ a nivel de sistema). Estos son 1) enlace simbólico 2) enlace simbólico.

Estos no deben confundirse con las utilidades de línea de comandos que he descrito anteriormente.

Eliminación de enlaces blandos/enlaces simbólicos

Los enlaces blandos o simbólicos se eliminan con los comandos 'rm' y desvincular.

Sintaxis:

# rm

# unlink

Eliminación de directorios de Soft Link

Sintaxis:

# rm

# unlink

Conclusiones:

La creación de enlaces, ya sean duros o blandos, será muy útil para los administradores y desarrolladores. El material de referencia anterior será útil para comprender qué tipo de enlace estamos creando y cómo es útil. Además, este artículo ayudará a comprender las diferencias y la utilización de los enlaces.


Linux
  1. Cómo hacer que el archivo y el directorio no se puedan eliminar, incluso mediante la raíz en Linux

  2. Cómo crear enlaces duros y simbólicos en Linux

  3. Cómo crear enlaces blandos y duros en Linux

  4. ¿Qué son los enlaces blandos y los enlaces duros en el sistema de archivos de Linux?

  5. Cómo crear y montar sistemas de archivos en Linux

Explicación de Soft Link y Hard Link en Linux con ejemplos

Cómo vincular un archivo en Linux

Cómo crear y usar un archivo de intercambio en Linux

¿Qué son los enlaces simbólicos en Linux? ¿Cómo crear enlaces simbólicos?

El comando ln en Linux:crear enlaces blandos y duros

Enlaces duros y enlaces blandos en Linux:todo lo que necesita saber