UNIX -Dateitypen

Der sieben Standard UNIX -Dateitypen sind regulär, Verzeichnis, symbolischer Link, FIFO Special, Special Block, Charakter Special, und Steckdose wie definiert von Posix.[1] Verschiedene OS-spezifische Implementierungen ermöglichen mehr Typen als das, was POSIX erfordert (z. B. Solaris Türen). Der Typ einer Datei kann durch die identifiziert werden ls -l Befehl, der den Typ im ersten Zeichen der angezeigt wird Dateisystemberechtigungen aufstellen.

Zum Regelmäßige Dateien, Unix verhindert oder liefert keine interne Dateistruktur; Daher hängt ihre Struktur und Interpretation vollständig von der Software ab, indem sie sie unter Verwendung von ihnen abhängt. Allerdings die Datei Befehl kann verwendet werden, um zu bestimmen, was Art der Daten Sie beinhalten.

Darstellungen

Numerisch

In dem Stat -Struktur, Dateityp und Berechtigungen (die Modus) werden zusammen in a aufbewahrt st_mode Bitfeld, mit einer Größe von mindestens 12 Bits (3 Bit, um den Typ unter den sieben möglichen Arten von Dateien anzugeben; 9 Bit für Berechtigungen). Das Layout für Berechtigungen wird durch POSIX als die am wenigsten signifikanten 9 Bits definiert, der Rest ist jedoch undefiniert.[1]

