Introducción
En el día a día de un administrador de sistemas o un desarrollador que trabaja en entornos Linux, conocer los metadatos de un archivo es tan importante como saber su contenido. Mientras que comandos como ls o find nos dan una visión general, el comando stat nos permite profundizar y extraer información detallada que a menudo pasa desapercibida. En este artículo exploraremos qué es stat, cómo funciona su sintaxis, qué opciones ofrece y cómo interpretar cada uno de los campos que devuelve.
¿Qué es stat?
El comando stat pertenece al paquete de utilidades básicas de GNU coreutils y se encarga de mostrar el estado de un archivo o sistema de archivos. A diferencia de ls -l, que muestra un formato legible pero limitado, stat presenta todos los atributos que el kernel mantiene en el inodo: permisos, número de enlaces, propietario, grupo, tamaño, bloques asignados, y los diversos timestamps (acceso, modificación y cambio de estado). Además, permite al usuario definir un formato de salida personalizado mediante la opción -c o --format, lo que lo convierte en una herramienta muy flexible para scripts y automatización.
Sintaxis básica
La forma más simple de usar stat es:
stat [opciones] archivo
Si no se especifica ninguna opción, el comando muestra una salida predeterminada dividida en bloques: información del archivo, del sistema de archivos donde reside y, opcionalmente, de cualquier enlace simbólico que se siga. Algunas de las opciones más comunes son:
-Lo--dereference: sigue enlaces simbólicos y muestra la información del archivo al que apuntan.-fo--file-system: muestra estadísticas del sistema de archivos en lugar del archivo.-c FORMATo--format=FORMAT: define un formato de salida personalizado usando secuencias de escape.-to--terse: salida en forma compacta, útil para procesamiento posterior.
Opciones de formato más útiles
La verdadera potencia de stat reside en su capacidad de formatear la salida. A continuación se listan algunas de las secuencias de escape más utilizadas:
%n: nombre del archivo.%s: tamaño total en bytes.%U: nombre del propietario.%G: nombre del grupo.%a: permisos en formato octal (ej. 755).%A: permisos en formato legible (ej. -rwxr-xr-x).%X: tiempo de último acceso en segundos desde la época.%Y: tiempo de última modificación en segundos desde la época.%Z: tiempo de último cambio de estado (inodo) en segundos desde la época.%x,%y,%z: mismos tiempos pero en formato legible legible por humanos.%b: número de bloques asignados.%B: tamaño en bytes de cada bloque (usualmente 512).%F: tipo de archivo (regular file, directory, symbolic link, etc.).
Ejemplos prácticos
Para ilustrar el uso de stat, veamos varios escenarios comunes:
- Información básica de un archivo:
stat /etc/passwd
Esto mostrará la salida completa con todos los campos predeterminados.
- Obtener solo el tamaño y los permisos:
stat -c "%n %s bytes %a" /etc/passwd
Resultado:
/etc/passwd 1234 bytes 644. - Mostrar la fecha de última modificación en formato legible:
stat -c "%n se modificó el %y" /var/log/syslog
- Seguir un enlace simbólico:
stat -L /usr/bin/python3
Esto mostrará los datos del binario real al que apunta el enlace, no del propio enlace.
- Obtener información del sistema de archivos donde reside un directorio:
stat -f /home
Veremos el tipo de sistema de archivos, el número total de bloques, bloques libres, etc.
Interpretación de los campos más importantes
Entender qué significa cada campo ayuda a diagnosticar problemas de permisos, rendimiento o integridad.
- Inodo: número interno que identifica de forma única el archivo dentro del sistema de archivos. Dos enlaces duros al mismo archivo comparten el mismo inodo.
- Enlaces (hard links): cuenta de cuántos nombres de archivo apuntan al mismo inodo. Un valor de 1 indica que solo existe ese nombre.
- Tamaño: número de bytes que ocupa el contenido del archivo. Para directorios, refleja el espacio usado para almacenar la lista de entradas.
- Bloques: número de bloques de disco asignados. Puede ser mayor que el tamaño dividido por el bloque debido a asignaciones internas y fragmentación.
- Timestamps:
- Acceso (%X / %x): última vez que el archivo fue leído.
- Modificación (%Y / %y): última vez que el contenido del archivo fue escrito.
- Cambio de estado (%Z / %z): última vez que el inodo fue modificado (permisos, propietario, enlaces, etc.). Este timestamp cambia incluso si el contenido no varía.
Stat vs. ls -l
Aunque ls -l es más rápido para una vista resumida, stat ofrece ventajas claras cuando se necesita precisión o se va a procesar la salida en un script:
- Consistencia: la salida de
statno depende de la configuración regional ni de ancho de terminal; los campos numéricos son siempre los mismos. - Flexibilidad de formato: con
-cpodemos extraer exactamente los datos que necesitamos, evitando tener que hacer parsing de columnas. - Información del sistema de archivos:
lsno puede mostrar datos del sistema de archivos donde reside el archivo; para eso se necesitastat -fodf. - Seguimiento de enlaces: la opción
-Ldestates más explícita que la-Ldelsy funciona igualmente bien con la opción de formato.
Conclusión
El comando stat es una herramienta esencial para cualquier persona que trabaje con Linux y necesite obtener información detallada y confiable sobre archivos y sistemas de archivos. Su capacidad para mostrar todos los atributos del inodo, combinada con la potencia de la personalización de formato, lo convierte en una alternativa superior a ls cuando se requiere precisión o automatización. Dominar sus opciones y comprender el significado de cada campo le permitirá diagnosticar problemas de permisos, auditoría de cambios y optimización de almacenamiento con mayor eficacia.


