Unter OS X Yosemite erhalte ich mit den folgenden Befehlen Folgendes:
$ touch .a
$ touch b
$ /bin/ls
b
$ /bin/ls -A
.a b
$ sudo /bin/ls
.a b
Es zeigt versteckte Dateien (die Namen haben, die mit einem Punkt beginnen), wenn sie von root aufgerufen werden, und zeigt sie nicht (wie erwartet), wenn sie als normaler Benutzer ausgeführt werden. Dies unterscheidet sich von dem, was ls
unter Linux (demjenigen, von dem es stammt coreutils
) gemacht wird.
Warum ls
verhält es sich so?
BSD
undOSX
hier angemessener wären .Antworten:
Es stellt sich heraus, dass diese Funktion nicht Apple-spezifisch ist. Dies ist ein Merkmal von BSD-Systemen im Allgemeinen.
Anfangs konnte ich es bis zu den Quellen von 4.4BSD-Lite zurückverfolgen . Es war bereits in diesem FreeBSD-Commit von 1994 enthalten, das diese Quellen importiert.
Das Feature ist auch in OpenBSD vorhanden und kann in diesem Commit von 1995 gefunden werden, das behauptet, Code von NetBSD zu importieren, so dass dies bereits in NetBSD vorhanden war .
Dann entdeckt man das Commit von NetBSD aus dem Jahr 1993, das behauptet, Code von 386BSD zu importieren , und das Feature ist bereits vorhanden . Darüber hinaus zeigt dieses Commit , dass es während der Entwicklung der 386BSD-Version 0.0 im Jahr 1991 vorhanden war, die, soweit ich das beurteilen kann, von BSD um 4.3 abging.
Der Kommentar erschien zum ersten Mal während der Entwicklung von 4.3BSD-Reno in diesem Commit (27. Juni 1989) mit dem Titel "Erste Arbeitsversion von new ls". Der ursprüngliche Kommentar lautete:
die später an diesem Tag geändert wurde (ich bin nicht sicher, ob die Zeitstempel in diesem Repository vollständig korrekt sind):
Und erst 1992 wurden der Großbuchstabe und der Punkt hinzugefügt , was den Kommentar zu dem macht, was wir jetzt haben:
Aber das Verhalten war in 2BSD ab dem 9. Mai 1979 vorhanden, wie in diesem Schnappschuss zu sehen :
Ich kann keine aktuelle Geschichte aus dieser Zeit finden, aber es gibt auch diesen Schnappschuss von 1BSD von 1977 ohne diese Zeilen. Und
-A
eigentlich ohne Flagge.Es scheint also, dass das Feature irgendwo zwischen November 1977 (1BSD wird gerade entwickelt) und der Veröffentlichung von 2BSD im Mai 1979 eingeführt wurde.
Was ich bei dieser Untersuchung auch gefunden habe, ist das
-I
Flag, das 2005 zu FreeBSD hinzugefügt wurde , um dieses Verhalten zu überschreiben, und etwas später überarbeitet wurde .quelle
.
ein einfacher Fehler war - esls
sollte nur das.
Verzeichnis verbergen , nicht alles, was mit beginnt.
. Ein paar Jahrzehnte schneller Vorlauf, der häufig zum Verbergen gefährlicher Dateien usw. und gleichzeitig zum Verbergen der Systemkonfiguration usw. verwendet wird. Es ist daher sinnvoll, Administratoren diese Dateien anzeigen zu lassen (um die Konfiguration beizubehalten oder versteckte Malware usw. zu finden). .Hier ist ein Link zum Quellcode. Hinweis
/* Root is -A automatically. */
. Dies ist eine Funktion in Apples BSD-Versionls
.quelle
Root is -A automatically
Zeichenfolge verwendet, um nach Hinweisen zu suchen.IIRC, es gab einen Thread darüber in den frühen Tagen des Usenet (Anfang der 80er Jahre). Die Funktion wurde als Sicherheitsmaßnahme hinzugefügt, damit böswillige Benutzer Dateien / Verzeichnisse / ausführbare Dateien nicht einfach vor sysadmin / root verstecken können. Die Theorie war im Grunde "root hat Zugang zu allem, damit es alles sehen kann".
quelle