Nach Konvention ist der Modus ein 16-Bit-Wert, der als sechsstellige Oktalzahl ohne einen führenden Nullpunkt ausgeschrieben ist. Der Formatteil nimmt die Blei 4-Bit (2 Oktalzahlen) und "010" ("010" ein (1000 in binär) steht normalerweise für eine reguläre Datei. Die nächsten 3 Bit (1 Ziffer) werden normalerweise für verwendet setUid, setgid und klebrig. Der letzte Teil ist bereits von POSIX definiert, um die Erlaubnis zu enthalten. Ein Beispiel ist "100644" für eine typische Datei. Dieses Format kann in gesehen werden Git, Teer, und arunter anderem.[2]

Der Typ einer Datei kann mit Makros wie getestet werden S_isdir. Eine solche Überprüfung wird normalerweise durchgeführt, indem der Modus mit maskiert wird S_ifmt (Oft die Oktalzahl "170000" für die Lead 4 -Bit -Konvention) und prüft, ob das Ergebnis übereinstimmt S_ifdir. S_ifmt ist kein Core -POSIX -Konzept, sondern eine X/Open -System -Schnittstelle (XSI); Systeme entsprechen nur POSIX kann einige andere Methoden verwenden.[1]

Moduszeichenfolge

Nehmen Sie zum Beispiel eine Zeile in der ls -l Ausgang:

DRWXR-XR-X 2 Wurzelwurzel 0 Jan 1 1970 Home

Posix an[3] Das Format der Ausgabe für das lange Format (-l Möglichkeit). Insbesondere das erste Feld (vor dem ersten Speicherplatz) wird als "Dateimoduszeichenfolge" bezeichnet und sein erstes Zeichen beschreibt den Dateityp. Der Rest dieser Zeichenfolge zeigt die an Dateiberechtigungen.

Daher ist die Moduszeichenfolge im Beispiel DRWXR-XR-X: Der Dateityp ist d (Verzeichnis) und die Berechtigungen sind rwxr-xr-x.

Beispiele für Implementierungen

Das GNU CoreUtils Version von ls verwendet einen Anruf zu fileMode (), a Glibc Funktion (ausgesetzt in der Gnulib Bibliothek[4]) um die Moduszeichenfolge zu erhalten.

FreeBSD verwendet einen einfacheren Ansatz, ermöglicht jedoch eine geringere Anzahl von Dateitypen.[5]

Regelmäßige Datei

Reguläre Dateien werden in angezeigt ls -l mit einer Bindestrich-Minus - Im Modusfeld:

$ ls -l /etc /passwd-rw-r-r-- ... /etc /passwd

Verzeichnis

Die häufigste Sonderdatei ist das Verzeichnis. Das Layout einer Verzeichnisdatei wird durch das verwendete Dateisystem definiert. Da mehrere Dateisysteme unter UNIX verfügbar sind, sowohl native als auch nicht einheimische, gibt es kein Verzeichnisdateilayout.

Ein Verzeichnis ist mit a gekennzeichnet d Als erster Buchstabe im Modusfeld in der Ausgabe von ls -dl oder Stat, z.B.

$ ls -dl /dRWXR-XR-X 26 Root Root 4096 Sep 22 09:29 / $ STAT / Datei: " /" Größe: 4096 Blöcke: 8 IO-Block: 4096 Verzeichnis Gerät: 802H/2050d Inode: 128 Links: 26 Zugriff: (0755/drwxr-xr-x) UID: (0/ root) gid: (0/ root) ...

Symbolischer Link

Ein symbolischer Link ist ein Verweis auf eine andere Datei. Diese Sonderdatei wird als textuelle Darstellung des Pfades der Referenzdatei gespeichert (was bedeutet, dass das Ziel ein relativer Pfad ist oder überhaupt nicht existiert).

Eine symbolische Verbindung ist mit einem gekennzeichnet l (Kleinbuchstaben L) als erster Buchstabe der Moduszeichenfolge, z.

lrwxrwxrwx ... TermCap ->/usr/share/misc/termcaplrwxrwxrwx ... s03xinetd -> ../init.d/xinetd

FIFO (Namen Pipe)

Eine der Stärken von Unix war schon immer Interprozesskommunikation. Zu den Einrichtungen des Betriebssystems gehören Rohre, die die Ausgabe von einem verbinden Prozess zur Eingabe eines anderen. Dies ist in Ordnung, wenn beide Prozesse im selben übergeordneten Prozessbereich vorhanden sind, der vom selben Benutzer gestartet wurde. Es gibt jedoch Umstände, unter denen die Kommunikationsprozesse FIFOs verwenden müssen, die hier als als bezeichnet werden benannte Pfeifen. Ein solcher Umstand tritt auf, wenn die Prozesse unter verschiedenen Benutzernamen und Berechtigungen ausgeführt werden müssen.

Benannte Pipes sind spezielle Dateien, die überall im Dateisystem existieren können. Sie können mit dem Befehl erstellt werden Mkfifo wie in Mkfifo Mypipe.

Ein benanntes Rohr ist mit einem markiert p Als erster Buchstabe der Moduszeichenfolge, z.

pRW-rw ---- ... MyPipe

Steckdose

Eine Steckdose ist eine spezielle Datei für Interprozesskommunikation, was die Kommunikation zwischen zwei Prozessen ermöglicht. Zusätzlich zum Senden von Daten können Prozesse senden Dateideskriptoren über eine Unix -Domänen -Socket -Verbindung mit der sendmsg () und recvmsg () Systemaufrufe.

Im Gegensatz zu benannten Rohren, die nur unidirektionale Datenfluss ermöglichen, sind die Sockel vollständig Duplex-fähig.

Eine Steckdose ist mit einer gekennzeichnet s Als erster Buchstabe der Moduszeichenfolge, z.

srwxrwxrwx /tmp/.x11-unix/x0

Gerätedatei (Block, Zeichen)

In Unix werden fast alle Dinge als Dateien behandelt und haben einen Speicherort im Dateisystem, sogar Hardware -Geräte wie Festplatten. Die gute Ausnahme sind Netzwerkgeräte, die im Dateisystem nicht auftauchen, sondern separat behandelt werden.

Gerätedateien werden verwendet, um Zugriffsrechte auf die Geräte anzuwenden und Vorgänge auf den Dateien auf die entsprechenden Gerätetreiber zu lenken.

UNIX unterscheidet zwischen Charaktergeräten und Blockgeräten. Die Unterscheidung ist ungefähr wie folgt:

  • Zeichengeräte bieten nur einen seriellen Eingangsstrom oder akzeptieren einen seriellen Ausgangsstrom
  • Blockgeräte sind zufällig zugänglich

Obwohl zum Beispiel, Festplattenpartitionen Möglicherweise haben beide Charaktergeräte, die einen nicht gepufferten Zufallszugriff auf Blöcke auf der Partition- und Blockgeräte ermöglichen, die einen gepufferten Zufallszugriff auf Blöcke auf der Partition ermöglichen.

Ein Zeichengerät ist mit a markiert c als erster Buchstabe der Moduszeichenfolge.Ebenso ist ein Blockgerät mit a markiert b, z.B.

crw ------- ... /dev/null brw-rw ---- ... /dev/sda 

Tür

Eine Tür ist eine spezielle Datei für die Kommunikation zwischen Prozess zwischen einem Client und einem Server, der derzeit nur in implementiert ist Solaris.

Eine Tür ist mit einem markiert D (Oberer Fall) als erster Buchstabe der Moduszeichenfolge, z.

Dr- r- r-- ... name_service_door

Siehe auch

Verweise

  1. ^ a b c "<sys/stat.h>". Die offenen Gruppenbasisspezifikationen Ausgabe 6.Die offene Gruppe.21. Juli 2019.
  2. ^ Kitt, Stephen. "Welcher Dateimodus ist ein Symlink?". Unix & Linux Stack Exchange.
  3. ^ "IEEE STD 1003.1-2008 LS".Die offene Gruppe.11. März 2017.
  4. ^ "Filemode -Funktion in GNU CoreUtils".GNU.11. März 2017.
  5. ^ "PRINTTYPE -Funktion von FreeBSD".Freebsd.11. März 2017.