Begrenzt POSIX die Anzahl der Verzeichnisse im Betriebssystemstamm?

12

Ich versuche den POSIX-Standard zu lernen. Wenn Unix verwenden, habe ich /bin, /etc, /dev, /media, und in der Regel /optist aber , dass auf Ihre spec Implementierung standardisiert oder nach oben? Könnte es viele Verzeichnisse im Stamm geben, oder ist es durch den Standard begrenzt?

Niklas
quelle
3
POSIX berührt diesen Bereich nicht.
Thomas Dickey

Antworten:

17

Nach dem veröffentlichten Standard von The Open Group sind nur folgende Verzeichnisse erforderlich:

  • /
  • /dev, Die enthält console, nullundtty
  • /tmp, garantiert beschreibbar, aber nicht unbedingt erhalten.

Die Linux Foundation unterhält einen Dateisystem-Hierarchie-Standard (FHS), der diesen um die Verzeichnisse erweitert, die normalerweise auf einem Linux-System angezeigt werden:

  • /bin: Wichtige Binärdateien für Benutzerbefehle
  • /boot: Statische Dateien des Bootloaders
  • /dev: Gerätedateien
  • /etc: Hostspezifische Systemkonfiguration
  • /home: Benutzer-Home-Verzeichnisse (optional)
  • /lib: Wesentliche gemeinsam genutzte Bibliotheken und Kernelmodule
  • /lib<qual>: Wesentliche gemeinsam genutzte Bibliotheken im alternativen Format (optional)
  • /media: Montagepunkt für Wechselmedien
  • /mnt: Mount-Punkt für ein vorübergehend gemountetes Dateisystem
  • /opt: Add-On-Anwendungssoftwarepakete
  • /root: Home-Verzeichnis für den Root-Benutzer (optional)
  • /run: Laufzeitvariable Daten
  • /sbin: System-Binärdateien
  • /srv: Daten für von diesem System bereitgestellte Dienste
  • /tmp: Temporäre Dateien
  • Sowie die /usrHierarchie und die /varHierarchie

Das FHS wurde so allgemein wie möglich konzipiert, um die Integration in jedes UNIX-System zu ermöglichen. Die zusätzlichen Verzeichnisse sind wahrscheinlich in jedem vernünftigen System vorhanden, dies wird jedoch von POSIX nicht vorgeschrieben.

Beachten Sie jedoch, dass The Open Group dies auch angibt

Streng konforme Anwendungen dürfen nicht die Fähigkeit annehmen, Dateien in einem dieser Verzeichnisse zu erstellen, es sei denn, dies ist unten angegeben.

Da Verzeichnisse eigentlich nur Dateien sind, bedeutet dies, dass eine streng konforme Anwendung keine Dateien oder Verzeichnisse auf Stammebene erstellt. Daher beschränkt POSIX nicht unbedingt, was eine Distribution auf der Root-Ebene platzieren kann, sondern scheint zu behaupten, dass eine Anwendung, die ihrer Spezifikation entspricht, nicht davon ausgehen kann, dass dies möglich ist.

Fuchs
quelle
5
Die Frage war nicht, welche Verzeichnisse Standard sind , sondern ob es ein Limit gibt . POSIX beantwortet diese Frage nicht.
Thomas Dickey
Es wird eine Meinung hinzugefügt, ohne auf ein Zitat von POSIX zu verweisen.
Thomas Dickey
Der letzte Absatz ist das, worauf ich mich bezog: "scheint zu sagen". POSIX vermeidet es , eine Grenze in diesem Bereich zu erwähnen, wobei der Schwerpunkt eher auf Gemeinsamkeiten als auf Unterschieden liegt.
Thomas Dickey
1
Vielen Dank, Fox. Ihre Antwort war die Information, nach der ich gesucht habe.
Niklas
13

In 10.1 Verzeichnisstruktur und Dateien listet POSIX Verzeichnisse auf, die vorhanden sein müssen . Es gibt jedoch keine Begrenzung für die Anzahl anderer Verzeichnisse, die auf der Stammebene eines Dateisystems vorhanden sein können.

Im Übrigen scheint die Größe anderer Verzeichnisse nicht begrenzt zu sein.

Die Aufmerksamkeit von POSIX in diesem Bereich konzentriert sich eher auf Gemeinsamkeiten als auf Unterschiede.

Thomas Dickey
quelle
Da auf einem * nix-System möglicherweise jedes Verzeichnis (einschließlich /) ein Stammverzeichnis sein kann, wäre es ziemlich dumm, der Anzahl der Einträge in einem Stammverzeichnis eine Obergrenze aufzuerlegen. /ist in dieser Hinsicht nicht besonders speziell, daher wäre es ziemlich albern, der Anzahl der Einträge in /spezifisch eine Obergrenze aufzuerlegen .
Ein CVn
8

