bitlvl
ES

Explicador de ls -l y stat

Pega una o varias líneas de ls -l, o la salida de stat archivo. Cada columna se nombra y decodifica, incluidos los marcadores que la mayoría ignora.

Los resultados y mensajes de esta herramienta se muestran en inglés.

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 lrwxrwxrwx y se ignoran; lo que importa es los del destino.
  • Tiempos: ls muestra mtime (contenido cambiado). stat muestra también atime (última lectura, a menudo desactivado por noatime), 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.