El comando stat en Linux: ver información detallada de archivos

Introducción

En el entorno de Linux, conocer los detalles de un archivo va mucho más allá de su nombre o tamaño. El comando stat permite obtener una visión completa de los metadatos asociados a cualquier archivo o directorio, desde permisos y timestamps hasta el número de inodo y el bloque de sistema de archivos en el que reside. Esta herramienta es esencial para administradores de sistemas, desarrolladores y cualquier usuario que necesite realizar auditorías, depurar problemas de permisos o simplemente entender cómo el sistema gestiona el almacenamiento.

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 que incluye:

  • Nombre del archivo
  • Tamaño en bytes
  • Bloques asignados
  • Tipo de archivo (regular, directorio, enlace, etc.)
  • Permisos en formato octal y simbólico
  • Fecha de último acceso, modificación y cambio
  • Número de inodo y de enlaces duros

Esta salida predeterminada resulta útil para una inspección rápida, pero el verdadero poder de stat se revela cuando se utilizan sus opciones de formato.

Opciones más útiles

El verdadero poder de stat reside en sus opciones de formato. Con la opción -c o --format puedes definir exactamente qué campos deseas ver y en qué orden.

  • -c FORMAT : especifica una cadena de formato usando secuencias como %n (nombre), %s (tamaño), %U (propietario), %G (grupo), %a (permisos en octal), %A (permisos simbólicos), %X (tiempo de último acceso en segundos desde epoch), %Y (tiempo de última modificación), %Z (tiempo de último cambio).
  • -f : muestra información del sistema de archivos donde reside el archivo, en lugar del propio archivo.
  • -L : sigue enlaces simbólicos y muestra la información del archivo objetivo.
  • -t : muestra la salida en forma tersa, útil para scripts que requieren un formato compacto.

Además, puedes combinar varias opciones para obtener información más específica. Por ejemplo, stat -Lc '%n %s %U' mostrará el nombre, el tamaño y el propietario del archivo al que apunta un enlace simbólico.

Ejemplos prácticos

1. Ver solo el tamaño y el nombre

stat -c '%n %s' archivo.txt

Esto imprimirá algo como:

archivo.txt 1245

2. Mostrar permisos en formato legible

stat -c '%n %a %A' archivo.txt

Salida:

archivo.txt 644 -rw-r--r--

3. Obtener la fecha de última modificación en formato legible

stat -c '%n %y' archivo.txt

El especificador %y muestra la fecha de modificación en formato legible.

4. Información del sistema de archivos

stat -f -c '%T %S %b %f' /ruta/al/directorio

Aquí %T es el tipo de sistema de archivos, %S el tamaño de bloque en bytes, %b el número total de bloques y %f los bloques libres.

5. Seguir un enlace simbólico

stat -L -c '%n %s' enlace_simbolico

Esto mostrará el tamaño del archivo al que apunta el enlace, no del propio enlace.

6. Comparar timestamps de dos archivos

if [ $(stat -c '%Y' archivo1) -gt $(stat -c '%Y' archivo2) ]; then echo "archivo1 es más nuevo"; fi

Este fragmento de Bash usa el especificador %Y (tiempo de modificación en segundos desde epoch) para determinar cuál de dos archivos ha sido modificado más recientemente.

Casos de uso habituales

  • Auditoría de seguridad: comparar permisos y propietarios de archivos críticos para detectar configuraciones inadecuadas.
  • Scripts de mantenimiento: verificar que un archivo haya sido modificado después de cierta fecha usando %Y y comparar con la época actual, disparando alertas o acciones correctivas.
  • Diagnóstico de rendimiento: conocer el número de bloques asignados y el tamaño de bloque para estimar I/O y planificar capacitación de almacenamiento.
  • Gestión de almacenamiento: usar la opción -f para revisar el tipo y la capacidad del sistema de archivos donde se guarda un volumen, útil antes de crear nuevos sistemas de archivos o migrar datos.
  • Respaldo incremental: identificar archivos cambiados desde un timestamp determinado mediante %Z (tiempo de último cambio) y copiar únicamente esos archivos.

Consejos y trucos

  • Combina stat con grep o awk para extraer solo un campo: stat -c '%s' archivo | awk '{print $1}'.
  • En Bash, puedes usar la expansión de procesos para comparar timestamps: if [ $(stat -c '%Y' archivo1) -gt $(stat -c '%Y' archivo2) ]; then echo "archivo1 es más nuevo"; fi.
  • Recuerda que los timestamps mostrados por %X, %Y y %Z están en segundos desde la epoch; para convertirlos a fecha legible usa date -d @$(stat -c '%Y' archivo).
  • Si necesitas información de muchos archivos a la vez, usa find con -exec stat ... o print0 para evitar problemas con nombres que contienen espacios.
  • Para obtener una salida CSV sencilla que pueda importarse a una hoja de cálculo, usa algo como: stat -c '%n,%s,%U,%G,%y' *.txt > reporte.csv.

Conclusión

El comando stat es una herramienta indispensable para cualquier administrador o usuario avanzado de Linux que necesite profundizar en los metadatos de los archivos. Su flexibilidad de formato permite adaptar la salida a casi cualquier requerimiento, desde simples verificaciones de tamaño hasta complejas auditorías de seguridad y scripts de automatización. Dominar sus opciones te ahorrará tiempo y te dará un control mucho más fino sobre el sistema de archivos, facilitando tareas de mantenimiento, depuración y planificación de capacidad.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol