← Terminal y Línea de Comandos en Linux Bloque 2 · Navegar el sistema de archivos · Tema 7 de 43

Tema 7

Listar con ls

En la terminal no se ve nada hasta que se pregunta, y la pregunta más frecuente es «¿qué hay aquí?». La responde ls, probablemente el comando que más veces vas a escribir. Lo usamos desde el primer tema; ahora lo estudiamos entero: qué dice cada columna del formato largo, cómo ordenar el listado y cómo ver lo que normalmente queda oculto.

1. Qué lista ls

ls, de list, muestra información sobre archivos y directorios. Lo que lista depende de los argumentos, que son rutas como las del tema 6. Los ejemplos de este tema parten del directorio de práctica, salvo que se indique otra cosa:

terminal, en ~/practica
$ ls                                # sin argumentos: el directorio de trabajo
fotos  informe.txt  notas.txt
$ ls /home                          # un directorio: su contenido
ana
$ ls notas.txt                      # un archivo: ese archivo
notas.txt
$ ls fotos                          # un directorio vacío: nada
$ ls nada.txt
ls: cannot access 'nada.txt': No such file or directory
Argumentols muestra
NingunoEl contenido del directorio de trabajo.
Un directorioSu contenido, no el directorio mismo.
Un archivoEse archivo. Sirve para comprobar que existe, y con -l, para ver sus datos.
VariosPrimero los archivos; después cada directorio, con su nombre como título.

El cuarto ls del ejemplo no escribió nada, y no es un error: fotos está vacío. Es otra vez el «silencio es éxito». Un directorio vacío y uno que no existe se distinguen porque el segundo sí produce un mensaje.

ls solo lee. No modifica nada, y por eso es el comando para probar sin miedo y el que conviene ejecutar antes y después de cualquier operación que cambie archivos: antes, para saber sobre qué se va a actuar; después, para verificar el resultado.

2. El listado simple: columnas, colores y marcas

Sin opciones, ls muestra solo los nombres, en orden alfabético, acomodados en tantas columnas como entren en el ancho de la ventana. Cuando son muchos, el orden se lee de arriba abajo, columna por columna, y no por filas.

En Ubuntu los nombres aparecen en colores, gracias al alias ls --color=auto que vimos en el tema 5. El color indica qué clase de cosa es cada nombre:

Color habitualQué es
Sin colorUn archivo común.
AzulUn directorio.
VerdeUn archivo ejecutable: un programa o un script.
CelesteUn enlace simbólico.
RojoUn archivo comprimido o empaquetado.
MagentaUna imagen, un audio o un video.
Rojo sobre fondo negroUn enlace simbólico roto: apunta a algo que no existe.

Los colores exactos dependen de la configuración de la distribución y del tema de la terminal, y no siempre están disponibles: en una conexión remota, en una captura en blanco y negro o para una persona que no los distingue, no sirven. La opción -F da la misma información con un carácter añadido al final de cada nombre:

terminal
$ ls -F
fotos/  informe.txt  notas.txt
$ ls -F /usr/bin/ls /bin
/bin@  /usr/bin/ls*
Marca de -FQué es
/Un directorio.
*Un archivo ejecutable.
@Un enlace simbólico.
NingunaUn archivo común.

La marca no forma parte del nombre: el directorio se llama fotos, no fotos/. Para tener los nombres en una sola columna, uno por renglón, está la opción -1 (el número uno, no la letra ele).

3. Los archivos ocultos

Los nombres que empiezan con un punto no aparecen en el listado normal. Dos opciones los muestran:

terminal
$ ls -a                             # all: todo
.  ..  fotos  informe.txt  notas.txt
$ ls -A                             # almost all: todo, menos . y ..
fotos  informe.txt  notas.txt
$ ls -A ~                           # el directorio personal (salida abreviada)
.bash_history  .bash_logout  .bashrc  .cache  .config  Descargas  Documentos  …
.local  practica  .profile  …
OpciónMuestraCuándo usarla
-a, --allTodos los nombres, incluidos . y ..Con -l, para ver los datos del propio directorio y de su padre.
-A, --almost-allTodos, salvo . y ..Para ver los ocultos sin las dos entradas que siempre están.

