Unix filesystem

Version 7 Unix Dateisystem Layout: Unterverzeichnisse von "/" und "/usr"
Ein Überblick über a Unix Dateisystemlayout

Im Unix und Betriebssysteme inspiriert von ihm, die Dateisystem wird als zentrale Komponente des Betriebssystems angesehen.[1] Es war auch einer der ersten Teile des Systems, das von entworfen und implementiert wurde Ken Thompson In der ersten experimentellen Version von UNIX, datiert 1969.[2]

Wie in anderen Betriebssystemen bietet das Dateisystem Informationenspeicher und Abruf und eine von mehreren Formen von InterprozesskommunikationDa die vielen kleinen Programme, die traditionell ein UNIX -System bilden, Informationen in Dateien speichern können, damit andere Programme sie lesen können, obwohl Rohre ergänzt es in dieser Rolle, beginnend mit dem Dritte Edition. Außerdem bietet das Dateisystem über sogenannte Zugriff auf andere Ressourcen Gerätedateien das sind Einstiegspunkte zu Terminals, Drucker, und Mäuse.

Der Rest dieses Artikels verwendet Unix Als ein Gattungsbezeichnung sich sowohl auf das ursprüngliche UNIX -Betriebssystem als auch seine vielen zu beziehen Workalikes.

Prinzipien

Das Dateisystem wird als eins angezeigt verwurzelter Baum Verzeichnisse.[1] Anstatt separate Bände wie z. Festplattenpartitionen, abnehmbare Medien und Netzwerkaktien als getrennte Bäume (wie in DOS und Fenster: jeder Fahrt hat einen Antriebsbuchstaben, der die Stammwurzel seines Dateisystembaums bezeichnet), solche Bände können sein montiert In einem Verzeichnis wird der Dateisystem des Bandes als Verzeichnis im größeren Baum angezeigt.[1] Die Wurzel des gesamten Baumes ist bezeichnet /.

Im Original Bell Labs UnixEin Zwei-Disk-Setup war üblich, wobei die erste Festplatte Startup-Programme enthielt, während die zweiten Benutzerdateien und -programme der Benutzer enthielt. Diese zweite Festplatte wurde im leeren Verzeichnis benannt montiert USR Auf der ersten Festplatte, wodurch die beiden Festplatten als ein Dateisystem angezeigt werden, wobei der Inhalt der zweiten Festplatte bei sichtbar ist /usr.

UNIX -Verzeichnisse nicht enthalten Dateien. Stattdessen enthalten sie die Namen von Dateien, die mit Verweise auf sogenannte Verweise gepaart wurden Inoden, was wiederum sowohl die Datei als auch ihre enthält Metadaten (Eigentümer, Berechtigungen, Zeit des letzten Zugriffs usw., aber kein Name). Mehrere Namen im Dateisystem können sich auf dieselbe Datei beziehen, eine Funktion, die als a bezeichnet wird harte Verbindung.[1] Die mathematischen Merkmale von harten Links machen das Dateisystem zu einem begrenzten Typ von Regie acyclische Graphen, Obwohl die Verzeichnisse Bilden Sie immer noch einen Baum, da sie normalerweise nicht festgebunden sind. (Wie ursprünglich 1969 vorgestellt, würde das UNIX -Dateisystem tatsächlich als allgemeines Diagramm mit harten Links zu Verzeichnissen verwendet, die Navigation anstelle von Pfadnamen anbieten.[2]))

Datentypen

Das ursprüngliche UNIX -Dateisystem unterstützte drei Arten von Dateien: gewöhnliche Dateien, Verzeichnisseund "spezielle Dateien", auch Gerätedateien.[1] Das Berkeley Software Distribution (BSD) und System v Jeder fügte einen Dateityp hinzu, für den Sie verwendet werden sollten Interprozesskommunikation: BSD hinzugefügt Steckdosen,[3] Während System V hinzugefügt wurde FIFO -Dateien.

BSD fügte ebenfalls hinzu Symbolische Links (oft als "Symlinks" bezeichnet) zum Bereich der Dateitypen, die Dateien sind, die sich auf andere Dateien beziehen und harte Links ergänzen.[3] Symlinks wurden nach einem ähnlichen Merkmal in modelliert Mehrheit,[4] und unterscheiden sich von harten Verbindungen darin, dass sie Dateisysteme umfassen und dass ihre Existenz unabhängig vom Zielobjekt ist. Andere UNIX -Systeme können zusätzliche Arten von Dateien unterstützen.[5]

