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
%Yy 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
-fpara 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
statcongrepoawkpara 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,%Yy%Zestán en segundos desde la epoch; para convertirlos a fecha legible usadate -d @$(stat -c '%Y' archivo). - Si necesitas información de muchos archivos a la vez, usa
findcon-exec stat ...oprint0para 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.


