Standard- und / oder allgemeine Verzeichnisse unter Unix / Linux-Betriebssystemen

25

Ich komme aus der Windows-Welt und habe festgestellt, dass die meisten Ordnerverzeichnisnamen sehr intuitiv sind:

  • \Program Files Enthält Dateien, die von Programmen verwendet werden (Überraschung!)

  • \Program Files (x86) Enthält Dateien, die von 32-Bit-Programmen unter 64-Bit-Betriebssystemen verwendet werden

  • \Users(ehemals Documents and Settings) enthält Benutzerdateien, dh Dokumente und Einstellungen

    • \Users\USER\Application Data enthält anwendungsspezifische Daten

    • \Users\USER\Documents Enthält Dokumente des Benutzers

  • \Windows Enthält Dateien, die zum Betrieb von Windows selbst gehören

    • \Windows\Fonts speichert Schriftdateien (Überraschung!)

    • \Windows\Temp ist ein globales temporäres Verzeichnis

und so weiter. Selbst wenn ich keine Ahnung hätte, was diese Ordner taten, könnte ich anhand ihrer Namen genau raten.

Jetzt sehe ich mir Linux genauer an und bin ziemlich verwirrt darüber, wie ich mich im Dateisystem zurechtfinde.

Beispielsweise:

  • /binEnthält Binärdateien. Aber so tun /sbin, /usr/bin, /usr/sbin, und wahrscheinlich mehr , dass ich weiß , über nicht. Welcher ist welcher?? Was ist der Unterschied zwischen ihnen? Wenn ich eine Binärdatei erstellen und systemweit ablegen möchte, wo soll ich sie ablegen?

  • /mediaenthält externe Mediendateisysteme. Aber das tut es auch /mnt. Und keiner von ihnen enthält im Moment irgendetwas auf meinem System; alles scheint in zu sein /dev. Was ist der Unterschied? Wo sind die anderen Partitionen auf meiner Festplatte, wie das C:und D:das war in Windows?

  • /homeenthält die Benutzerdateien und -einstellungen. So viel ist intuitiv, aber worauf soll es dann ankommen /usr? Und warum /rootist es immer noch getrennt, obwohl es ein Benutzer mit Dateien und Einstellungen ist?

  • /libEnthält gemeinsam genutzte Bibliotheken wie DLLs. Aber das tut es auch /usr/lib. Was ist der Unterschied?

  • Was ist /etc ? Steht es wirklich für "et cetera" oder für etwas anderes? Welche Arten von Dateien sollten dort abgelegt werden - global oder lokal? Ist es ein Allheilmittel für Dinge, von denen niemand wusste, wo sie abgelegt werden sollten, oder gibt es einen bestimmten Anwendungsfall dafür?

  • Was ist /opt, /procund /var? Wofür stehen sie und wofür werden sie verwendet? Ich habe so etwas in Windows * noch nicht gesehen und kann einfach nicht herausfinden, wofür sie geeignet sein könnten.

Wenn jemand an andere Standardorte denken kann, über die er gut Bescheid wissen könnte, kann er dies gerne der Frage hinzufügen. Hoffentlich kann dies eine gute Referenz für Leute wie mich sein, die anfangen, sich mit * nix-Systemen vertraut zu machen.

* OK, das ist eine Lüge. Ich habe ähnliche Dinge in WinObj gesehen, aber offensichtlich nicht regelmäßig. Ich weiß immer noch nicht, was diese unter Linux machen.

Mehrdad
quelle
1
Vielen Dank für Ihren guten Lerngeist. Dieses Thema ist oft umstritten. In meiner Antwort auf diese Frage finden Sie einige zusätzliche Erklärungen zu den grundlegenden Unterschieden zwischen Dateisystemstrukturen in Windows und Linux.
Caleb
Stellen Sie sich "usr" nicht als Abkürzung für "user", sondern für "Unix System Resources" vor (auch wenn es wahrscheinlich ein Backronym ist, da es vor Jahren Benutzerverzeichnisse enthielt) ( linux-training.be/files/books/html) /fun/ch09s08.html ).
Lgeorget
Es hat keinen Sinn, die kryptischen Verzeichnisnamen von Unix / Linux / etc gegen Windows (oder Mac OS X) zu rechtfertigen. Es ist einfach so wie es ist.
Andrew Wolfe
Ab 2017 ist die Windows-Ordnerstruktur ein komplettes Durcheinander. C:\Program Files, C:\ProgramData, %HOME%\AppData\Local, %HOME%\AppData\LocalLow, C:\Windows\SystemApps... Alle Beispiele , in denen eine ausführbaren Dateien in Windows finden. Und ich werde nicht einmal über Konfigurationsdateien und die Registrierung sprechen, ich möchte nicht noch depressiver werden. PS: Ich arbeite hauptsächlich unter Windows.
Rsenna