Konventionelles Verzeichnislayout

Bestimmte Konventionen gibt es für die Suche nach einigen Arten von Dateien wie Programmen, Systemkonfigurationsdateien und Benutzern. Heimverzeichnis. Diese wurden zuerst in der dokumentiert Hier (7) Mann Seite seit Version 7 Unix;[6] Nachfolgende Versionen, Derivate und Klone haben normalerweise eine ähnliche Mannseite.[7][8][9][10][11][12]

Die Details des Verzeichnislayouts sind im Laufe der Zeit unterschiedlich. Obwohl das Dateisystemlayout nicht Teil der ist Einzel -Unix -SpezifikationEs gibt mehrere Versuche, es zu standardisieren (Teile), wie die System v Anwendung Binärschnittstelle, das Intel Binary Compatibility Standard, die gemeinsame Betriebssystemumgebung und Linux Foundation's Dateisystem Hierarchie Standard (FHS).[13]

Hier finden Sie eine generalisierte Übersicht über gemeinsame Stellen von Dateien auf einem UNIX -Betriebssystem:

Verzeichnis oder Datei Beschreibung
/ Der Schrägstrich / Der Charakter allein bezeichnet die Stammin des Dateisystems.
/Behälter
Steht für Binärdateien und enthält bestimmte grundlegende Versorgungsunternehmen, wie z. ls oder CP, das werden benötigt, um zu montieren /usr, wenn es sich um ein separates Dateisystem handelt oder um im One-User-Modus (administrativ) auszuführen, wenn /usr kann nicht montiert werden. In System v.4 ist dies ein Symlink zu /usr/bin. Andernfalls muss es sich im Root -Dateisystem selbst befinden.
/Stiefel
Enthält alle Dateien, die für einen erfolgreichen Startvorgang benötigt werden. Im Forschung UnixDies war eher eine Datei als ein Verzeichnis.[14] Heutzutage normalerweise auf dem Stammdateisystem selbst, sofern das System, der Bootloader usw. etwas anderes erfordern.
/dev
Steht für Geräte. Enthält Dateidarstellungen von peripheren Geräten und Pseudo-Geräte. Siehe auch: Linux hat Namen und Zahlen Autorität zugewiesen. Muss sich auf dem Root -Dateisystem selbst befinden.
/etc
Enthält systemweite Konfigurationsdateien und Systemdatenbanken; Der Name steht für und so weiter[14] Aber jetzt ist eine bessere Erweiterung eKitabel-text-cOnfigurationen. Ursprünglich enthielt auch "gefährliche Wartungsversorgungsunternehmen" wie z. drin,[6] aber diese wurden normalerweise auf verlegt /sbin oder anderswo. Muss sich auf dem Root -Dateisystem selbst befinden.
/Heimat
Enthält User Home -Verzeichnisse unter Linux und einigen anderen Systemen. In der Originalversion von UNIX waren Home -Verzeichnisse in /usr stattdessen.[15] Einige Systeme verwenden oder haben noch verschiedene Standorte verwendet: Mac OS Hat Home -Verzeichnisse in /Benutzerältere Versionen von BSD setzen sie hinein /u, Freebsd hat /usr/home.
/lib
Ursprünglich Essentielle Bibliotheken: C Bibliotheken, aber nicht Forran Einsen.[14] Auf modernen Systemen enthält es die gemeinsam genutzten Bibliotheken, die von Programmen in benötigt werden /Behälter, und möglicherweise Ladbares Kernelmodul oder Gerätetreiber. Linux -Verteilungen können Varianten haben /lib32 und /lib64 Für Multi-Architektur-Unterstützung.
/Medien
Der Standard -Mountspunkt für abnehmbare Geräte wie USB -Sticks, Medienspieler usw. Nach dem gesunden Menschenverstand befindet sich das Verzeichnis selbst, dessen Unterverzeichnisse Mountpoints sind, auf der Wurzelpartition selbst.
/mnt
Steht für montieren. Leeres Verzeichnis, das häufig von Systemadministratoren als temporärer Mountspunkt verwendet wird. Im gesunden Menschenverstand befindet sich das Verzeichnis selbst, dessen Unterverzeichnisse Mountpoints sind, auf der Wurzelpartition selbst.
/opt
Enthält lokal installierte Software. Kommt ursprünglich aus System v, was a hat Paket-Manager Das installiert Software in diesem Verzeichnis (ein Unterverzeichnis pro Paket).[16]
/Proc
Procfs virtuell Dateisystem Informationen über Prozesse als Dateien.
/Wurzel
Das Heimverzeichnis für die Superuser Wurzel - Das heißt, der Systemadministrator. Das Heimverzeichnis dieses Kontos befindet sich normalerweise im ersten Dateisystem und daher nicht in /home (was möglicherweise ein Mountspunkt für ein anderes Dateisystem ist) falls eine spezifische Wartung durchgeführt werden muss, in denen andere Dateisysteme nicht verfügbar sind. Ein solcher Fall kann beispielsweise auftreten, wenn ein Festplattenlaufwerk Fehler erleidet und nicht ordnungsgemäß montiert werden kann. Nach Übereinkommen befindet sich dieses Verzeichnis auf der Wurzelpartition selbst; In jedem Fall ist es nicht Ein Link zu /Home/Wurzel oder so etwas.
/sbin
Steht für "System- (oder Superuser-) Binärdateien"und enthält grundlegende Versorgungsunternehmen wie z. drin, normalerweise benötigt, um das System zu starten, zu warten und wiederherzustellen. Muss auf der Wurzelpartition selbst sein.
/srv
Serverdaten (Daten für vom System bereitgestellte Dienste).
/sys
In einigen Linux -Verteilungen, enthält ein sysfs virtuell Dateisystem, mit Informationen zu Hardware und dem Betriebssystem. Auf BSD -Systemen, häufig ein Symlink für die Kernelquellen in /usr/src/sys.
/tmp
Ein Ort für temporäre Dateien, die nicht erwartet werden, dass er einen Neustart überlebt. Viele Systeme löschen dieses Verzeichnis beim Start oder bei der Verwendung tmpfs Um es zu implementieren.
/Unix
Die Unix Kernel in Forschung Unix und System v.[14] Mit der Zugabe von virtueller Speicher unterstützen 3bs, das wurde umbenannt /vmunix.
/usr
Das "Benutzerdateisystem": ursprünglich das Verzeichnis, das Benutzer -Home -Verzeichnisse hält,[15] aber bereits von der dritten Ausgabe von Forschung Unix, ca. 1973 wurde wiederverwendet, um die Programme des Betriebssystems auf zwei Festplatten zu teilen (einer von ihnen ein 256.000 fester Kopfstick), damit grundlegende Befehle entweder in angezeigt werden /Behälter oder /usr/bin.[17] Es enthält jetzt ausführbare, Bibliotheken und gemeinsame Ressourcen, die nicht systemkritisch sind, wie die X Fenstersystem, Fenstermanager, Skriptsprachenusw. In älteren UNIX -Systemen erscheinen auch Benutzer -Home -Verzeichnisse weiterhin in /usr Neben Verzeichnissen mit Programmen, obwohl dies bis 1984 abhing, hing dies ab Lokale Zoll.[14]
/enthalten
Speichert die im gesamten System verwendeten Entwicklungsheader. Header -Dateien werden hauptsächlich von der verwendet #enthalten Richtlinie in C Sprache, die historisch gesehen, wie der Name dieses Verzeichnisses ausgewählt wurde.
/lib
Speichert die benötigten Bibliotheken und Datendateien für Programme, die innerhalb gespeicherter Programme gespeichert sind /usr oder anderswo.
/libexec
Hält Programme, die eher von anderen Programmen als von Benutzern ausgeführt werden sollen. Z. B. die Sendmail Ausführbar ist in diesem Verzeichnis zu finden.[18] Erst 2011 im FHS vorhanden;[19] Linux -Verteilungen haben traditionell den Inhalt dieses Verzeichnisses in die Verzeichnis verschoben /usr/lib, wo sie auch in 4,3bsd wohnten.
/lokal
Ähnelt /usr In Struktur, aber seine Unterverzeichnisse werden für Ergänzungen verwendet, die nicht Teil der Betriebssystemverteilung, wie z. B. benutzerdefinierte Programme oder Dateien von a BSD Ports Sammlung. Hat normalerweise Unterverzeichnisse wie z. /usr/local/lib oder /usr/local/bin.
/Teilen
Architekturunabhängige Programmdaten. Unter Linux und modernen BSD -Derivaten hat dieses Verzeichnis Unterverzeichnisse wie z. Mann zum Manpages, die früher direkt unter erscheinen /usr in älteren Versionen.
/var
Steht für Variable. Ein Ort für Dateien, die sich häufig ändern können-insbesondere in der Größe, beispielsweise E-Mails, die an Benutzer im System gesendet werden, oder prozess-id Dateien sperren.
/Protokoll
Enthält Systemprotokolldateien.
/Mail
Der Ort, an dem alle eingehenden Post gespeichert werden. Benutzer (anders als Wurzel) kann nur auf ihre eigene Mail zugreifen. Oft ist dieses Verzeichnis a symbolischer Link zu /var/spool/mail.
/Spule
Spule Verzeichnis. Enthält Druckaufträge, Mail -Spulen und andere Warteschlangenaufgaben.
/src
Der Ort, an dem der nicht kompilierte Quellcode einiger Programme ist.
/tmp
Das /var/tmp Das Verzeichnis ist ein Ort für temporäre Dateien, die zwischen System -Neustarts erhalten bleiben sollten.

