Cómo usar el comando stat en Linux

Un terminal Linux en un escritorio estilo Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

El statcomando de Linux le  muestra muchos más detalles que los que muestra ls. Eche un vistazo detrás de la cortina con esta utilidad informativa y configurable. Te mostraremos cómo usarlo.

stat te lleva detrás de escena

El lscomando es excelente en lo que hace, y hace mucho, pero con Linux, parece que siempre hay una manera de profundizar y ver qué hay debajo de la superficie. Y, a menudo, no se trata solo de levantar el borde de la alfombra. Puede romper las tablas del suelo y luego cavar un agujero. Puedes pelar Linux como una cebolla.

lsle mostrará una gran cantidad de información acerca de un archivo, como qué permisos están establecidos en él, qué tan grande es y si es un archivo o un enlace simbólico . Para mostrar esta información,  lsléala de una estructura de sistema de archivos llamada inodo .

Cada archivo y directorio tiene un inodo. El inodo contiene metadatos sobre el archivo , como qué bloques de sistema de archivos ocupa y las marcas de fecha asociadas con el archivo. El inodo es como una tarjeta de biblioteca para el archivo. Pero lssolo te mostrará parte de la información. Para ver todo, necesitamos usar el statcomando.

Como ls, el statcomando tiene muchas opciones. Esto lo convierte en un gran candidato para el uso de alias. Una vez que haya descubierto un conjunto particular de opciones que le stat proporcionen el resultado que desea, envuélvalo en un alias o función de shell . Esto lo hace mucho más cómodo de usar y no tiene que recordar un arcano conjunto de opciones de línea de comandos.

Una comparación rápida

Usemos lspara darnos una lista larga ( -lopción) con tamaños de archivo legibles por humanos ( -hopción):

ls -lh ana.h

ls -lh ana.h en una ventana de terminal

De izquierda a derecha, la información que proporciona ls es:

  • El primer carácter es un guión “-” y esto nos dice que el archivo es un archivo normal y no un socket, enlace simbólico u otro tipo de objeto.
  • El propietario, el grupo y otros permisos se enumeran en formato octal .
  • El número de enlaces físicos que apuntan a este archivo. En este caso, y en la mayoría de los casos, será uno.
  • El propietario del archivo es Dave.
  • El propietario del grupo es Dave.
  • El tamaño del archivo es de 802 bytes.
  • El archivo fue modificado por última vez el viernes 13 de diciembre de 2015.
  • El nombre del archivo es ana.c.

Echemos un vistazo con stat:

stat ana.h

stat ana.h en una ventana de terminal

La información que obtenemos states:

  • Archivo : el nombre del archivo. Por lo general, es el mismo que el nombre que le pasamos staten la línea de comandos, pero puede ser diferente si miramos un enlace simbólico.
  • Tamaño : el tamaño del archivo en bytes.
  • Bloques : el número de bloques del sistema de archivos que requiere el archivo para poder almacenarse en el disco duro.
  • Bloque IO : el tamaño de un bloque del sistema de archivos.
  • Tipo de archivo : el tipo de objeto que describen los metadatos. Los tipos más comunes son archivos y directorios, pero también pueden ser enlaces, sockets o canalizaciones con nombre.
  • Dispositivo : el número de dispositivo en hexadecimal y decimal. Este es el ID del disco duro en el que está almacenado el archivo.
  • Inode : el número de inodo. Es decir, el número de identificación de este inodo. Juntos, el número de inodo y el número de dispositivo identifican un archivo de forma única.
  • Enlaces : este número indica cuántos enlaces físicos apuntan a este archivo. Cada enlace físico tiene su propio inodo. Entonces, otra forma de pensar en esta figura es cuántos inodos apuntan a este archivo. Cada vez que se crea o elimina un enlace físico, este número se ajustará hacia arriba o hacia abajo. Cuando llega a cero, el archivo en sí se ha eliminado y el inodo se elimina. Si usa staten un directorio, este número representa la cantidad de archivos en el directorio, incluido el «.» la entrada para el directorio actual y la entrada «..» para el directorio principal.
  • Acceso : Los permisos de archivo se muestran en su rwxformato octal y tradicional (lectura, escritura, ejecución).
  • Uid : ID de usuario y nombre de cuenta del propietario.
  • Gid : ID de grupo y nombre de cuenta del propietario.
  • Acceso : la marca de tiempo de acceso. No es tan sencillo como parece. Las distribuciones modernas de Linux utilizan un esquema llamado relatime, que intenta optimizar las escrituras del disco duro necesarias para actualizar el tiempo de acceso . En pocas palabras, el tiempo de acceso se actualiza si es anterior al tiempo modificado.
  • Modificar : la marca de tiempo de la modificación. Este es el momento en que se modificó por última vez el contenido del archivo . (Por suerte, el contenido de este archivo se cambió por última vez hace cuatro años al día).
  • Cambiar : la marca de tiempo del cambio. Esta es la hora en que se modificaron por última vez los atributos o el  contenido del archivo . Si modifica un archivo estableciendo nuevos permisos de archivo, la marca de tiempo del cambio se actualizará (porque los atributos del archivo han cambiado), pero la marca de tiempo modificada no se actualizará (porque el contenido del archivo no se cambió).
  • Nacimiento : Reservado para mostrar la fecha de creación original del archivo, pero esto no está implementado en Linux.
