Warum ist das erste Feld in 'ls - l' beim Anzeigen einer Datei kein 'f'? [geschlossen]

7

Wenn ich 'ls -l' mache, bekomme ich vielleicht so etwas:

-rw-r--r-- 1 root root 209 Mar 30 17:41 fname

Das erste Feld ist das -, was bedeutet, dass dies eine Datei ist.

Wenn es ein Verzeichnis und keine Datei wäre, wäre das erste Feld a d.

Warum haben sich die Entwickler von Unix entschieden, ein dfor-Verzeichnis zu verwenden, das klar und intuitiv ist und dennoch ein for-Verzeichnis verwendet -? Warum nicht ffür eine Datei verwenden?

Bearbeiten
Wirklich interessante Antworten. Viele verschiedene Ideen, und alle sind sinnvoll, auch wenn einige versehentlich wahrer erscheinen als aus diesem Grund umgesetzt und / oder als dieser Grund dokumentiert sind.

Monica Heddneck
quelle
1
Verzeichnis ist eine Datei, nur ein spezieller Typ. Es ist also sinnvoll anzugeben, dass es sich bei d um einen speziellen Dateityp handelt, für normale Dateien ist dies jedoch sinnlos. Siehe askubuntu.com/q/1073802/295286 und askubuntu.com/a/1073805/295286. Es gibt dort einige historische Anmerkungen zu diesem Thema.
Sergiy Kolodyazhnyy
Lassen Sie mich wissen, wenn Sie Fragen haben oder Teile der Antworten geklärt werden müssen.
Sergiy Kolodyazhnyy
2
Wenn Sie davon ausgehen, dass reguläre Dateien am häufigsten in einer Verzeichnisliste vorkommen, werden -die selteneren Dateitypen (alles andere) hervorgehoben, wenn Sie sie durch ein kleines Zeichen wie darstellen .
Das Verständnis der UNIX-Berechtigungen und -Dateitypen kann hier relevant sein.
Stephen Kitt
Es gibt diese ähnliche Frage , aber der Wortlaut dieser Frage fragt "warum" und das ist viel schwieriger zu beantworten.
Jeff Schaller

Antworten:

12

Historisch gesehen bestand eine der großen Designentscheidungen in Unix darin, alles als Datei zu betrachten.¹ Dies geschieht in frühen lsund statmanpages; In V3 (Februar 1973) heißt es beispielsweise auf der statManpage (die den von verwendeten Modus beschreibt ls)

Der Modus ist eine sechsstellige Zeichenfolge, deren Zeichen Folgendes bedeuten:

  1. s: Datei ist klein (kleiner als 4096 Bytes)
    l: Datei ist groß
  2. d: Datei ist ein Verzeichnis
    x: Datei ist ausführbar
    u: Benutzer-ID bei Ausführung festlegen
    -: Keine der oben genannten

usw.

In V4 (Oktober 1973) ähnelt der Modus dem, was wir heute haben. Die lsManpage sagt

Der unter der -lOption gedruckte Modus enthält 10 Zeichen, die wie folgt interpretiert werden:

Das erste Zeichen ist,
d wenn der Eintrag ein Verzeichnis ist.
b wenn der Eintrag eine spezielle Datei vom Blocktyp ist;
c wenn der Eintrag eine spezielle Datei vom Typ Zeichen ist;
- wenn der Eintrag eine einfache Datei ist.

Die nächsten 9 Zeichen werden als drei Sätze mit jeweils drei Bits interpretiert.

Es scheint also, dass die Entwickler von Unix wirklich dachten, dass eine einfache Datei „nur“ die Standardeinstellung ist, nichts Besonderes, daher verdient sie kein Zeichen - alles ist eine Datei, und nur Dateien, die keine einfachen Dateien sind, benötigen eine zusätzliche Beschreibung. Man könnte sich -vorstellen, das Fehlen von „Besonderheit“ zu signalisieren.

¹ Streng genommen bestand die Entwurfsentscheidung darin, alles über das Dateisystem zugänglich zu machen und nicht alles als Datei zu betrachten. Infolgedessen musste jedoch alles als eine Art Datei zur Verfügung gestellt werden, und dies erforderte die Unterscheidung verschiedener Dateitypen. Siehe Abschnitt 3 des UNIX-Time-Sharing-Systems .

Stephen Kitt
quelle
Warten Sie eine Minute, bis ... wenn eine reine Textdatei die erwartete Standardeinstellung ist, sollte Unix nicht sagen: "Hey Leute, dies ist nur die Standardeinstellung, die wir mögen, also geben Sie ihr ein herzliches" JA "!". Aber Der Bindestrich scheint ein 'Nein' darzustellen. Wie 'rx' bedeutet 'Nein' für 'Schreiben'. Die Bedeutung des Bindestrichs geht sozusagen als Ja und Nein hin und her (zumindest wenn man es so betrachtet Weg ...)
Monica Heddneck
Ich nehme den Bindestrich als "Standard". Die Dateien sind einfache Dateien (nicht Klartextdateien, einfach nur Dateien, im Gegensatz zu den Verzeichnissen und speziellen Dateien) standardmäßig nicht lesbar standardmäßig ( dh , wenn sie nicht über die Lese - Bit gesetzt) usw.
Stephen Kitt
4
@Sergiy ein bisschen wie ein Trottel, der Rest Ihres Kommentars ist in Ordnung, aber nein, der MIME-Typ ist nicht der Header ... ( Wie sind Dateitypen bekannt, wenn nicht aus dem Dateisuffix? )
Stephen Kitt
2
@Sergiy, nein, es gibt keinen Header. Es gibt Heuristiken, um zu versuchen, den Dateityp zu erraten, aber es gibt keinen garantierten Header, keine magische Zahl usw. Alle Arten von Spaß und Spielen können durch Missbrauch dieser Vermutungen erzielt werden.
Stephen Kitt
2
@Sergiy Ich weiß, was Sie vermitteln möchten, aber meiner Erfahrung nach ist es zu simpel und verwirrt die Benutzer. fileund die gemeinsam genutzte MIME-Datenbank wenden eine Reihe von Erkennungstests an, von denen einige die ersten Bytes einer Datei betrachten. Die Behauptung, dass die ersten Bytes einer Datei einen Hinweis auf ihren Typ geben, vermittelt dem Leser jedoch den falschen Eindruck. Es gibt keine garantierte Möglichkeit, einen Dateityp zu bestimmen (im Gegensatz zu Mac OS Classic oder PalmOS, bei dem jede Datei einen Typ und einen Erstellungscode hatte).
Stephen Kitt