Breve historia del comando ls de GNU

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 primero
  • listf rev → muestra un listado de archivo, los más antiguos primero
  • listf extensión de archivo → ofrece información sobre el nombre nombrado
  • listf 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 enlaces
  • listf (auth) usuario → lista archivos creados por el nombre de usuario especificado
  • listf (made) mmddyy [mmddyy] → lista archivos creados entre las fechas especificadas
  • listf (srec) → listado por tamaño
  • listf (smad) → listado por fecha de última modificación
  • listf (rev) → listado en orden inverso
  • listf (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ón
  • list -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 largo
  • ls -t → ordenado por fecha de modificación
  • ls -a → lista todo, incluyendo archivos ocultos
  • ls -s → incluye el tamaño de los archivos en el listado
  • ls -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 inverso
  • ls -u → usa la fecha de acceso, no la fecha de modificación
  • ls -i → lista el número de inodo para cada archivo
  • ls -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 columnas
  • ls -x → listado en columnas, pero ordenado en cruz, no de arriba abajo
  • ls -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 subdirectorios
  • ls -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:

3 comentarios sobre “Breve historia del comando ls de GNU

  1. 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.

  2. 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

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.