En el directorio de práctica no hay ocultos, y las dos opciones solo difieren en los dos puntos. El directorio personal es otra cosa: allí guardan su configuración la shell y casi todos los programas que usas. .bashrc y .bash_history ya los conocemos; .config y .cache son directorios donde las aplicaciones dejan sus ajustes y sus datos temporales.

Un directorio que parece vacío puede no estarlo

Si ls no muestra nada y un comando posterior dice que el directorio «no está vacío», la explicación casi siempre son archivos ocultos. ls -A es la comprobación.

4. El formato largo

La opción -l, de long, es la más importante de ls. Muestra una línea por archivo, con todo lo que el sistema sabe de él:

terminal
$ ls -l
total 24
drwxrwxr-x 2 ana ana  4096 oct 12 10:40 fotos
-rw-rw-r-- 1 ana ana 12813 oct 12 10:41 informe.txt
-rw-rw-r-- 1 ana ana    18 oct 12 10:32 notas.txt

Cada línea tiene siete campos, siempre en el mismo orden:

anatomía de una línea de ls -l
-rw-rw-r-- 1 ana ana 12813 oct 12 10:41 informe.txt
││         │ │   │   │     │            │
││         │ │   │   │     │            └─ el nombre
││         │ │   │   │     └─ fecha y hora de la última modificación
││         │ │   │   └─ tamaño, en bytes
││         │ │   └─ grupo
││         │ └─ dueño
││         └─ cantidad de enlaces
│└─ permisos: nueve caracteres
└─ tipo: un carácter

La primera línea del listado, total 24, no es la cantidad de archivos. Es el espacio en disco que ocupan los elementos listados, medido en bloques de un kilobyte: aquí, 24 KB. No coincide con la suma de los tamaños porque el disco se asigna de a bloques enteros, normalmente de 4 KB: un archivo de 18 bytes ocupa un bloque completo.

Las secciones siguientes recorren los campos de izquierda a derecha.

5. El primer carácter: el tipo

El primer carácter de la línea dice qué clase de objeto es. En Linux hay más que archivos y directorios:

CarácterTipoDónde se lo encuentra
-Archivo común: texto, imagen, programa, cualquier dato.En todas partes.
dDirectorio.En todas partes.
lEnlace simbólico: un nombre que apunta a otro./bin, /usr/bin, /etc. Tema 14.
cDispositivo de caracteres: se lee o escribe de a un byte./dev: terminales, /dev/null.
bDispositivo de bloques: discos y particiones./dev: /dev/sda.
sSocket: un punto de comunicación entre programas./run.
pTubería con nombre.Rara vez.

Los tres primeros son los de todos los días. Los otros aparecen al explorar los directorios del sistema, que recorremos en el tema 8:

terminal (los datos varían en cada sistema)
$ ls -ld /bin /dev/null /dev/sda /etc
lrwxrwxrwx   1 root root     7 abr 22  2024 /bin -> usr/bin
crw-rw-rw-   1 root root  1, 3 oct 12 09:02 /dev/null
brw-rw----   1 root disk  8, 0 oct 12 09:02 /dev/sda
drwxr-xr-x 132 root root 12288 oct 12 09:05 /etc

El listado muestra dos particularidades. En un enlace simbólico, después del nombre aparece una flecha y el lugar al que apunta: /bin lleva a usr/bin, como comprobamos en el tema anterior con pwd -P. Y en los dispositivos, el lugar del tamaño lo ocupan dos números separados por una coma, que identifican el dispositivo ante el kernel.

6. Permisos, enlaces, dueño y grupo

Los nueve caracteres que siguen al tipo son los permisos: quién puede leer, modificar o ejecutar el archivo. Les dedicamos el tema 17 completo. Por ahora alcanza con una lectura básica, para que la columna deje de ser ruido:

los nueve caracteres, de a tres
rw-  rw-  r--
│    │    │
│    │    └─ los demás usuarios: pueden leer
│    └─ el grupo: puede leer y escribir
└─ el dueño: puede leer y escribir

Cada grupo de tres tiene las mismas posiciones: r de read, leer; w de write, escribir; x de execute, ejecutar. Un guion significa que ese permiso no está. Los otros tres campos son estos:

CampoEn el ejemploSignifica
Enlaces1Cuántos nombres tiene el archivo. En un archivo común suele ser 1; el tema 14 explica cuándo es más. En un directorio es 2 más la cantidad de subdirectorios.
DueñoanaEl usuario al que pertenece. Normalmente, quien lo creó.
GrupoanaEl grupo de usuarios asociado al archivo.

Que el dueño y el grupo se llamen igual no es un error: en Ubuntu cada usuario tiene un grupo propio con su mismo nombre. Lo vemos en el tema 16. Fuera de tu directorio personal, lo habitual es que ambos sean root, el administrador, como en el listado de la sección anterior.

7. Los tamaños

El quinto campo es el tamaño en bytes. Con archivos chicos se lee bien; con archivos grandes, un número como 1284505600 obliga a contar dígitos. La opción -h, de human-readable, lo expresa con la unidad más conveniente:

terminal
$ ls -lh
total 24K
drwxrwxr-x 2 ana ana 4,0K oct 12 10:40 fotos
-rw-rw-r-- 1 ana ana  13K oct 12 10:41 informe.txt
-rw-rw-r-- 1 ana ana   18 oct 12 10:32 notas.txt
SufijoUnidadEquivale a
NingunoBytes—
KKilobytes1024 bytes
MMegabytes1024 K
GGigabytes1024 M

Tres observaciones. -h solo tiene efecto junto con -l: sin formato largo no hay tamaños que mostrar. Los valores se redondean hacia arriba, y por eso 12813 bytes, que son 12,5 K, aparecen como 13K. Y el separador decimal depende del idioma del sistema: puede ser una coma o un punto.

La tercera línea del listado merece una advertencia, porque confunde siempre:

El tamaño de un directorio no es el de su contenido

Los 4096 bytes de fotos son lo que ocupa el directorio en sí: la lista de nombres que contiene. Un directorio con diez gigabytes de videos mostrará el mismo 4,0K. Para saber cuánto ocupa un directorio con todo lo que tiene dentro se usa otro comando, du -sh, que estudiamos en el tema 38.

8. Las fechas

El sexto campo es la fecha de la última modificación del contenido. No es la fecha de creación: si editas hoy un archivo de hace cinco años, mostrará la de hoy.

El formato cambia según la antigüedad, lo que explica una diferencia que ya apareció en la sección 5:

El archivo se modificó…Se muestraEjemplo
En los últimos seis mesesMes, día y horaoct 12 10:41
Hace más de seis mesesMes, día y añoabr 22 2024

Cuando hace falta la fecha completa, o un formato que no cambie, hay dos opciones largas:

terminal
$ ls -l --time-style=long-iso notas.txt
-rw-rw-r-- 1 ana ana 18 2026-10-12 10:32 notas.txt
$ ls -l --full-time notas.txt
-rw-rw-r-- 1 ana ana 18 2026-10-12 10:32:48.117204551 -0300 notas.txt

El formato long-iso —año, mes, día— tiene la ventaja de que se ordena bien como texto y no depende del idioma. El último valor de --full-time, -0300, es la zona horaria.

El sistema guarda en realidad varias fechas de cada archivo, y ls puede mostrar otra en lugar de la de modificación:

FechaCambia cuando…Opción de ls -l
ModificaciónSe cambia el contenido.Ninguna: es la que se muestra.
AccesoSe lee el contenido.-u
Cambio de estadoSe cambia el contenido, el nombre, los permisos o el dueño.-c

9. Ordenar el listado

El orden por defecto es alfabético. En los sistemas configurados en español no distingue mayúsculas de minúsculas ni tiene en cuenta el punto inicial, de modo que .bashrc queda cerca de la «b». Otras opciones cambian el criterio:

OpciónOrdena porPrimero aparece
NingunaNombreLa «a».
-tFecha de modificaciónEl más reciente.
-STamañoEl más grande.
-XExtensiónLos que no tienen.
-vNombre, tratando los números como númerosfoto2 antes que foto10.
-r—Invierte cualquiera de los anteriores.
--group-directories-first—Los directorios, antes que los archivos.
terminal
$ ls -lt                            # por fecha: el más reciente arriba
total 24
-rw-rw-r-- 1 ana ana 12813 oct 12 10:41 informe.txt
drwxrwxr-x 2 ana ana  4096 oct 12 10:40 fotos
-rw-rw-r-- 1 ana ana    18 oct 12 10:32 notas.txt

$ ls -ltr                           # lo mismo, invertido: el más reciente abajo
total 24
-rw-rw-r-- 1 ana ana    18 oct 12 10:32 notas.txt
drwxrwxr-x 2 ana ana  4096 oct 12 10:40 fotos
-rw-rw-r-- 1 ana ana 12813 oct 12 10:41 informe.txt

La segunda forma, ls -ltr, es una de las combinaciones más usadas de toda la terminal, y la razón es práctica. En un directorio con cientos de archivos, el listado no entra en la pantalla y lo que queda a la vista es el final. Con el orden invertido, lo más reciente —que es casi siempre lo que se busca— queda en las últimas líneas, justo encima del indicador.

Lo mismo vale para el tamaño: ls -lS pone arriba los más grandes, como vimos en el tema 4, y ls -lSr los deja al final. La opción -v resuelve un problema clásico del orden alfabético, en el que foto10.jpg queda antes que foto2.jpg porque el carácter «1» es anterior al «2».

10. El directorio, no su contenido

Cuando el argumento es un directorio, ls muestra lo que hay dentro. Eso es lo deseable casi siempre, y un obstáculo cuando lo que interesa son los datos del propio directorio: sus permisos, su dueño, su fecha.

terminal
$ ls -l fotos                       # el contenido de fotos: nada
total 0
$ ls -ld fotos                      # el directorio fotos
drwxrwxr-x 2 ana ana 4096 oct 12 10:40 fotos
$ ls -ld .                          # el directorio de trabajo
drwxrwxr-x 3 ana ana 4096 oct 12 10:41 .

La opción -d, de directory, le indica a ls que trate a los directorios como a cualquier otro archivo: que los liste, en lugar de abrirlos. La usamos en el tema anterior sin explicarla. Es indispensable cuando se trabaja con permisos, porque los de un directorio determinan quién puede entrar y quién puede crear o borrar cosas en él.

El listado confirma además lo dicho sobre la columna de enlaces. fotos, que no tiene subdirectorios, muestra un 2; el directorio de práctica, que tiene uno, muestra un 3.

11. Ver el árbol: ls -R y tree

Para ver de una vez un directorio y todo lo que cuelga de él, ls tiene la opción -R, de recursive. Lista el directorio, luego cada subdirectorio, luego los de estos, hasta agotar el árbol:

terminal
$ ls -R
.:
fotos  informe.txt  notas.txt

./fotos:

Cada bloque empieza con la ruta del directorio seguida de dos puntos. Sirve, pero se lee mal: la estructura no se ve, hay que reconstruirla a partir de las rutas. Para eso hay un programa específico, tree, que dibuja el árbol. No viene instalado, como nos avisó el propio sistema en el tema 3:

terminal
$ sudo apt install tree
$ tree
.
├── fotos
├── informe.txt
└── notas.txt

2 directories, 2 files

Con un directorio de tres elementos la diferencia es poca. Se aprecia en uno real, con varios niveles. Estas son las opciones que conviene conocer:

ComandoEfecto
tree rutaEl árbol a partir de ese directorio.
tree -L 2Solo dos niveles de profundidad. Casi siempre hace falta.
tree -dSolo los directorios.
tree -aTambién los ocultos.
tree -hCon el tamaño de cada archivo.
Cuidado con el punto de partida