Antworten:

29

Linux-Distributionen verwenden die FHS: http://www.pathname.com/fhs/pub/fhs-2.3.html

Sie können es auch versuchen man hier.

Ich werde versuchen, die Antworten auf Ihre Fragen auf den Kopf zu stellen, aber ich empfehle Ihnen nachdrücklich, die FHS durchzulesen:

  • / bin ist für Nicht-Superuser-Systembinärdateien
  • / sbin ist für Superuser-Systembinärdateien (Root)
  • / usr / bin & / usr / sbin sind für nicht kritische freigegebene Nicht-Superuser- bzw. Superuser-Binärdateien
  • / mnt dient zum temporären Mounten einer Partition
  • / media dient zum gleichzeitigen Laden vieler Wechselmedien
  • / dev enthält die Gerätedateien Ihres Systems. das ist eine lange Geschichte :)
  • Der Ordner / usr und seine Unterordner können für andere Systeme freigegeben werden, sodass sie Zugriff auf dieselben Programme / Dateien haben, die an einem Ort installiert sind. Da sich / usr normalerweise in einem separaten Dateisystem befindet, enthält es keine Binärdateien, die erforderlich sind, um das System online zu schalten.
  • / root ist separat, da es möglicherweise erforderlich ist, das System online zu schalten, ohne andere Verzeichnisse bereitzustellen, die sich möglicherweise auf separaten Partitionen / Festplatten / Servern befinden
  • Ja, / etc steht für "et cetera". Dort werden Konfigurationsdateien für das lokale System gespeichert.
  • / opt ist ein Ort, an dem Sie Programme installieren können, die Sie herunterladen / kompilieren. Auf diese Weise können Sie sie vom Rest des Systems trennen, wobei sich alle Dateien an einem Ort befinden.
  • / proc enthält Informationen zum Kernel und zu laufenden Prozessen
  • / var enthält Dateien mit variabler Größe wie Protokolle, E-Mails, Webseiten usw.

Um auf ein System zuzugreifen, benötigen Sie im Allgemeinen nicht / var, / opt, / usr, / home; Einige der potenziell größten Verzeichnisse auf einem System.

Einer meiner Favoriten, den manche Leute nicht benutzen, ist / srv. Es ist für Daten gedacht, die über Dienste wie http / ftp / samba gehostet werden. Ich habe gesehen, dass / var viel dafür verwendet wird, was eigentlich nicht der Zweck ist.

bhinesley
quelle
Guter Überblick bei der Beantwortung der spezifischen Fragen. Beachten Sie, dass einige Distributionen /home/users/usernamefür Benutzer und /home/services/servicenamefür das verwendet werden, wofür Sie dies erwähnen /src. Ich denke, das funktioniert besser, da es vielseitiger zu partitionieren ist. Sie können es auf einer eigenen Partition haben oder dieselbe Partition und Ihre Benutzerdaten verwenden, was ich oft tun möchte.
Caleb
+1 danke für den link und die beschreibungen, die sind super! :)
Mehrdad
/ usr sollte Dateien enthalten, die für die auf dem Betriebssystem befindlichen Anwendungen und / oder für Dateien von Drittanbietern spezifisch sind. Es ist nicht innerlich teilbar! Obwohl LSB dafür plädiert, dass diese in / opt gehalten werden. / usr / share kann andererseits Dateien enthalten, die auf Maschinen mit unterschiedlichen Architekturen / Betriebssystemversionen gemeinsam genutzt werden können. Dies sind alles nur Konventionen! Es ist durchaus möglich (obwohl viel harte Arbeit), eine völlig andere Struktur zu verwenden. Es gibt jedoch auch andere Konventionen - wie Oracle Optimal Flexible Architecture
symcbean
1
Eine andere Sache, die Sie bei Unix beachten sollten, ist das Konzept, dass " alles eine Datei ist " (oder zumindest so aussieht). Zum Beispiel sieht das Zeug in / proc aus wie Dateien und Verzeichnisse, aber der Inhalt wird wirklich dynamisch vom Kernel erstellt, wenn Sie darauf zugreifen. Dies bedeutet, dass Sie dieselben Tools (ls, cat usw.) verwenden können, um auf diese Informationen zuzugreifen.
KeithB
1
@symcbean Aus dem FHS: "... / usr sind gemeinsam nutzbare, schreibgeschützte Daten. Das bedeutet, dass / usr zwischen verschiedenen FHS-kompatiblen Hosts gemeinsam genutzt werden sollte ...". Offensichtlich sind einige Dateien von der Architektur abhängig, und einige Distributionen erwarten völlig andere Verzeichnishierarchien. Die Lösung ist, Ihre Hausaufgaben zu machen, wie ein guter Admin :)
Bhinesley
18

