Curso de Linux / Identificar archivos con ls, file, stat y readlink
No se puede determinar el tipo de un archivo de Linux solo por el nombre o la extensión del archivo. ls -l muestra el tipo y los atributos básicos del sistema de archivos, como directorios, archivos normales o enlaces; file inspecciona el contenido del archivo para inferir su formato; y stat verifica metadatos como tamaño, permisos, tiempo e inode. En este curso, aprenderá a diferenciar lo que dicen estos tres resultados.
Después de verificar el inode y el tipo de archivo, puede ver cómo difieren el nombre, el inode y el objetivo del enlace en la práctica de comparación de enlaces duros y simbólicos.
Tipos de archivos en Linux
En Linux, no solo los documentos normales, sino también los directorios, enlaces simbólicos y dispositivos se representan como elementos del sistema de archivos. La primera letra de la salida de ls -l indica el tipo de ese elemento. Las extensiones .txt o .jpg son solo parte del nombre, no la misma información que esta primera letra.
| Primera letra | Tipo | Ejemplo |
|---|---|---|
- |
Archivo normal | Documentos, archivos ejecutables, etc. |
d |
Directorio | Ruta que contiene archivos |
l |
Enlace simbólico | Elemento que apunta a otra ruta |
c, b |
Dispositivo de caracteres, dispositivo de bloques | Elemento de dispositivo bajo /dev |
p, s |
FIFO (tubería con nombre), socket | Elemento utilizado para la comunicación entre procesos |
Para ver los tipos de elementos reales, especifique el destino con ls -ld. Si aplica ls -l solo al directorio, se pueden enumerar los elementos dentro de él y no el directorio en sí.
ls -ld /etc /etc/passwd
La línea de /etc normalmente comienza con d, que indica un directorio; la de /etc/passwd, con -, que indica un archivo regular. Después aparecen permisos, número de enlaces, propietario, grupo, tamaño, fecha y nombre. Los valores y la presentación dependen del sistema.
Inferir el formato por el contenido con file
file examina el tipo del sistema de archivos y las características del contenido del archivo para producir una descripción fácil de leer por humanos. Por ejemplo, /etc/passwd sin extensión también puede clasificarse como archivo de texto.
file /etc/passwd
La salida puede ser similar a la siguiente. Las expresiones cambian según la codificación real y la implementación.
/etc/passwd: ASCII text
file identifica formatos mediante reglas de inspección, sin garantizar de manera infalible el formato ni la seguridad del contenido. La detección de codificación puede variar. Para enlaces, distinga file -h ENLACE, que examina el propio enlace, de file -L ENLACE, que sigue el destino.
Verificar metadatos con stat
stat consulta metadatos, no el contenido: tamaño, permisos, propietario, número de inodo, enlaces y marcas de tiempo. Un inodo (inode) es una estructura con metadatos de un objeto; su número lo identifica dentro de ese sistema de archivos y se distingue del nombre.
stat /etc/passwd
Si la salida es larga, puede usar la opción -c de GNU stat para ver solo los valores necesarios. En el ejemplo a continuación, %F es el tipo de archivo, %s es el tamaño en bytes y %n es el nombre.
stat -c '%F | %s bytes | %n' /etc/passwd
La salida siguiente ilustra el formato. 1234 es un tamaño ficticio; debe consultar el tamaño real de su archivo y tener en cuenta el idioma de la herramienta.
regular file | 1234 bytes | /etc/passwd
El primer campo indica un archivo regular; el central, el tamaño en bytes, y el último, la ruta. En la salida completa, Access, Modify, Change y Birth indican acceso, modificación del contenido, cambio de estado y creación. Change no es creación y también puede actualizarse al escribir contenido. Los accesos dependen de las opciones de montaje y Birth puede no estar disponible.
Cuando se encuentra un enlace simbólico
Un enlace simbólico es un elemento separado que apunta a otra ruta. ls -l normalmente se muestra en la forma NOMBRE_ENLACE -> DESTINO. readlink NOMBRE_ENLACE imprime la cadena de la ruta de destino almacenada dentro del enlace, y si esa cadena es una ruta relativa, debe interpretarse en relación con el directorio donde se encuentra el enlace.
Los metadatos del propio enlace y los metadatos del archivo al que apunta el enlace son diferentes. En GNU, para ver el enlace mismo se usa la acción predeterminada de stat, y para seguir el enlace hacia su destino se usa -L. Si el enlace está roto, la verificación siguiendo el destino puede fallar. El proceso de crear enlaces para prácticas se cubre en el tutorial de enlaces.
¿Qué comando desea elegir?
- Verificar el tipo y las propiedades básicas desde la lista:
ls -lols -ldpara ver el propio destino - Estimar el tipo de archivo basado en el contenido:
file - Ver propiedades detalladas como tamaño, fecha, inode, etc.:
stat - Ver la ruta de destino guardada en el enlace simbólico:
readlink
Se pueden ver ejemplos por comando con más detalle en Verificar el formato con file, Verificar metadatos con stat, Verificar el objetivo del enlace con readlink.
Documentación oficial
Se pueden consultar las opciones y excepciones de los comandos en Manual de file(1), Documentación de GNU stat, Documentación de GNU readlink.