ls -R / o tree / intentan recorrer el sistema entero: cientos de miles de líneas que pasan por la pantalla durante minutos. No rompen nada, y se detienen con Ctrl+C. Con tree, limitar la profundidad con -L evita el problema.

12. stat: todos los datos de un archivo

ls -l resume en una línea. Cuando se quiere todo lo que el sistema registra sobre un archivo, sin abreviar, el comando es stat:

terminal
$ stat notas.txt
  File: notas.txt
  Size: 18              Blocks: 8          IO Block: 4096   regular file
Device: 8,2     Inode: 1311452     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/     ana)   Gid: ( 1000/     ana)
Access: 2026-10-12 10:35:12.482913374 -0300
Modify: 2026-10-12 10:32:48.117204551 -0300
Change: 2026-10-12 10:32:48.117204551 -0300
 Birth: 2026-10-12 10:32:48.113204499 -0300

Están los mismos datos de ls -l —tipo, tamaño, enlaces, permisos, dueño y grupo— y algunos más: las tres fechas de la sección 8 con toda su precisión, la fecha de creación, que aquí se llama Birth, y los permisos también en su forma numérica, 0664, que aprenderemos a leer en el tema 18.

Lo que stat muestra tiene nombre. Es el contenido del inodo, la ficha en la que el sistema de archivos guarda todo lo que sabe de un archivo, salvo dos cosas: su nombre y su contenido. El número que lo identifica aparece en el campo Inode, y también lo muestra ls -i. Es la pieza que explica cómo funcionan los enlaces, en el tema 14.

13. ls sabe si lo estás mirando

Hay un comportamiento de ls que sorprende la primera vez y que conviene entender antes de llegar a las tuberías. ls comprueba adónde va su salida, y cambia de formato según el caso:

La salida va a…Formato
La pantallaVarias columnas y colores, pensado para una persona.
Otro programa, o un archivoUn nombre por línea y sin colores, pensado para ser procesado.
terminal
$ ls
fotos  informe.txt  notas.txt
$ ls | cat                          # la salida pasa por otro programa
fotos
informe.txt
notas.txt

Ese es el significado de auto en el alias ls --color=auto: colores solo cuando la salida es una terminal. Gracias a este comportamiento se puede contar los elementos de un directorio pasando el listado a un contador de líneas, ls | wc -l, cosa que haremos a menudo desde el bloque 5.

Dicho esto, una advertencia para más adelante: ls está hecho para que lo lea una persona. Cuando un script necesita recorrer archivos, hay herramientas más seguras, como los comodines del tema 9 y find, del tema 10, que no se confunden con los nombres que tienen espacios o caracteres raros.

14. Las combinaciones de todos los días

ls tiene más de cincuenta opciones. En la práctica se usan unas pocas, agrupadas en combinaciones que terminan saliendo solas:

ComandoResponde a
ls¿Qué hay aquí?
ls -l¿Qué hay, con sus datos?
ls -la¿Qué hay, incluido lo oculto?
ls -lh¿Cuánto pesa cada cosa?
ls -ltr¿Qué fue lo último que cambió?
ls -lSh¿Qué es lo más grande?
ls -ld directorio¿Qué permisos tiene este directorio?
ls -F¿Cuáles son directorios y cuáles archivos?
tree -L 2¿Cómo está organizado esto?
stat archivo¿Qué sabe el sistema de este archivo?

El alias ll de Ubuntu equivale a ls -alF: formato largo, con ocultos y con marcas de tipo. Es cómodo, y ahora sabes exactamente qué hace cada una de sus tres letras. Las opciones se pueden combinar libremente, y el resultado es la suma de los efectos: ls -lAhtr es un listado largo, con ocultos, tamaños legibles y lo más reciente al final.

Con cd y ls ya se puede recorrer el sistema entero y mirar qué hay en cada lugar. Es lo que hacemos en el tema 8: un paseo por los directorios de la raíz, para saber qué guarda cada uno.

15. Resumen

16. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ls fotos no muestra nada y ls videos muestra un error. ¿Qué diferencia hay?

