En este artículo no encontrarás un tutorial de cómo utilizar el comando ls
en tu sistema GNU/Linux. Veremos una breve historia de cómo ha evolucionado el comando

Si abrimos una terminal o un emulador de terminal en nuestro sistema GNU/Linux y queremos ver qué archivos y directorios existen en la ruta actual, para ello utilizaremos el comando ls
Cierto que hay otras alternativas, algunas modernas y con más funcionalidades como exa, pero ls
será el comando en el que siempre confiar por estar presente en todos los sistemas GNU/Linux a los que accedas.
Veamos en este artículo una breve historia del comando ls
Este artículo es una traducción/adaptación del artículo escrito por Eric Fischer para la ya retirada Linux Gazette que puedes leer aquí. Me pareció curioso e interesante, por eso lo comparto traducido en el blog.
El comando ls
que sirve para mostrar un listado de los archivos de una ruta, es una de las utilidades más esenciales para las personas que usen sistemas Unix y GNU/Linux y no sorprende que sea una de las utilidades más veteranas.
En los inicios fue llamado listf
y estuvo disponible en el Compatible Time Sharing System (CTSS) del MIT en julio de 1961. En 1963 se añadieron algunas opciones que se podrían utilizar para modificar lo que el comando listf
podía mostrar:
listf
→ muestra un listado de archivo, los más nuevos primerolistf rev
→ muestra un listado de archivo, los más antiguos primerolistf
extensión de archivo → ofrece información sobre el nombre nombradolistf
mes día año → muestra n listado de los archivos más antiguos de la fecha introducida
En 1965, listf
fue empliado para reconocer * como una forma de mostrar un listado de todos los archivos que coincidieran con un patrón específico, con más mejoras en la coincidencia de patrones en una versión actualizada del 3 de enero de 1966. La versión de 1966 también generalizó la sintaxis y agregó muchas opciones, que incluyen:
listf
(file) → lista solo archivo, no enlaceslistf
(auth) usuario → lista archivos creados por el nombre de usuario especificadolistf
(made) mmddyy [mmddyy] → lista archivos creados entre las fechas especificadaslistf
(srec) → listado por tamañolistf
(smad) → listado por fecha de última modificaciónlistf
(rev) → listado en orden inversolistf
(long) → listado en formato extenso
Cuando CTSS fue reemplazado por Multics, el comando listf
se renombró a list
, que opcionalmente podría abreviarse como ls
. La primera versión de ls
tenía menos opciones que las últimas versiones de listf
, pero aún incluía, junto con algunas otras:
list -all (ls -a)
→ lista todo (incluido archivos ocultos)list -date_time_modified (ls -dtm)
→ lista por fecha de la última modificaciónlist -reverse (ls -rv)
→ lista en orden inverso
Cuando Bell Labs abandonó el desarrollo de Multics en 1969 y comenzó a trabajar en Unix, solo se mantuvo el nombre abreviado de list, ls
. La primera edición (3 de noviembre de 1971) del manual de Unix documentó las siguientes opciones para ls
, todas las cuales todavía están disponibles en la actualidad:
ls -l
→ lista en formato largols -t
→ ordenado por fecha de modificaciónls -a
→ lista todo, incluyendo archivos ocultosls -s
→ incluye el tamaño de los archivos en el listadols -d
→ lista el nombre de los directorios, no sus contenidos
Para la quinta edición (la página del manual es del 20 de marzo de 1974) la lista de opciones para ls
se había expandido e incluía:
ls -r
→ listado en orden inversols -u
→ usa la fecha de acceso, no la fecha de modificaciónls -i
→ lista el número de inodo para cada archivols -f
→ no ordena en absoluto el listado
En la sexta edición en mayo de 1965, se añadió una funcionalidad más:
ls -g
→ lista los identificativos de los grupos en formato largo
En mayo y agosto de 1977, Bill Joy hizo alguna modificaciones a su propio ls
en la Universidad de California que después distribuiría como parte de su First Berkeley Software Distribution, 1BSD.
La mayor diferencia con esta versión de ls
fue que mostraba el listado de archivos en múltiples columnas, en vez de solo listar un nombre por línea. Las opciones para controlar este nuevo formato fueron:
ls -1
→ lista un nombre por línea (sin columnas)ls -c
→ listado en columnasls -x
→ listado en columnas, pero ordenado en cruz, no de arriba abajols -q
→ muestra los caracteres de control como `?’ls -m
→ todo en una línea, separado por comas
Hubo cierta controversia sobre si era apropiado incluir código para imprimir en columnas como parte integral de ls
o si, en cambio, el formateo en columnas debería ser realizado por un programa separado al que la salida de ls
(o cualquier otro programa) se podría redirigir su resultado.
A principios de 1979, Bell Labs lanzó la séptima edición de Unix. Su versión de ls
no incorporó los cambios controvertidos y tenía una nueva opción que entraba en conflicto con una letra que Joy también había usado:
ls -c
→ utiliza la fecha de cambio de inodo, no la fecha de modificación
Una nueva versión de Berkeley de ls
, fechada el 26 de agosto de 1980 y lanzada con 4.0BSD, resolvió el conflicto poniendo en mayúsculas la opción de listar en columnas: ls -C
. También agregó a lo que el manual llamaba en ese momento «un número increíble de opciones» los siguiente:
ls -F
→ marca los directorios con / y los programas con *ls -R
→ lista de manera recursiva los subdirectoriosls -b
→ muestra los caracteres de controls como su códigos ASCII
Otra revisión en 4.2BSD (28 de julio de 1983) eliminó las opciones -m, -b y -x, pero no antes de que System V Release 2 hubiera agregado las tres a su propio repertorio de opciones. Estas opciones pervivieron temporalmente allí, pero ninguna de los tres sobrevivió a la estandarización POSIX, por lo que la versión 4.2BSD de ls
es esencialmente ls
como la conocemos hoy.
El comando ls
actual de las distribuciones GNU/Linux deriva del comando de Unix y forma parte del paquete GNU coreutils y fue escrito por Richard Stallman y David MacKenzie. Aquí puedes ver el código de dicha herramienta y todo el conjunto coreutils
¿Te ha resultado interesante conocer un poco más la historia detrás de este comando, que quizás es uno de los más utilizados? Espero que sí. Si tienes algo que aportar hazlo en los comentarios.
Por cierto, si quieres ampliar la lectura, te dejo un enlace (en inglés) donde explican, qué ocurre cuando abre una terminal y escribes el comando ls:

Muchas gracias por esta traducción, hasta esos pequeños comandos tienen una historia muy interesante. Sobre el cambio de nombre del comando, de listf a list a ls me recuerda a Neal Stephenson y su «En el principio..» cuando describe esos nombres como piedras erosionadas por el agua, como se han ido recortando a su mínima expresión.
Está interesante saber la historia pero se hace muy denso leerla (quizás sea por la multitud de ejemplos).
Yo sigo usando el maravilloso alias ls1 que creastes a partir de exa (antes no conocía exa y ahora me ocupo de que siempre esté instalado).
Saludos
Ok, gracias por tu opinión.
Saludos