Linux / Comando / ls: listar archivos, permisos, tamaños y fechas
ls es un comando en Linux que permite verificar la lista de archivos y directorios. Se pueden mostrar no solo los listados básicos, sino también archivos ocultos, permisos y propietario, tamaño del archivo, hora de modificación y orden de clasificación mediante opciones.
Para revisiones cotidianas, ls -lah es conveniente, pero al manejar nombres de archivos de manera segura en scripts, es mejor usar un comando como find en lugar de la salida diseñada para ser legible por humanos de ls.
¿Qué es el comando ls?
ls es la abreviatura de list y enumera la información de archivos especificados o el contenido de directorios. En las distribuciones GNU/Linux generalmente se utiliza ls incluido en GNU Coreutils.
Si se ejecuta sin argumentos, se aplica al directorio actual y, por defecto, no muestra elementos ocultos cuyo nombre comienza con un punto (.). Si se proporciona el nombre de un directorio como argumento, se muestra su contenido interno, no el propio directorio.
Sintaxis básica
ls [OPCIONES]... [ARCHIVO O DIRECTORIO]...
Para verificar los elementos del directorio actual, se ejecuta de la siguiente manera.
ls
También se puede especificar un directorio o archivo en particular.
ls /var/log
ls /etc/hosts
ls /etc /usr/local
No presuponga que la salida conserva el orden de los argumentos: GNU ls los ordena según las opciones seleccionadas y normalmente muestra primero los operandos que no son directorios, antes de listar el contenido de estos. La ordenación predeterminada por nombre depende de la configuración regional.
Mostrar archivos ocultos
Mostrar todos los elementos -a
-a o --all incluyen archivos y directorios ocultos que comienzan con un punto. También se muestran ., que representa el directorio actual, y .., que representa el directorio superior.
ls -a
Excluir . y .. -A
-A o --almost-all muestran elementos ocultos mientras que excluyen . y ... La salida es más concisa cuando sólo se verifican archivos de configuración reales.
ls -A
Mostrar información detallada ls -l
-l muestra el tipo de archivo y los permisos, número de enlaces a archivos, propietario, grupo, tamaño, hora de modificación y nombre en formato largo (long format).
ls -l
Una línea de salida típica está compuesta en el siguiente orden.
| Elemento | Significado |
|---|---|
| Tipo y permisos | El primer carácter del tipo de archivo, y los permisos de lectura, escritura y ejecución para el propietario, el grupo y otros usuarios. |
| Número de enlaces duros | El número de entradas de directorio que apuntan al inode del archivo. En el caso de los directorios, el significado es un poco diferente. |
| Propietario | El nombre de la cuenta del propietario del archivo o el ID de usuario. |
| Grupo | El nombre del grupo al que pertenece el archivo o el ID del grupo. |
| Tamaño | Básicamente, es el tamaño del archivo en bytes. |
| Tiempo | El valor predeterminado es la hora de modificación (mtime) de los datos del archivo. |
| Nombre | Nombre del archivo. Los enlaces simbólicos pueden mostrar también el destino al que apunta el enlace. |
Cómo leer la cadena de permisos
El primer carácter de una cadena que se ve como -rw-r--r-- indica el tipo de archivo, y los nueve caracteres siguientes son los permisos del propietario, grupo y otros usuarios en grupos de tres caracteres cada uno. r significa permiso de lectura, w significa permiso de escritura y x significa permiso de ejecución.
| Ubicación | Ejemplo | Descripción |
|---|---|---|
| Primera letra | -, d, l |
Son tipos como archivos normales, directorios, enlaces simbólicos, etc. |
| Del 2° al 4° carácter | rw- |
Son los permisos del propietario. |
| Del 5° al 7° carácter | r-- |
Son los permisos del grupo. |
| Del 8° al 10° carácter | r-- |
Son los permisos de otros usuarios. |
Si después de la cadena de permisos aparece + u otro indicador, puede significar que hay información de seguridad adicional como una lista de control de acceso (ACL). Para cambios detallados de permisos se usa chmod, y para cambios de propiedad se usa chown.
Mostrar con ID numérico -n
Para verificar ID numérico en lugar de nombres de usuario y de grupo, use -n. Es útil cuando la consulta de nombres de cuenta es lenta o cuando se comparan ID con otros sistemas.
ls -ln
Mostrar tamaño de archivo de manera legible
Mostrar en unidades legibles para humanos -h
-h utiliza potencias de 1024 y sufijos abreviados como K, M y G; por ejemplo, K representa unidades de 1024 bytes. Se aplica a columnas de tamaño de -l o -s. No confunda el tamaño lógico del archivo con el espacio que tiene asignado.
ls -lh
ls -lah
ls -lah muestra en formato largo incluso los elementos ocultos, por lo que se usa frecuentemente en tareas interactivas.
Mostrar tamaño de bloque asignado -s
-s informa de la asignación de almacenamiento en unidades cuyo tamaño depende de opciones y variables de entorno; no es siempre un recuento literal de bloques físicos del dispositivo. Un archivo disperso o comprimido puede ocupar un espacio distinto del tamaño lógico mostrado por -l.
ls -sh
ls -lsh
Para sumar el espacio ocupado por todo el directorio, du es más adecuado que ls.
Cambiar el orden de clasificación
ls ordena los nombres de archivo según las reglas de ordenación de caracteres de la configuración regional actual de manera predeterminada. Dependiendo del propósito, se puede cambiar a orden por hora, tamaño, extensión o versión.
Ordenar por hora de modificación -t
ls -lt
ls -lat
-t muestra por defecto los elementos desde los más recientemente modificados. Es útil para buscar registros o archivos de resultados recién creados.
Ordenar por tamaño -S
ls -lhS
-S ordena desde los archivos más grandes. El tamaño que se muestra en los elementos del directorio no es la suma de los archivos internos, así que use du para comparar el uso de espacio.
Ordenar en orden inverso y por versión -r, -v
ls -ltr
ls -1v
-r invierte actualmente el orden de clasificación. Por lo tanto, ls -ltr muestra desde los elementos más antiguos. -v utiliza un orden de versión considerando la parte numérica para que file2 venga antes que file10.
Separar directorios y ver el directorio en sí
Agregar indicación de tipo -F
-F o --classify agregan indicaciones de tipo como / después de un directorio, * después de un archivo ejecutable y @ después de un enlace simbólico.
ls -F
La indicación no es parte del nombre real del archivo. Al determinar el tipo en un script, no recorte este carácter y use operadores de prueba de archivo o find.
Ver la información del propio directorio en lugar del contenido -d
Al especificar un nombre de directorio, por defecto se muestra su contenido. Para ver los permisos y tiempos del propio elemento del directorio, use -d.
ls -ld /var/log
ls -d */
ls -d */ es conveniente cuando se verifican nombres de subdirectorios comunes en la ubicación actual, pero no incluye directorios ocultos según las reglas de expansión glob del shell.
Recoger directorios primero
ls --group-directories-first
En GNU ls, se pueden agrupar los directorios antes que los archivos. Esta opción es una extensión de GNU, por lo que en otros sistemas Unix se debe verificar si es compatible.
Ver recursivamente hasta subdirectorios
ls -R /etc
-R o --recursive siguen los subdirectorios mostrando continuamente su contenido. Si el árbol es grande, la salida puede ser muy larga y pueden ocurrir muchos errores de permisos de acceso.
Para buscar archivos por nombre o condición específica, usar find suele ser más eficiente que revisar toda la lista visualmente.
find /etc -type f -name '*.conf'
Elegir tipo de tiempo y formato de visualización
Tiempo de acceso y tiempo de cambio de estado
ls -l muestra por defecto la hora de modificación (mtime). -u muestra la hora de acceso (atime), y -c muestra la hora de cambio de metadatos (ctime) o la usa como criterio de ordenamiento.
ls -lu
ls -lc
ls -ltu
ls -ltc
ctime no es la "hora de creación" del archivo, sino la última vez que se cambió el estado del inode, como permisos, propietario y número de enlaces.
Usar un formato de fecha consistente
En GNU ls, --time-style permite elegir cómo se muestra la fecha en el formato largo.
ls -l --time-style=long-iso
ls -l --time-style=full-iso
ls -l --time-style='+%Y-%m-%d %H:%M:%S'
La salida puede verse afectada por la configuración regional y la variable de entorno TZ. Si es un informe para que las personas comparen, es recomendable establecer la zona horaria y el formato de visualización juntos.
Colores y modo de mostrar nombres de archivos
Uso de colores
ls --color=auto
--color=auto usa colores según el tipo de archivo y la extensión cuando la salida es hacia la terminal. Muchas distribuciones aplican esta opción por defecto como el alias ls.
type ls
alias ls
Los colores se ven afectados por la variable de entorno LS_COLORS y la configuración de dircolors. Cuando se guarda en un archivo o se pasa a otro comando, se puede usar --color=never para evitar incluir caracteres de control innecesarios.
Nombres de archivos con espacios y caracteres especiales
ls puede mostrar nombres de archivos que contienen espacios o caracteres de control en comillas o en forma de escape, dependiendo del terminal y de las opciones. No se debe asumir que la cadena mostrada siempre coincide exactamente con el nombre real del archivo.
ls -Q
ls --quoting-style=shell-escape
-Q encierra los nombres de archivos entre comillas dobles. --quoting-style es una extensión de GNU y es útil para que las personas identifiquen los caracteres especiales, pero no reemplaza un formato seguro para procesamiento automático.
Combinaciones de uso frecuente
| Comando | Propósito |
|---|---|
ls -la |
Muestra información detallada incluyendo elementos ocultos. |
ls -lah |
Muestra elementos ocultos y la información detallada en unidades de tamaño fáciles de leer. |
ls -lhS |
Muestra la información detallada comenzando por los archivos grandes. |
ls -ltr |
Muestra en formato largo desde la fecha de modificación más antigua. |
ls -ld */ |
Muestra la información del propio subdirectorio de la ubicación actual. |
ls -1 |
Muestra los elementos uno por uno en cada línea. |
ls -1v |
Ordena línea por línea considerando los números de versión. |
ls -l --time-style=long-iso |
Muestra la fecha y la hora en un formato fácil de comparar. |
Resumen de las principales opciones
| Opciones | Descripción |
|---|---|
-a, --all |
Muestra los elementos ocultos incluyendo . y ... |
-A, --almost-all |
Muestra los elementos ocultos excluyendo . y ... |
-l |
Muestra en formato largo permisos, propietario, tamaño y hora, etc. |
-h, --human-readable |
Muestra el tamaño en unidades legibles por humanos. |
-d, --directory |
Muestra la entrada del directorio en sí en lugar del contenido del directorio. |
-R, --recursive |
Muestra de manera recursiva hasta los subdirectorios. |
-t |
Por defecto, ordena desde la fecha de última modificación más reciente. |
-S |
Ordena por tamaño de archivo de mayor a menor. |
-r, --reverse |
Invierte el orden de clasificación actual. |
-v |
Ordena por versión considerando la parte numérica del nombre del archivo. |
-F, --classify |
Agrega un carácter que indica el tipo de archivo después del nombre. |
-1 |
Muestra solo un elemento por línea. |
Razones por las que no se debe analizar la salida de ls en un script
Los nombres de archivos en Linux pueden incluir espacios, tabulaciones y saltos de línea. ls cambia columnas, colores y citas para que sean legibles por humanos en la terminal, por lo que los scripts que dividen por líneas o cortan por espacios pueden manejar archivos incorrectamente.
Cuando recorra archivos, use herramientas que soporten el carácter NUL como separador.
find . -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
printf '%s\n' "$file"
done
Versiones recientes de GNU ls ofrecen --zero; compruebe ls --help antes de usarlo en versiones antiguas. Para búsquedas, find -print0 transmite nombres con NUL. El bucle anterior los recibe de forma segura, pero su printf vuelve a producir saltos de línea: esa salida es para lectura, no para que otro programa reconstruya nombres arbitrarios. Use stat si necesita metadatos de un archivo concreto.
Problemas comunes
Se muestra Permission denied.
Puede que no tenga los permisos necesarios para leer el directorio. Verifique los permisos de ejecución de los componentes de la ruta y los permisos de lectura del directorio de destino con ls -ld RUTA o namei -l RUTA. En vez de usar habitualmente sudo para evitar permisos, primero determine si el acceso necesario es realmente requerido.
El orden de clasificación es diferente al esperado.
La ordenación predeterminada por nombre se ve afectada por la localización LC_COLLATE. Si necesita un orden reproducible por bytes, puede aplicar LC_ALL=C solo a ese comando.
LC_ALL=C ls
Se produce un error de 'Argument list too long'.
En ls *, el asterisco lo expande el shell primero en numerosos nombres de archivo, no ls. Si se supera el límite de tamaño de los argumentos del sistema operativo, se produce un error antes de que se inicie el comando. Para listas simples, ejecute solo ls; para búsquedas condicionales o procesamiento por lotes, utilice find y -exec o una tubería separada por NUL.
FAQ
¿El tamaño del directorio en ls -l es la suma de los archivos internos?
No. El tamaño del directorio que se muestra en formato largo es el tamaño de los metadatos del propio directorio y no la suma del tamaño de los archivos internos. Para ver el uso de disco por directorio, utilice du -sh DIRECTORIO.
¿Cuál es la diferencia entre ls -a y ls -A?
-a muestra todos los elementos ocultos junto con . y ... -A muestra los elementos ocultos, pero excluye estos dos elementos de directorio especiales.
¿Cómo ver primero los archivos modificados más recientemente?
Usando ls -lt, los elementos se muestran en formato largo desde los más recientes según la hora de modificación. Para ver desde los elementos más antiguos, agregue la opción inversa y use ls -ltr.
Compare las utilidades en Lista de comandos de uso frecuente en Linux. Las opciones se detallan en Manual de GNU Coreutils: comando ls, Manual de GNU Coreutils: ordenar la salida de ls y Manual de GNU Coreutils: formato de salida de nombres de archivo.




