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)
quelle
/bin
ist/etc
, von zu trennen/
.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/etc
sowie die Liste der installierten Pakete). Es ist auch nützlich, Sicherungsstrategien zu definieren: Was drin ist/etc
und was von/home
entscheidender Bedeutung ist, während was drin ist,/usr
kann 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
/opt
Struktur) zu entpacken und Gesamtstrukturen symbolischer Links von Paketverzeichnissen zu einer/usr
Struktur 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.
quelle
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
tmpfs
für/run
; und/sbin
auf 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.quelle
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.
quelle