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:
$ 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
| Argumento | ls muestra |
|---|---|
| Ninguno | El contenido del directorio de trabajo. |
| Un directorio | Su contenido, no el directorio mismo. |
| Un archivo | Ese archivo. Sirve para comprobar que existe, y con -l, para ver sus datos. |
| Varios | Primero 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 habitual | Qué es |
|---|---|
| Sin color | Un archivo común. |
| Azul | Un directorio. |
| Verde | Un archivo ejecutable: un programa o un script. |
| Celeste | Un enlace simbólico. |
| Rojo | Un archivo comprimido o empaquetado. |
| Magenta | Una imagen, un audio o un video. |
| Rojo sobre fondo negro | Un 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:
$ ls -F
fotos/ informe.txt notas.txt
$ ls -F /usr/bin/ls /bin
/bin@ /usr/bin/ls*
Marca de -F | Qué es |
|---|---|
/ | Un directorio. |
* | Un archivo ejecutable. |
@ | Un enlace simbólico. |
| Ninguna | Un 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:
$ 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ón | Muestra | Cuándo usarla |
|---|---|---|
-a, --all | Todos los nombres, incluidos . y .. | Con -l, para ver los datos del propio directorio y de su padre. |
-A, --almost-all | Todos, 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.
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:
$ 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:
-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ácter | Tipo | Dónde se lo encuentra |
|---|---|---|
- | Archivo común: texto, imagen, programa, cualquier dato. | En todas partes. |
d | Directorio. | En todas partes. |
l | Enlace simbólico: un nombre que apunta a otro. | /bin, /usr/bin, /etc. Tema 14. |
c | Dispositivo de caracteres: se lee o escribe de a un byte. | /dev: terminales, /dev/null. |
b | Dispositivo de bloques: discos y particiones. | /dev: /dev/sda. |
s | Socket: un punto de comunicación entre programas. | /run. |
p | Tuberí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:
$ 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:
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:
| Campo | En el ejemplo | Significa |
|---|---|---|
| Enlaces | 1 | Cuá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ño | ana | El usuario al que pertenece. Normalmente, quien lo creó. |
| Grupo | ana | El 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:
$ 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
| Sufijo | Unidad | Equivale a |
|---|---|---|
| Ninguno | Bytes | — |
K | Kilobytes | 1024 bytes |
M | Megabytes | 1024 K |
G | Gigabytes | 1024 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:
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 muestra | Ejemplo |
|---|---|---|
| En los últimos seis meses | Mes, día y hora | oct 12 10:41 |
| Hace más de seis meses | Mes, día y año | abr 22 2024 |
Cuando hace falta la fecha completa, o un formato que no cambie, hay dos opciones largas:
$ 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:
| Fecha | Cambia cuando… | Opción de ls -l |
|---|---|---|
| Modificación | Se cambia el contenido. | Ninguna: es la que se muestra. |
| Acceso | Se lee el contenido. | -u |
| Cambio de estado | Se 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ón | Ordena por | Primero aparece |
|---|---|---|
| Ninguna | Nombre | La «a». |
-t | Fecha de modificación | El más reciente. |
-S | Tamaño | El más grande. |
-X | Extensión | Los que no tienen. |
-v | Nombre, tratando los números como números | foto2 antes que foto10. |
-r | — | Invierte cualquiera de los anteriores. |
--group-directories-first | — | Los directorios, antes que los archivos. |
$ 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.
$ 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:
$ 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:
$ 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:
| Comando | Efecto |
|---|---|
tree ruta | El árbol a partir de ese directorio. |
tree -L 2 | Solo dos niveles de profundidad. Casi siempre hace falta. |
tree -d | Solo los directorios. |
tree -a | También los ocultos. |
tree -h | Con el tamaño de cada archivo. |
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:
$ 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 pantalla | Varias columnas y colores, pensado para una persona. |
| Otro programa, o un archivo | Un nombre por línea y sin colores, pensado para ser procesado. |
$ 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:
| Comando | Responde 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
lslista el directorio de trabajo, o los archivos y directorios que recibe como argumentos. Solo lee: no modifica nada.- El listado simple muestra los nombres en columnas. Los colores, o las marcas de
-F, distinguen directorios, ejecutables y enlaces. -amuestra los archivos ocultos;-A, lo mismo sin las entradas.y..-lda el formato largo: tipo, permisos, enlaces, dueño, grupo, tamaño, fecha y nombre.- El primer carácter indica el tipo:
-archivo,ddirectorio,lenlace simbólico, y otros para dispositivos. -hexpresa los tamaños en K, M y G. El tamaño de un directorio no incluye su contenido.- La fecha es la de la última modificación. Muestra la hora si es reciente y el año si tiene más de seis meses.
-tordena por fecha,-Spor tamaño y-rinvierte el orden.ls -ltrdeja lo más reciente al final.-dlista el directorio mismo en lugar de su contenido.-Rlista de manera recursiva;treedibuja el árbol, y conviene limitarlo con-L.statmuestra todos los datos de un archivo, que el sistema guarda en su inodo.lscambia de formato cuando su salida no va a la pantalla: un nombre por línea y sin colores.
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
- Ejecuta
ls -l /etc/hostname /etc/passwd /usr/bin/lse identifica los siete campos en cada línea. ¿Cuál de los tres es ejecutable, y en qué se nota? - Compara
ls ~,ls -A ~yls -a ~. ¿Cuántos elementos ocultos hay en tu directorio personal? - Ejecuta
ls -l /devy busca al menos una línea de cada tipo:c,b,dyl. - Lista
/var/logde modo que lo modificado más recientemente quede al final. - Encuentra los cinco archivos más grandes de
/usr/bin, con tamaños legibles. Pista: el listado es largo;| head -6al final de la línea deja ver solo el comienzo. - Compara
ls -l /tmpconls -ld /tmpy explica la diferencia. - Ejecuta
ls -l --time-style=long-iso /etc | head. ¿Qué ventaja tiene este formato de fecha? - Instala
treey ejecutatree -L 1 /ytree -d -L 2 /usr. - Ejecuta
stat ~/practica/informe.txt. Luego muestra su comienzo conheady repite elstat. ¿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. - Escribe con tus palabras qué hace
ls -lAhtr, opción por opción, y compruébalo.