Siehe auch

Verweise

  • Dieser Artikel enthält Material von der Staatsbürger Artikel "Unix filesystem", die unter der Creative Commons Attribution-sharealike 3.0 unportierte Lizenz, jedoch nicht unter der GFDL lizenziert.
  1. ^ a b c d e Ritchie, D.M.; Thompson, K. (Juli 1978). "Das Unix Time-Sharing-System". Glockensystemtechnologie. J. 57 (6): 1905–1929. Citeseerx 10.1.1.112.595. doi:10.1002/j.1538-7305.1978.tb02136.x.
  2. ^ a b Ritchie, Dennis M. (1979). Die Entwicklung des Unix-Zeit-Sharing-Systems. Sprachdesign und Programmiermethode Conf.
  3. ^ a b Leffler, Samuel J.; McKusick, Marshall Kirk; Karels, Michael J.; Quarterman, John S. (Oktober 1989). Das Design und die Implementierung des 4.3BSD UNIX -Betriebssystems. Addison-Wesley. ISBN 978-0-201-06196-3.
  4. ^ McKusick, Marshall Kirk; et al. "Ein schnelles Dateisystem für Unix" (PDF). FreeBSD.org. CSRG, UC Berkeley. Abgerufen 16. November 2016.
  5. ^ Stat (2)- -Linux Programmierer Handbuch - Systemaufrufe
  6. ^ a b Hier (7)- -Version 7 Unix Programmierer Handbuch
  7. ^ Hier (7)- -Freebsd Verschiedene Informationen Handbuch
  8. ^ Hier (7)- -OpenBSD Verschiedene Informationen Handbuch
  9. ^ "Hier (7) Mannseite für 2.9.1 BSD".
  10. ^ "Hier (7) Mannseite für Ultrix 4.2".
  11. ^ "Hier (7) Mann Seite für Sunos 4.1.3".
  12. ^ Hier (7)- -Linux Programmierer Handbuch - Übersicht, Konventionen und Verschiedenes
  13. ^ George Kraft IV (1. November 2000). "Wo kann ich meine Produkte unter Linux installieren?". Linux Journal. Abgerufen 13. November 2014.
  14. ^ a b c d e Kernighan, Brian W.; Pike, Rob (1984). Die UNIX -Programmierumgebung. Prentice-Hall. pp.63–65. Bibcode:1984upe..book ..... k.
  15. ^ a b Ritchie, Dennis. "Unix Notes von 1972". Abgerufen 14. Januar 2018.
  16. ^ System V -Anwendung Binärschnittstelle Ausgabe 4.1 (1997-03-18)
  17. ^ M. D. McIlroy (1987). A Research Unix Reader: Annotierte Auszüge aus dem Programmierhandbuch, 1971–1986. CSTR 139, Bell Labs.
  18. ^ "Kapitel 7. sendmail". Unicos/MP Networking Facilities Administration. Cray. Abgerufen 14. September 2013.
  19. ^ "FHS-Spec Revision 44".