Die Anzahl der Einträge in einem Verzeichnis ist weder in POSIX noch in typischen Unix-Implementierungen begrenzt. Möglicherweise gibt es eine indirekte Begrenzung für die Anzahl der Unterverzeichnisse. Dies ist die maximale Anzahl fester Verbindungen (der ..Eintrag jedes Unterverzeichnisses ist eine feste Verbindung zum Verzeichnis). Das ist 2 16 für viele gängige Dateisysteme, wodurch ein Verzeichnis auf 65533 Unterverzeichnisse beschränkt wird (zumindest für die Dateisysteme, in denen ..Einträge explizit gespeichert werden). Sie werden vorher anfangen, schlechte Leistung zu erzielen. Laut POSIX darf eine Implementierung nur 8 feste Links in einer Datei ( _POSIX_LINK_MAX) unterstützen, aber keine tatsächliche Implementierung ist auf 6 Unterverzeichnisse beschränkt. Auf vielen Dateisystemen, einschließlich ext4, wird die Anzahl der festen Verbindungen nicht beibehalten.. Einträge, daher ist die einzige Begrenzung, wie viel Speicherplatz oder wie viele Inodes im Dateisystem verfügbar sind.

POSIX sagt nicht viel über die Organisation von Dateien auf dem System aus. Es ist nur die Existenz einiger weniger Dateien vorgeschrieben . Die einzigen obligatorischen Einträge im Stammverzeichnis sind /devund /tmp. Andere gewöhnliche Unix - Einträge wie /usr, /var, /bin, /etc, /lib, /home, etc. sind Unix - Konventionen , die von POSIX nicht kodifiziert werden.

Unter Linux kodifiziert die FHS die Klassiker und einige mehr. Die meisten Linux-Distributionen halten sich an die FHS-Einträge. Andere Unix-Systeme haben normalerweise die gleichen Einträge, möglicherweise mit einigen Unterschieden, aber die Anzahl ist ungefähr gleich.

Systemadministratoren können mehr erstellen, obwohl dies nicht empfohlen wird: Es gibt genau definierte Stellen für die meisten Dinge (Software geht unter /usroder /opt, Systemdaten gehen unter /var, Benutzerdaten gehen unter /net, Mount-Punkte gehen unter /mediaoder /mntusw.), so dass es selten gibt Ein guter Grund, neue Verzeichnisse auf oberster Ebene zu erstellen.

Gilles 'SO - hör auf böse zu sein'
quelle
Das ist nicht richtig. Die meisten "vernünftigen" Dateisysteme haben eine maximale Anzahl von Unterverzeichnissen pro Verzeichnis oder eine maximale Anzahl von Inodes pro Gerät. Es ist jedoch normalerweise relativ groß im Verhältnis zu der Anzahl der Verzeichnisse, die Sie wahrscheinlich im Stammverzeichnis des Laufwerks sehen.
Kevin
@ Kevin Oh, guter Punkt, auf gängigen Dateisystemen würden Sie zuerst die maximale Anzahl fester Verbindungen erreichen, und das könnte nur 16 Bit betragen.
Gilles 'SO - hör auf böse zu sein'
@ Kevin Obwohl dies in ext4 nicht der Fall ist, scheint die Anzahl der Unterverzeichnisse außer dem verfügbaren Speicherplatz (Blöcke oder Inodes) nicht begrenzt zu sein. Haben Sie an eine andere Begrenzung der Anzahl der Unterverzeichnisse pro Verzeichnis gedacht?
Gilles 'SO - hör auf böse zu sein'
Ein ordnungsgemäß gestaltetes Dateisystem erstellt keine festen Links zu den Verzeichniseinträgen. In einem ordnungsgemäß gestalteten Dateisystem beträgt die Anzahl der Links eines Verzeichnisses 1, sofern keine manuell erstellten festen Links vorhanden sind.
schily
1
Nein, für ein 100% POSIX-kompatibles Dateisystem gibt es keine solche Beschränkung. Wie bereits erwähnt, benötigt POSIX nicht. und .. um Hardlinks zu anderen Verzeichnissen zu sein. Wenn dies der Fall ist, handelt es sich um ein Implementierungsdetail, das sich aus den im V7-Dateisystem eingeführten Hacks ergibt. Es gibt andere POSIX-kompatible Dateisysteme, die völlig anders funktionieren.
schily
2

Im Gegensatz zu FAT haben die von UNIX verwendeten Dateisysteme keine spezielle Größenbeschränkung für das Stammverzeichnis, aber sobald die Partition voll ist, können Sie keine weiteren hinzufügen.

Jasen
quelle