fotos existe y está vacío: no hay nada que listar, y el silencio es una respuesta correcta. videos no existe, y ls lo informa con un mensaje.

2. ¿Qué diferencia hay entre ls -a y ls -A?

Las dos muestran los archivos ocultos. -a incluye además las entradas . y ..; -A las omite.

3. Enumera los campos de una línea de ls -l, en orden.

Tipo, permisos, cantidad de enlaces, dueño, grupo, tamaño, fecha de la última modificación y nombre.

4. ¿Qué indica la línea total 24 al comienzo de un listado largo?

El espacio en disco que ocupan los elementos listados, en bloques de un kilobyte. No es la cantidad de archivos ni la suma exacta de sus tamaños.

5. Una línea empieza con d, otra con - y otra con l. ¿Qué es cada una?

Un directorio, un archivo común y un enlace simbólico.

6. Un directorio con miles de fotos aparece con un tamaño de 4,0K. ¿Por qué?

Porque ese es el tamaño del directorio en sí, la lista de nombres, y no el de su contenido. El total con lo que contiene se obtiene con du -sh.

7. En un listado, un archivo muestra oct 12 10:41 y otro abr 22 2024. ¿Por qué el formato es distinto?

Porque ls muestra la hora en los archivos modificados en los últimos seis meses y el año en los más antiguos.

8. ¿La fecha de ls -l es la de creación del archivo?

No. Es la de la última modificación de su contenido.

9. ¿Qué hace ls -ltr y por qué se usa tanto?

Lista en formato largo, ordenado por fecha e invertido: lo más reciente queda al final. En directorios grandes, el final del listado es lo que queda a la vista.

10. ¿Cómo se listan los archivos del más grande al más chico, con tamaños legibles?

Con ls -lSh.

11. Quieres ver los permisos del directorio /etc, y ls -l /etc muestra cientos de líneas. ¿Qué falta?

La opción -d. ls -ld /etc muestra una sola línea, con los datos del directorio.

12. ¿Qué ventaja tiene tree sobre ls -R, y qué opción conviene usar casi siempre?

tree dibuja la estructura, de modo que se ve qué está dentro de qué. Conviene limitar la profundidad con -L, para que el resultado no sea inmanejable.

13. ¿Qué información da stat que ls -l no muestra?

Las tres fechas, de acceso, modificación y cambio, con toda su precisión; la fecha de creación; el número de inodo; los bloques ocupados, y los permisos en forma numérica.

14. ¿Por qué ls | cat muestra un nombre por línea, si ls los muestra en columnas?

Porque ls detecta que su salida no va a una terminal sino a otro programa, y usa un formato más fácil de procesar: una entrada por línea y sin colores.

Para practicar

  1. Ejecuta ls -l /etc/hostname /etc/passwd /usr/bin/ls e identifica los siete campos en cada línea. ¿Cuál de los tres es ejecutable, y en qué se nota?
  2. Compara ls ~, ls -A ~ y ls -a ~. ¿Cuántos elementos ocultos hay en tu directorio personal?
  3. Ejecuta ls -l /dev y busca al menos una línea de cada tipo: c, b, d y l.
  4. Lista /var/log de modo que lo modificado más recientemente quede al final.
  5. Encuentra los cinco archivos más grandes de /usr/bin, con tamaños legibles. Pista: el listado es largo; | head -6 al final de la línea deja ver solo el comienzo.
  6. Compara ls -l /tmp con ls -ld /tmp y explica la diferencia.
  7. Ejecuta ls -l --time-style=long-iso /etc | head. ¿Qué ventaja tiene este formato de fecha?
  8. Instala tree y ejecuta tree -L 1 / y tree -d -L 2 /usr.
  9. Ejecuta stat ~/practica/informe.txt. Luego muestra su comienzo con head y repite el stat. ¿Cambió alguna de las fechas? Ten en cuenta que muchos sistemas no actualizan la de acceso en cada lectura, para no escribir en el disco continuamente.
  10. Escribe con tus palabras qué hace ls -lAhtr, opción por opción, y compruébalo.