Relacionado:  ¿Qué son stdin, stdout y stderr en Linux?

Comprensión de las marcas de tiempo

Las marcas de tiempo son sensibles a la zona horaria. El -0500al final de cada línea muestra que este archivo se creó en una computadora en una zona horaria de hora universal coordinada (UTC) que está cinco horas antes que la zona horaria de la computadora actual. Entonces, esta computadora está cinco horas detrás de la computadora que creó este archivo. De hecho, el archivo se creó en una computadora de la zona horaria del Reino Unido y lo estamos viendo aquí en una computadora en la zona horaria estándar del este de EE. UU.

Las marcas de tiempo de modificación y cambio pueden causar confusión porque, para los no iniciados, sus nombres suenan como si significaran lo mismo.

Usemos chmodpara modificar los permisos de archivo en un archivo llamado ana.c. Vamos a hacer que todos puedan escribirlo. Esto no afectará el contenido del archivo, pero afectará los atributos del archivo.

chmod + w ana.c

Y luego usaremos statpara mirar las marcas de tiempo:

stat ana.c

chnod + w ana.c en una ventana de terminal

La marca de tiempo del cambio se ha actualizado, pero la modificada no.

La marca de tiempo modificada solo se actualizará si se cambia el contenido del archivo. La marca de tiempo del cambio se actualiza tanto para los cambios de contenido como para los cambios de atributos.

Uso de estadísticas con varios archivos

Para tener un informe estadístico sobre varios archivos a la vez, pase los nombres de archivo a staten la línea de comando:

stat ana.h ana.o

stat ana.h ana.o en una ventana de terminal

Para usar staten un conjunto de archivos, use la coincidencia de patrones. El signo de interrogación «?» representa cualquier carácter individual y el asterisco «*» representa cualquier cadena de caracteres. Podemos decirle  statque informe sobre cualquier archivo llamado «ana» con una extensión de una sola letra, con este comando:

stat ana.?

stat ana.?  en una ventana de terminal

Uso de estadísticas para informar sobre sistemas de archivos

statpuede informar sobre el estado de los sistemas de archivos, así como el estado de los archivos. La -fopción (sistema de archivos) indica statque se informe sobre el sistema de archivos en el que reside el archivo. Tenga en cuenta que también podemos pasar un directorio como «/» en statlugar de un nombre de archivo.

stat -f ana.c

stat -f ana.c en una ventana de terminal

La información statque nos brinda es:

  • Archivo : el nombre del archivo.
  • ID : el ID del sistema de archivos en notación hexadecimal.
  • Namelen : la longitud máxima permitida para los nombres de archivo.
  • Tipo : el tipo de sistema de archivos.
  • Tamaño de bloque : la cantidad de datos para solicitar solicitudes de lectura para obtener velocidades de transferencia de datos óptimas.
  • Tamaño de bloque fundamental : el tamaño de cada bloque del sistema de archivos.
Relacionado:  Windows 10 está obteniendo un kernel de Linux integrado

Bloques:

  • Total : el recuento total de todos los bloques en el sistema de archivos.
  • Gratis : la cantidad de bloques libres en el sistema de archivos.
  • Disponible : la cantidad de bloques gratuitos disponibles para usuarios regulares (no root).

Inodos:

  • Total : el recuento total de inodos en el sistema de archivos.
  • Gratis : el número de inodos libres en el sistema de archivos.

Desreferenciar enlaces simbólicos

Si utiliza statun archivo que en realidad es un enlace simbólico, se informará sobre el enlace. Si desea statinformar sobre el archivo al que apunta el enlace, utilice la -Lopción (eliminar referencia). El archivo code.ces un enlace simbólico a ana.c. Veámoslo sin la -Lopción:

stat code.c

stat code.c en una ventana de terminal

El nombre del archivo muestra code.capuntando a ( ->) ana.c. El tamaño del archivo es de solo 11 bytes. No hay bloques dedicados a almacenar este enlace. El tipo de archivo se muestra como un enlace simbólico.

Claramente, no estamos viendo el archivo real aquí. Hagamos eso de nuevo y agreguemos la -Lopción:

stat -L code.c

stat -L code.c en una ventana de terminal

Esto ahora muestra los detalles del archivo para el archivo al que apunta el enlace simbólico. Pero tenga en cuenta que el nombre del archivo todavía se da como  code.c. Este es el nombre del enlace, no el archivo de destino. Esto sucede porque este es el nombre al que pasamos staten la línea de comando.

El informe conciso

La -topción (concisa) hace statque proporcione un resumen condensado:

stat -t ana.c

stat -t ana.c en una ventana de terminal

No se han dado pistas. Para que tenga sentido, hasta que haya memorizado la secuencia de campo, debe hacer una referencia cruzada de esta salida a una statsalida completa .

