Was sind die Vorteile der Unix-Dateisystemstruktur?

9

Wenn ich eine Anwendung unter Linux installiere, beispielsweise Debian / Gnu Linux, werden die Dateien der Anwendungen in viele verschiedene Verzeichnisse im Dateisystem kopiert.

Einige Skripte gehen in / usr / share .. / usr / local, andere in / var .. / log .. etc / und so weiter.

Für mich ist das in Ordnung, weil ich etwas über das Dateisystem gelernt habe und die meisten Verzeichnisse dazu da sind, Dateien für einen bestimmten Zweck zu speichern. Dies passt sehr gut in die Unix-Philosophie "Mach eins und mach es gut".

Aber meine Frage ist, was sind die Vorteile einer solchen Verzeichnisstruktur? Oder ist es einfach das Erbe der alten Unix-Tage? (zB im Vergleich zu dem Windows, bei dem sich alle Dateien für eine Anwendung in einem bestimmten "Ordner" befinden)

Jan Koester
quelle

Antworten:

9

Was mir am einfachsten vorstellbar erscheint, ist, dass ähnliche Dateien im selben Verzeichnisbaum gespeichert sind. Konfigurationsdateien leben in /etc, Protokolldateien und / oder Laufzeit-Trace-Dateien leben in /var/log, ausführbare Dateien leben in /usr/bin, Laufzeitinformationen wie PID-Dateien leben in /var/run. Sie möchten wissen, was in der NTP-Konfigurationsdatei enthalten ist? Wechseln Sie in das Verzeichnis /etcund tun Sie es ls ntp*. Sie möchten, dass einige Programme ausführbare Dateien überwachen, damit ein herkömmlicher Dateisystemvirus sie nicht infiziert? Alles drin /usr/binund /usr/local/binmuss gesehen werden.

Der zweite Vorteil, den ich mir vorstellen kann, ist, dass der Unix-Organisationsstil eine Trennung von Daten und ausführbaren Dateien fördert. Ausführbare Dateien befinden sich in einem Verzeichnis, das weit entfernt von den Vorlagen ( /usr/sharewahrscheinlich) und weit entfernt von den Daten liegt. Diese Trennung könnte ein Grund dafür sein, dass Unix / Linux / * BSD mehr Widerstand gegen Dateisystemviren bietet als Windows oder der alte Pre-OSX-Mac.

Bruce Ediger
quelle
Das sind gute Punkte. Warum ist die Trennung von ausführbaren Dateien und Daten-, Vorlagen- und Konfigurationsdateien ein Grund für mehr Schutz vor Viren?
Jan Koester
3
Viele (aber nicht alle) Viren und Würmer auf der Welt verbreiten sich aufgrund der Möglichkeit, Daten in ausführbare Dateien zu ändern: Stapelüberläufe sowie SQL-Injection und Code-Injection funktionieren auf diese Weise. "Word" -Makroviren haben sich zumindest teilweise verbreitet, weil "Word" -Makros in DOC-Dateien enthalten sind. Die Trennung von Daten von ausführbaren Dateien nach Dateien ist eine Schutzstufe: Das Speichern von Daten in einem Verzeichnis, das Ausführen von Daten in einem zweiten Verzeichnis, Vorlagen in einem dritten Verzeichnis und die Konfiguration in einem vierten Verzeichnis stellen noch mehr Hindernisse für die Verwirrung von Daten und ausführbaren Dateien dar.
Bruce Ediger
2
Das Argument der Trennung von Daten und ausführbaren Dateien ist völliger Unsinn. Die Organisation des Dateisystems ist zum Nutzen des Menschen. Es ist nicht so, dass es eine physische Trennung zwischen den Bits gibt, die sie daran hindert, sich gegenseitig oder irgendetwas zu geben. Die Sicherheit von UNIX ist historisch besser, da das Berechtigungsmodell im Allgemeinen stärker und strenger durchgesetzt wird.
flauschige
@fluffy Separate Dateisysteme bieten eine etwas stärkere Trennung, aber dieser Punkt ist teilweise umstritten, da es nicht möglich /binist /etc, von zu trennen /.
jw013
@fluffy - vereinbart, keine "physische" Trennung besteht oder ist möglich. Aber es ist eine Trennung nach Namen. Malware muss in einem anderen Verzeichnis suchen (anstatt "." Oder dirname $ 0 oder so), um Vorlagen oder andere Daten zu finden. Es ist keine absolute Sicherheit, genauso wenig wie das Schließen eines Glasfensters absolute Sicherheit ist. Sicherheit ist ein wirtschaftliches Gut mit einem Grenzwert für jede zusätzliche Arbeitseinheit. Jedes bisschen hilft.
Bruce Ediger
11

