GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Alles ist eine Datei?

Unter Linux wird jede einzelne Entität als DATEI betrachtet. Wenn ich vim <cd-Name> mache dann vim öffnet den Inhalt des Verzeichnisses in seinem Editor, da es nicht zwischen Datei und Verzeichnis unterscheidet.

Aber heute bin ich bei der Arbeit auf eine Sache gestoßen, auf die ich neugierig bin.

Ich hatte vor, eine Datei aus einem verschachtelten Verzeichnis zu öffnen

vim a/b/c/d/file

Aber statt vim , habe ich eingegeben

 cd a/b/c/d/

und drücken Sie die TAB zweimal, aber der Befehl zeigte nur das verfügbare Verzeichnis des „d“-Verzeichnisses und keine Dateien.

Nicht die cd Befehl honor „alles ist eine Datei „? Oder übersehe ich etwas?

Akzeptierte Antwort:

Die Datei „Alles ist eine Datei “ Phrase definiert die Architektur des Betriebssystems. Das bedeutet, dass alles im System von Prozessen, Dateien, Verzeichnissen, Sockets, Pipes usw. durch einen Dateideskriptor dargestellt wird, der über die virtuelle Dateisystemschicht im Kernel abstrahiert wird. Das virtuelle Dateisystem ist eine vom Kernel bereitgestellte Schnittstelle. Daher wurde der Ausdruck korrigiert, um zu sagen:„Alles ist ein Dateideskriptor “. Linus Torvalds selbst hat es noch einmal etwas genauer korrigiert:„Everything is a stream of bytes “.

Jede „Datei“ hat jedoch auch einen Besitzer und Berechtigungen, die Sie vielleicht von normalen Dateien und Verzeichnissen kennen. Daher können klassische Unix-Tools wie cat, ls, ps, … all diese „Dateien“ abfragen und es ist nicht erforderlich, andere spezielle Mechanismen zu erfinden, als nur die einfachen alten Tools, die alle das read() verwenden Systemaufruf. Beispielsweise gibt es in der Microsoft OS-Familie mehrere verschiedene read() Systemaufrufe (ich habe ungefähr 15 gehört) für alle Dateitypen und jeder von ihnen ist ein bisschen anders. Wenn alles eine Datei ist, brauchst du das nicht.

Zu Ihrer Frage :Natürlich gibt es verschiedene Dateitypen . Unter Linux gibt es 7 Dateitypen. Das Verzeichnis ist eines davon. Aber die Dienstprogramme können sie voneinander unterscheiden. Zum Beispiel die komplette Funktion des cd Befehl (wenn Sie TAB drücken ) listet nur Verzeichnisse auf, da die stat() Systemaufruf (siehe man 2 stat ) gibt eine Struktur mit einem Feld namens st_mode zurück . Der POSIX-Standard definiert, was dieses Feld enthalten kann:

       S_ISREG(m)  is it a regular file?
       S_ISDIR(m)  directory?
       S_ISCHR(m)  character device?
       S_ISBLK(m)  block device?
       S_ISFIFO(m) FIFO (named pipe)?
       S_ISLNK(m)  symbolic link? (Not in POSIX.1-1996.)
       S_ISSOCK(m) socket? (Not in POSIX.1-1996.)

Die cd Die Befehlsvervollständigungsfunktion zeigt nur „Dateien“ an, in denen S_ISDIR Flag ist gesetzt.

Verwandte:Linux – vbox-Dienste deaktivieren, um die Startzeit zu verkürzen?
Linux
  1. So verschieben Sie eine Datei unter Linux

  2. Grundlegendes zu Linux-Dateiberechtigungen

  3. Linux-Tail-Befehl

  4. Grundlagen der Linux-Dateiberechtigungen

  5. Wie benenne ich eine Datei unter Linux um?

Was ist umask unter Linux?

Linux-Dateikomprimierung:Alles, was Sie wissen müssen

Unter Linux ist alles eine Datei – Teil 2

Unter Linux ist alles eine Datei – Teil 1

So verknüpfen Sie eine Datei unter Linux per Symlink

Extrahieren Sie die tar.gz-Datei unter Linux