Con OS X Yosemite, usando los siguientes comandos, obtengo lo siguiente:
$ touch .a
$ touch b
$ /bin/ls
b
$ /bin/ls -A
.a b
$ sudo /bin/ls
.a b
Muestra archivos ocultos (que tienen nombres que comienzan con un punto) cuando los invoca la raíz y no los muestra (como se esperaba) cuando se ejecuta como un usuario normal. Esto difiere de lo que hace ls
en Linux (el que viene coreutils
).
¿Por qué se ls
comporta de esta manera?
BSD
yOSX
son más apropiadas aquí.Respuestas:
Resulta que esta característica no es específica de Apple. Esta es una característica de los sistemas BSD en general.
Inicialmente, pude rastrearlo hasta las fuentes de 4.4BSD-Lite . Ya estaba presente en este compromiso de FreeBSD de 1994 que está importando esas fuentes.
La característica también está presente en OpenBSD y se puede encontrar en esta confirmación de 1995 que afirma importar código de NetBSD, por lo que ya estaba presente en NetBSD .
Luego, uno descubre la confirmación de NetBSD desde 1993 que dice importar código desde 386BSD , y la función ya está allí . Además, esta confirmación muestra que estuvo allí durante el desarrollo de 386BSD versión 0.0 en 1991, que se bifurcó de BSD alrededor de 4.3, por lo que puedo decir.
El comentario apareció por primera vez durante el desarrollo de 4.3BSD-Reno en este commit (27 de junio de 1989) titulado "primera versión funcional de nuevos ls". El comentario original decía:
que se cambió más tarde ese día (sin embargo, no estoy seguro de que las marcas de tiempo sean completamente correctas en este repositorio) para:
Y solo en 1992 se agregaron la letra mayúscula y el período convirtiendo el comentario en lo que tenemos ahora:
Pero el comportamiento estaba presente en 2BSD a partir del 9 de mayo de 1979 como se ve en esta instantánea :
No puedo encontrar ninguna historia real de esos tiempos, pero también hay esta instantánea de 1BSD de 1977 sin esas líneas. Y sin la
-A
bandera en realidad.Parece que la característica se introdujo en algún lugar entre noviembre de 1977 (1BSD se estaba desarrollando en ese momento) y el lanzamiento de 2BSD en mayo de 1979.
Lo que también encontré durante esta investigación es la
-I
bandera que se agregó a FreeBSD en 2005 para anular este comportamiento y se modificó un poco más tarde.fuente
.
era un simple error:ls
solo se suponía que ocultaba el.
directorio, no todo comenzaba con.
. Avance rápido algunas décadas, y se usa comúnmente para ocultar archivos peligrosos, etc., mientras que también se usa para ocultar la configuración del sistema, etc., por lo que tiene sentido permitir que los administradores vean esos archivos (para mantener la configuración o encontrar malware oculto, etc.) .Aquí hay un enlace al código fuente. Nota
/* Root is -A automatically. */
. Esta es una característica en la versión de BSD de Applels
.fuente
Root is -A automatically
cadena para buscar pistas.IIRC, hubo un hilo sobre esto en los primeros días de Usenet (principios de los 80). La función se agregó como medida de seguridad para que los usuarios malintencionados no puedan ocultar fácilmente archivos / directorios / ejecutables desde el administrador del sistema / root. La teoría era básicamente "la raíz tiene acceso a todo, por lo que debería poder ver todo".
fuente