Unabhängig davon, welche Organisation ausgewählt wird, werden einige Dinge einfacher und einige schwieriger.

Organisieren von Dateien von Typen, dem Unix - Weg (in bin, man, lib/python, ...), macht es einfacher , Dateien zu verwenden. Wenn Sie einen Befehl ausführen möchten, wissen Sie, wo Sie ihn finden, unabhängig davon, welches Paket ihn bereitstellt. Wenn Sie die Dokumentation durchsuchen möchten, ist alles an einem Ort. Wenn ein Programm ein Vim-Syntax-Hervorhebungsmodul, eine zsh-Vervollständigungsfunktion oder Python-Bindungen bereitstellt, befindet sich die entsprechende Datei an einer Stelle, an der vim / zsh / python sie finden kann.

Unix organisiert Dateien auch nach Verwendungsmustern. Konfigurationsdateien werden eingegeben /etc, Dateien, die sich im normalen Betrieb nicht ändern /usr, und Dateien, die sich automatisch ändern, werden eingegeben /var. Benutzerdaten gehen unter /home. Dies ist sehr nützlich für das Konfigurationsmanagement (verwalten Sie die Inhalte /etcsowie die Liste der installierten Pakete). Es ist auch nützlich, Sicherungsstrategien zu definieren: Was drin ist /etcund was von /homeentscheidender Bedeutung ist, während was drin ist, /usrkann einfach wieder heruntergeladen werden.

Die Hauptkosten der Unix-Methode bestehen darin, dass die Installation einer Software auf viele Verzeichnisse verteilt ist. Moderne Unix-Systeme verfügen jedoch ohnehin über Paketmanager. Das Verwalten von Dateien in vielen Verzeichnissen ist bei weitem nicht die komplexeste Aufgabe (das Verfolgen von Abhängigkeiten ist sehr nützlich und schwieriger).

Vergleichen Sie das mit Windows. Windows begann ohne Paketverwaltung, und jede Anwendung erstellte irgendwo ein eigenes Verzeichnis. Alle Dateien befinden sich normalerweise in diesem Verzeichnis: Programme, statische Daten, Benutzerdaten usw. Mit Ausnahme von Bibliotheken, deren Programme ohne Berücksichtigung von Konflikten in ein gemeinsames Systemverzeichnis verschoben werden („DLL-Hölle“). Im Laufe der Zeit wurde Windows zu einem Mehrbenutzer, der die Trennung von Benutzerverzeichnissen von Systemverzeichnissen erforderte. Windows hat auch einen zentralen Ort für Konfigurationsdateien (Unix /etc) und einige Systemdaten (Unix) erstellt/var), die Registrierung. Dies ist eher ein historisches Artefakt, hauptsächlich aufgrund des Mangels an Paketverwaltung und der frühen Geschichte als Einzelbenutzersystem. Der Windows-Ansatz weist viele Einschränkungen auf: Softwarepakete lassen sich nicht einfach miteinander interagieren. Beispielsweise landet die meiste installierte Software nicht im Standardpfad für die Befehlssuche, sodass sie mit jeder Form von Skripten schlecht interagiert. Installateure stellen normalerweise als Sonderfall ein Menüsymbol bereit, das in einem separaten Systemverzeichnis (à la Unix!) Abgelegt wird.

