Wenn du dich zum ersten Mal mit Linux beschäftigst, kann es verwirrend sein, wie das Dateisystem organisiert ist und welche Rolle die verschiedenen Verzeichnisse und Dateien darin spielen. In diesem Beitrag werde ich dir eine Einführung in die Struktur des Linux-Dateisystems geben und dir dabei helfen, dich besser zurechtzufinden.
Ich werde dir die wichtigsten Verzeichnisse und Dateien erklären und dir außerdem zeigen, wie sie zusammenarbeiten, um ein robustes und leistungsstarkes Betriebssystem zu schaffen. Wenn du bereit bist, in die faszinierende Welt des Linux-Dateisystems einzutauchen, dann lass uns loslegen! Und eines gleich vorweg: In Linux ist quasi alles eine Datei. Dazu aber später mehr.
Wie ist das Linux-Filesystem aufgebaut?
Auf den ersten Blick wirkt alles etwas durcheinander und vielleicht auch redundant. Es gibt dutzende Ordner, die von der Wurzel abgehen. Diese bezeichnet man im Übrigen als Root und wird als Slash-Zeichen dargestellt. Wie auch immer, folgt der Aufbau des Dateisystems einer klaren Vorgabe. Die Rede ist vom Filesystem Hierarchy Standard (FHS).
Er sorgt für eine einheitliche Struktur und Organisation des Dateisystems in Linux basierten Systemen. Wie bereits kurz angerissen, ist die oberste Ebene des Linux-Dateisystems das sogenannte Wurzelverzeichnis („/“), von dem aus alle anderen Verzeichnisse und Dateien erreichbar sind. Hier sind einige der wichtigsten Verzeichnisse im Linux-Dateisystem und ihre Bedeutung:
- /bin: Komplett ausgeschrieben steht das Wörtchen bin für Binaries. Der Ordner enthält also ausführbare Dateien, die von allen Benutzern des Systems genutzt werden können. Software, die ausschließlich von root genutzt werden darf, ist hier nicht vorhanden.
- /dev: Es handelt sich hier um eine Abkürzung für Devices. Dieser Ordner enthält also spezielle Gerätedateien, die vom System genutzt werden, um mit Hardwarekomponenten oder auch virtuellen Devices zu kommunizieren.
- /etc: systemweite Konfigurationsdateien müssen irgendwo abgelegt werden und das ist hier der Fall. Server-Administratoren arbeiten häufig an Konfigurationsdateien in diesem Verzeichnis.
- /home: Reguläre Anwender brauchen ein Verzeichnis für ihre Daten. Unter /home findet man also die Benutzer-Verzeichnisse. Der Nutzername wird dabei als Bezeichnung genutzt.
- /lib: Ausgeschrieben steht lib für Libraries und der Ordner enthält daher Bibliotheksdateien, die von Systemanwendungen genutzt werden.
- /media: dient als Einhängepunkt für Wechselmedien wie CDs, DVDs oder USB-Sticks. Das Betriebssystem mountet Wechseldatenträger in dieses Verzeichnis automatisch beim Einstecken.
- /mnt: fungiert als Einhängepunkt für temporäre Dateisysteme oder andere externe Geräte. Der Administrator muss die Mounts selbst ausführen.
- /opt: enthält optionale Anwendungen oder Pakete.
- /proc: Das virtuelle Dateisystem enthält im laufenden Betrieb Informationen über laufende Prozesse oder die CPU.
- /sbin: Sicherheit muss sein und so enthält /sbin ausführbare Dateien, die nur von Systemadministratoren genutzt werden können.
- /snap: Hier ist der Name Programm. Der Ordner enthält sogenannte Snap-Pakete welche aus dem Hause Canoncial stammen. Damit werden Programme wie Firefox in isolierten Software-Umgebungen ausgeführt.
- /tmp: beherbergt temporäre Dateien, die von Anwendungen und dem System genutzt werden.
- /usr: beinhaltet Anwendungsdateien, Bibliotheken und Dokumentationen.
- /var: enthält variable und damit oft kontinuierlich wachsende Daten, wie z.B. Log-Dateien oder temporäre Dateien.
Wieso ist in Linux alles eine Datei?
In Linux wird so gut wie alles in Form von Dateien verwaltet. Das hat auch einen ganz banalen Grund. Das Betriebssystem folgt schlicht und ergreifend der Vorgabe „Everything is a file“. Dies bedeutet, dass alle Geräte, Prozesse, Netzwerkverbindungen und andere Systemressourcen über eine Datei oder ein Verzeichnis im Dateisystem zugänglich gemacht werden.
Dieses Prinzip hat den Vorteil, dass es eine einheitliche Schnittstelle für den Zugriff auf verschiedene Ressourcen im System bietet. Da alles als Datei dargestellt wird, können Programme und Benutzer auf dieselbe Art und Weise auf alle Ressourcen zugreifen, indem sie einfach die Dateioperationen verwenden, die sie bereits kennen.
Zum Beispiel kann ein Prozess in Linux über eine Datei in /proc auf Informationen über sich selbst und andere Prozesse zugreifen. Netzwerkverbindungen werden über Dateien in /proc/net/tcp oder /proc/net/udp verfügbar gemacht. Und Geräte werden über spezielle Dateien in /dev wie z.B. /dev/sda (für die erste Festplatte) oder /dev/tty (für die Konsole) zugänglich gemacht.
Durch die Verwendung von Dateien als Schnittstelle für alle Ressourcen im System wird auch die Verwaltung und Überwachung des Systems vereinfacht. Zum Beispiel können Systemadministratoren die Aktivität von Prozessen überwachen, indem sie einfach die Dateien in /proc durchsuchen, anstatt spezielle Tools zu verwenden.
Insgesamt bietet das Prinzip „Everything is a file“ eine einfache, einheitliche und leistungsfähige Schnittstelle für den Zugriff auf Systemressourcen in Linux. Hat man sich zudem an diesen Standard gewöhnt, möchte man ihn auch gar nicht mehr missen. Einfacher kann das Leben als Systemadministrator nämlich nicht sein.
Was könnte der FHS besser machen?
Insgesamt bietet die hierarchische Struktur des Linux-Dateisystems eine klare Organisation von Dateien und Ordnern. Deren Verwendung sowie Verwaltung sind gut handelbar. Selbstverständlich hat sich Linux im Laufe der Jahre stetig weiter entwickelt und so ist auch der Filesystem Hierarchy Standard über die Jahre organisch gewachsen.
Daher ist es auch nicht weiter verwunderlich, dass es an der ein oder anderen Stelle Verbesserungsbedarf gibt. Folgende Punkte könnten einer Meinung nach in Angriff genommen werden:
Die Macht der Flexibilität sollte nicht unterschätzt werden:
Obwohl der FHS eine einheitliche Struktur des Dateisystems festlegt, kann es schwierig sein, in einigen Fällen spezielle Anforderungen zu erfüllen. Zum Beispiel kann man Anwendungen nur mit großer Mühe und Not in Verzeichnisse installieren, die nicht im FHS definiert sind. Die Rede ist von /opt oder /usr/local.
Aktualisierungen sind in der Informatik unerlässlich:
Der FHS wurde seit seiner Einführung im Jahr 1993 nur selten auf den aktuellen Stand gebracht, was dazu führt, dass einige Teile des FHS veraltet sind. Einige wichtige Verzeichnisse, die heute von modernen Linux-Systemen genutzt werden, wie z.B. /snap, werden nicht im FHS erwähnt. Allgemein betrachtet scheint die Verwendung von Snap- und Flatpak-Paketen im FHS nicht zu existieren.
Es handelt sich hierbei um Container, die Anwendungen und deren Abhängigkeiten enthalten. Damit ist es möglich, Software in verschiedenen Linux-Distributionen auszuführen, ohne Abhängigkeiten installieren müssen. Diese Pakete verwenden jedoch Verzeichnisse, die im FHS nicht erwähnt werden, wie z. B. /snap oder /var/lib/flatpak.
Konsistenz ist das A & O bei Betriebssystemen:
Obwohl der FHS eine einheitliche Struktur und Organisation des Dateisystems vorschreibt, gibt es immer noch einige Unterschiede in der Implementierung zwischen verschiedenen Linux-Distributionen. Zum Beispiel gibt es Unterschiede in der Platzierung von Verzeichnissen wie /var/log oder /var/run.
Einige Distributionen platzieren diese Verzeichnisse unter /var, während andere sie unter /run oder /run/lock platzieren. Diese Unterschiede können zu Kompatibilitätsproblemen zwischen Anwendungen führen, die auf verschiedenen Distributionen ausgeführt werden, insbesondere wenn diese Anwendungen auf Verzeichnisse zugreifen müssen, die sich an verschiedenen Stellen befinden.
Diese Unterschiede können dazu führen, dass Administratoren Schwierigkeiten haben, Anwendungen auf verschiedenen Distributionen zu installieren oder zu verwalten, da sie sich mit den spezifischen Implementierungsunterschieden jeder Distribution vertraut machen müssen. Dennoch hat der FHS dazu beigetragen, die Kompatibilität zwischen Linux-Systemen zu verbessern.