jueves, 21 de marzo de 2019

Significado de segunda columna de comando ls

Un comando ampliamente utilizado en un sistema Linux es ls con el parámetro -l, que ofrece información adicional por cada fichero. Veamos un ejemplo:
$ ls -l
total 12
-rwxr-xr-x 1 root root 4017 mar 20 09:49 specs.sh
drwx------ 3 root root 4096 mar 18 10:29 systemd-private-ac
drwx------ 2 root root 4096 ago  7  2018 vmware-root
Sin embargo, no es habitual conocer el significado de la segunda columna, ese valor numérico que tiene cada fichero o directorio listado.
Este valor indica el número de enlaces duros que tiene el fichero o directorio. Recordar que un fichero cualquiera mantiene sus datos almacenados en el disco duro, y dispone de una estructura de inodos para indicar qué bloques son los que tienen sus datos. Un enlace duro es un fichero que usa el mismo inodo que el fichero original. Veamos un ejemplo:
  • Sobre el directorio anterior, crearemos un fichero llamado temporal que será un enlace duro del fichero specs.sh.
$ ln specs.sh temporal
  • Confirmamos que ambos ficheros, original y enlace duro, usan el mismo inodo con la opción -i de ls.
$ ls -li
total 16
1058883 -rwxr-xr-x 2 root root 4017 mar 20 09:49 specs.sh
1058881 drwx------ 3 root root 4096 mar 18 10:29 systemd-private-ac
1058883 -rwxr-xr-x 2 root root 4017 mar 20 09:49 temporal
1052036 drwx------ 2 root root 4096 ago  7  2018 vmware-root
Como se observa, ambos ficheros tienen el mismo número de inodo. Por tanto, ambos tienen el valor “2” en la columna que indica el número de enlaces duros de ese fichero (de ese inodo).
  • Eliminamos el fichero temporal. El fichero original no sufrirá ninguna alteración pues el inodo sigue estando referenciado por al menos 1 fichero.
$ rm temporal
$ ls -li
total 12
1058883 -rwxr-xr-x 1 root root 4017 mar 20 09:49 specs.sh
1058881 drwx------ 3 root root 4096 mar 18 10:29 systemd-private-ac
1052036 drwx------ 2 root root 4096 ago  7  2018 vmware-root
El caso de los directorios es el mismo que el de los ficheros. Veamos el caso del directorio systemd-private-ac:
Se indica que tiene 3 enlaces duros. Estos son los siguientes:
  • El directorio, listado en ls realizado sobre /tmp que es donde residen los ficheros y directorios que se han usado para este ejemplo.
$ ls -li
total 12
1058883 -rwxr-xr-x 1 root root 4017 mar 20 09:49 specs.sh
1058881 drwx------ 3 root root 4096 mar 18 10:29 systemd-private-ac
1052036 drwx------ 2 root root 4096 ago  7  2018 vmware-root
  • La referencia al propio directorio una vez entramos en él:
$ cd systemd-private-ac
$ ls -lai
total 12
1058881 drwx------ 3 root root 4096 mar 18 10:29 .
1048578 drwxrwxrwt 9 root root 4096 mar 21 12:06 ..
1058882 drwxrwxrwt 2 root root 4096 mar 18 10:29 tmp
  • Como este directorio tiene un subdirectorio, al acceder a tmp veremos un enlace duro al directorio padre, que es el que estamos tratando:
$ cd tmp
$ ls -lai
total 8
1058882 drwxrwxrwt 2 root root 4096 mar 18 10:29 .
1058881 drwx------ 3 root root 4096 mar 18 10:29 ..

No hay comentarios:

Publicar un comentario