Eine Einschränkung des Unix-Ansatzes besteht darin, dass die Koexistenz mehrerer Versionen eines Pakets nicht einfach möglich ist. Dies ist besonders problematisch, wenn das Paket aktualisiert wird. Eine Möglichkeit, das Beste aus beiden Welten herauszuholen, besteht darin, jedes Paket in einem eigenen Verzeichnis (einer /optStruktur) zu entpacken und Gesamtstrukturen symbolischer Links von Paketverzeichnissen zu einer /usrStruktur zu erstellen . Dies ist, was Software wie Stow macht.

Zusammenfassend lässt sich sagen, dass der Unix-Ansatz die Verwendung von Dateien, die Verwaltung von Dateien und die Interaktion von Paketen erleichtert. Es erfordert eine Paketverwaltungssoftware, aber das ist trotzdem wünschenswert. Der Windows-Ansatz erleichtert die manuelle Verwaltung von Paketen, muss sich jedoch dem Unix-Modell zuwenden, um nützliche Funktionen zu erhalten.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Genial. Meiner Meinung nach war es früher nur einfacher, Pakete einzeln zu verwalten. Das Aufkommen der Windows-Registrierung hat all das und noch einige mehr geändert. Es ist nicht nur gigantisch und labyrinthisch - es ist auch absichtlich so - mit einigen Werten im Bytecode, während andere es nicht sind und kein wahrer Reim oder Grund für die Struktur. Ich denke, so muss es sein, wenn Sie ein verwaltetes Betriebssystem entwickeln und Geschäftsgeheimnisse und proprietäre Methoden schützen möchten : verwirrend.
Mikesserv
3

Ein oben nicht genannter Hauptvorteil und einer der historischen Gründe für die Struktur ist die physische Trennung auf mehreren Volumes / Festplatten, die in verschiedenen Phasen des Startvorgangs verfügbar sind.

Ein weiterer Vorteil besteht darin, dass die verschiedenen Verzeichnisse auf Volumes / Dateisystemen bereitgestellt werden können, die für die Daten des Verzeichnisses optimiert sind. Zum Beispiel tmpfsfür /run; und /sbinauf schreibgeschützten Medien / ROM.

Die Volumes können auch lokal oder remote, persönlich oder gemeinsam genutzt werden.

Schließlich finden Sie im Anwendungsverzeichnis einen alternativen Ansatz (von @fluffy erwähnt), der unter UNIX (OS X .app), Linux ( ROX Desktop ) und Windows ( PortableApps.com ) verwendet wird.

go2null
quelle
1

Dieses Layout bietet keine wirklichen Vorteile, abgesehen davon, dass es leicht zu erraten ist, wo sich freigegebene Dateien und Konfigurationsdateien für eine Anwendung befinden. UNIX hat ein langes Erbe dieser Art von Layout, und es wäre ziemlich schwierig, es zu brechen. Einige UNIX-Distributionen haben jedoch ihr Modell geändert - sie stellen die alten Speicherorte nur für ältere Zwecke bereit, und andere Apps werden in einem eigenen kleinen Verzeichnis / Paket gebündelt. Mac OS X ist das bekannteste Beispiel dafür, und es gibt einige obskure Linux-Distributionen, die dasselbe tun (und Android macht etwas Ähnliches, geht nur ein bisschen weiter und installiert und startet jede Anwendung auch unter seiner eigenen Benutzer-ID ).

Die Hauptsache, die eine Dateisystemkonvention bietet, ist genau das - eine Konvention, damit die Leute wissen, wo sie nach Dateien suchen müssen (sei es manuell oder im Code). Es gibt keinen wirklichen technischen Grund dafür, dass es einen Weg über den anderen gibt.

flauschige
quelle