Leer ls -l
-rwxr-xr-x. 1 root root 4096 Oct 18 12:00 script.sh
│└┬┘└┬┘└┬┘│ │ │ │ │ └────┬────┘ └───┬───┘
│ │ │ │ │ │ │ │ │ │ └ nombre (y -> destino en enlaces simbólicos)
│ │ │ │ │ │ │ │ │ └ hora de modificación (año si tiene más de 6 meses)
│ │ │ │ │ │ │ │ └ tamaño en bytes (o mayor, menor en dispositivos)
│ │ │ │ │ │ │ └ grupo
│ │ │ │ │ │ └ propietario
│ │ │ │ │ └ número de enlaces duros
│ │ │ │ └ . = contexto SELinux, + = ACL, @ = atributos extendidos (macOS)
│ │ │ └ otros: r-x
│ │ └ grupo: r-x
│ └ propietario: rwx
└ tipo: - archivo, d directorio, l enlace simbólico, c dispositivo de caracteres, b dispositivo de bloques, p tubería, s socket Cosas que confunden
- Número de enlaces: cuántas entradas de directorio apuntan al inodo. Para un directorio es 2 más el número de subdirectorios, porque el
..de cada subdirectorio cuenta. Un archivo con cuenta 3 tiene otros dos enlaces duros en algún sitio. - Tamaño de un directorio: el tamaño de su lista de entradas (4096 en ext4), no el total de su contenido. Para eso usa
du -sh. - s, S, t, T en la cadena de permisos son los bits setuid, setgid y sticky; en minúscula significa que el bit de ejecución subyacente también está activo, en mayúscula que no (normalmente un error).
- Los permisos de un enlace simbólico son siempre
lrwxrwxrwxy se ignoran; lo que importa es los del destino. - Tiempos: ls muestra mtime (contenido cambiado).
statmuestra también atime (última lectura, a menudo desactivado pornoatime), ctime (inodo cambiado: chmod, chown, rename) y la hora de creación en los sistemas de archivos que la guardan.
stat
stat archivo imprime todo lo que contiene el inodo: el modo en octal y simbólico, uid/gid con nombres, número de inodo, dispositivo, número de bloques (en unidades de 512 bytes, así que un archivo disperso muestra menos bloques de los que necesitaría su tamaño) y las cuatro marcas de tiempo. stat -c '%a %U %G %n' * imprime solo lo que pides; stat -f describe el sistema de archivos en su lugar.
Preguntas
¿Qué significa el punto al final de los permisos?
Hay un contexto de seguridad SELinux fijado en el archivo (se ve en Fedora, RHEL, CentOS). ls -Z lo muestra. Un + en su lugar significa que hay una lista de control de acceso; getfacl la muestra.
¿Por qué un directorio tiene número de enlaces 2?
Su propia entrada en el padre más su entrada «.». Cada subdirectorio añade uno más a través de su «..». Así que un directorio con número de enlaces 7 tiene cinco subdirectorios.
¿Cuál es la diferencia entre mtime y ctime?
mtime cambia cuando cambia el contenido; ctime cambia cuando cambia el inodo (contenido, permisos, propietario, número de enlaces). No puedes fijar ctime con touch, lo que lo hace útil en análisis forense.
¿Cómo veo los archivos ocultos y los tamaños en unidades legibles?
ls -lah: -a muestra los archivos que empiezan por punto, -h imprime los tamaños como K, M, G. Añade -t para ordenar por fecha y -r para invertir.