Ich werde nicht antworten, was sie alle bedeuten (andere haben), aber einen kleinen historischen Kontext geben.

Denken Sie zunächst daran, dass UNIX fast 40 Jahre alt ist, damals noch auf Papierbändern und mit 300 Baud fest codierten Terminals für Großrechner (Windows XP ist fast 10 Jahre alt). Das Tippen war langsam und das Bedürfnis nach Effizienz beim Tippen überwog viele andere Überlegungen. Dies ist der Grund für die sehr kurzen Grundbefehle (dh 'ls', 'cat', 'cc', 'dd' usw.). Gleiches galt für die Verzeichnisstrukturen. Der Gedanke war, dass der Name zu lang war, wenn der Befehl mehr als drei oder vier Zeichen umfasst.

Das Verzeichnis / usr enthielt ursprünglich die Home-Verzeichnisse des Benutzers, da sich die meisten Befehle in / bin befanden und sich alle Gerätedateien in / dev befanden. Später sollte das primäre Laufwerk (das Root-Dateisystem '/') für schnellere Startzeiten klein sein. So entstanden andere Strukturen wie / usr / bin, / usr / include und / usr / lib, wobei / usr ein separates "Laufwerk" war. Viel später wurde angenommen, dass sich die Home-Verzeichnisse der Benutzer in / home und noch auf einem anderen Laufwerk befänden. Und viel später, um ein / var (kurz für variabel / änderbar) zu haben. Das Verzeichnis / etc bedeutete "und so weiter", da dies der Sammelpunkt aller Systemkonfigurationsdateien war. Das / mnt wurde als temporärer Speicherort für den Zugriff auf ein Laufwerk (häufig ein Sicherungslaufwerk) verwendet. Verzeichnisse wie / opt, / proc und / media kamen viel später.

Es wird viel ausgelassen (wie / usr / local und / net), aber dies gibt eine kurze Beschreibung, warum die Namen weniger intuitiv sind.

Arcege
quelle
2
+1 Ich liebe den historischen Kontext, er organisiert mein Gehirn. :) Danke, dass du dir die Zeit genommen hast, dies zu schreiben!
Mehrdad
5

Wie bereits erwähnt, verwenden Linux-Distributionen meistens das FHS. Hier finden Sie eine Tutorial-ähnliche Übersicht, die besonders für Windows-Benutzer geeignet ist.

Hinweis: Windows-Verzeichnisse wirken intuitiv und oberflächlich. Aber lassen Sie mich fragen, woher die Einstellungen für ein Programm stammen, als *.iniDatei im Programmordner, in Documents and Settings\User( \Application Dataoder \Local Settings\Application Data) oder in der berüchtigten Registrierung? Niemand weiß es, nicht einmal Microsoft. Und so können wir weitermachen.

Philomath
quelle
1
Ich denke, die Windows 7-Namen der Ordner sind besser. dh AppData \ Roaming vs. AppData \ Local - sie beschreiben die Art der Daten dort. Konfigurationsinformationen: Ich glaube, ich weiß, wo ich sie ablegen muss, wenn ich sie sehe, kann sie aber nicht gut beschreiben, da stimme ich zu. :)
Mehrdad