Formatos de salida personalizados

Una mejor forma de obtener un conjunto de datos diferente states utilizar un formato personalizado. Existe una larga lista de tokens llamados secuencias de formato. Cada uno de estos representa un elemento de datos. Seleccione los que desea incluir en la salida y cree una cadena de formato. Cuando llamamos staty le pasamos la cadena de formato, la salida solo incluirá los elementos de datos que solicitamos.

Hay diferentes conjuntos de secuencias de formato para archivos y sistemas de archivos. La lista de archivos es:

  • % a : Los derechos de acceso en octal.
  • % A : Los derechos de acceso en forma legible por humanos ( rwx).
  • % b : el número de bloques asignados.
  • % B : el tamaño en bytes de cada bloque.
  • % d : el número de dispositivo en decimal.
  • % D : el número de dispositivo en hexadecimal.
  • % f : el modo sin formato en hexadecimal.
  • % F   El tipo de archivo.
  • % g : el ID de grupo del propietario.
  • % G : el nombre del grupo del propietario.
  • % h : el número de enlaces físicos.
  • % i : el número de inodo.
  • % m : el punto de montaje.
  • % n : el nombre del archivo.
  • % N : el nombre del archivo entre comillas, con el nombre de archivo sin referencia si es un enlace simbólico.
  • % o : la sugerencia de tamaño de transferencia de E / S óptimo.
  • % s : el tamaño total, en bytes.
  • % t : el tipo de dispositivo principal en hexadecimal, para archivos especiales de dispositivos de caracteres / bloques.
  • % T : El tipo de dispositivo menor en hexadecimal, para archivos especiales de dispositivos de caracteres / bloques.
  • % u : el ID de usuario del propietario.
  • % U : el nombre de usuario del propietario.
  • % w : la hora de nacimiento del archivo, legible por humanos o un guión “-” si se desconoce.
  • % W : La hora de nacimiento del archivo, segundos desde la Época; 0 si se desconoce.
  • % x : la hora del último acceso, legible por humanos.
  • % X : La hora del último acceso, segundos desde la Época.
  • % y : hora de la última modificación de datos, legible por humanos.
  • % Y : La hora de la última modificación de datos, segundos desde la Época.
  • % z : la hora del último cambio de estado, legible por humanos.
  • % Z : La hora del último cambio de estado, segundos desde la Época.
Relacionado:  Cómo actualizar de Windows 7 a Linux

La «época» es la época de Unix , que tuvo lugar en 1970-01-01 00:00:00 + 0000 (UTC).

Para los sistemas de archivos, las secuencias de formato son:

  • % a : la cantidad de bloques gratuitos disponibles para usuarios regulares (no root).
  • % b : el total de bloques de datos en el sistema de archivos.
  • % c : el total de inodos en el sistema de archivos.
  • % d : el número de inodos libres en el sistema de archivos.
  • % f : el número de bloques libres en el sistema de archivos.
  • % i : el ID del sistema de archivos en hexadecimal.
  • % l : la longitud máxima de los nombres de archivo.
  • % n : el nombre del archivo.
  • % s : el tamaño del bloque (el tamaño de escritura óptimo).
  • % S : el tamaño de los bloques del sistema de archivos (para el número de bloques).
  • % t : el tipo de sistema de archivos en hexadecimal.
  • % T : tipo de sistema de archivos en formato legible por humanos.

Hay dos opciones que aceptan cadenas de secuencias de formato. Estos son --formaty --printf. La diferencia entre ellos es que  --printfinterpreta secuencias de escape de estilo C , como nueva línea \ny tabulación \t, y no agrega automáticamente un carácter de nueva línea a su salida.

Creemos una cadena de formato y pasámosla a stat. Las secuencias de formato que se van a utilizar son %npara el nombre del archivo, %spara el tamaño del archivo y %Fpara el tipo de archivo. Vamos a agregar la \nsecuencia de escape al final de la cadena para asegurarnos de que cada archivo se maneja en una nueva línea. Nuestra cadena de formato se ve así:

"El archivo% n tiene% s bytes y es% F \ n"

Vamos a pasar esto para statusar la --printfopción. Vamos a solicitar statun informe sobre un archivo llamado code.cy un conjunto de archivos que coinciden  ana.?. Este es el comando completo. Tenga en cuenta el signo igual » =» entre --printfy la cadena de formato:

stat --printf = "El archivo% n tiene% s bytes y es un código% F \ n" .c ana / ana.?

stat --printf = "El archivo% n tiene% s bytes y es un código% F \ n" .c ana / ana.?  en una ventana de terminal

El informe de cada archivo aparece en una nueva línea, que es lo que solicitamos. El nombre del archivo, el tamaño del archivo y el tipo de archivo se nos proporcionan.

Los formatos personalizados le dan acceso a incluso más elementos de datos de los que se incluyen en la statsalida estándar .

Control de grano fino

Como puede ver, existe un enorme margen para extraer los elementos de datos particulares que son de su interés. Probablemente también pueda ver por qué recomendamos usar alias para los encantamientos más largos y complejos.