Unterschiede zwischen / bin, / sbin, / usr / bin, / usr / sbin, / usr / local / bin, / usr / local / sbin


282

Ich habe sechs Verzeichnisse mit Befehlsdateien. Diese sind /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/binund /usr/local/sbin.

Was sind die Unterschiede zwischen diesen? Wenn ich meine eigenen Skripte schreibe, wo soll ich sie hinzufügen?


Verbunden:



@ Keelan Ihre Frage steht kurz vor einer Frage, die ich vor einem Jahr gepostet habe: askubuntu.com/questions/830074/…
WinEunuuchs2Unix

Antworten:


348

Bitte beachten Sie hierzu den Filesystem Hierarchy Standard (FHS) für Linux .

  • /bin: Für Binärdateien, die vor dem /usrMounten der Partition verwendet werden können. Dies wird für triviale Binärdateien verwendet, die in der sehr frühen Startphase verwendet wurden oder die im Start-Einzelbenutzermodus verfügbar sein müssen. Denken Sie an Binärdateien wie cat, lsusw.

  • /sbin : Gleich, aber für Binärdateien mit Superuser-Rechten (Root-Rechten) erforderlich .

  • /usr/bin: Wie zuerst, aber für allgemeine systemweite Binärdateien .

  • /usr/sbin : Wie oben, jedoch für Binärdateien mit Superuser-Rechten (Root-Rechten) erforderlich.


Wenn ich meine eigenen Skripte schreibe, wo soll ich diese hinzufügen?

Nichts des oben Genannten. Sie sollten /usr/local/binoder /usr/local/sbinfür systemweit verfügbare Skripte verwenden. Der localPfad bedeutet, dass er nicht von den Systempaketen verwaltet wird (dies ist ein Fehler bei Debian / Ubuntu-Paketen).

Für Benutzer-scoped Skripte verwenden ~/bin(einen persönlichen Binärordner in Ihrem Home - Verzeichnis).

Die FHS sagt für /usr/local:

Tertiäre Hierarchie für lokale Daten, die für diesen Host spezifisch sind . Typischerweise hat weitere Unterverzeichnisse, zum Beispiel bin/, lib/, share/.


In / bin werden alle Kerndateien installiert. wie ls, cat, pwd, etc? In / usr / bin befinden sich also vom Benutzer installierte Apps? Was sind einige Beispiele für das, was in / usr / bin sein sollte?
Patoshi パ ト シ

1
/binVerursacht das Einfügen von Skripten Probleme? Ich habe meine Skripte gemäß Ihrer Antwort verschoben, aber ich bin immer noch neugierig
Rumesh

5
@RumeshSudhaharan das solltest du nicht tun, da es von der Paketverwaltung verwaltet wird. Wenn auch ein anderes Paket diesen Pfad verwenden möchte, wird Ihre Datei überschrieben. Dateien in Paketen können sich niemals überlappen (zumindest bei offiziellen Repositorys), sodass Sie sicherer sind, wenn Sie im lokalen Pfad installieren. Außerdem dient es nur Ihrer eigenen Bequemlichkeit und Sicherheit. In einem lokalen Pfad können Sie das System nicht auf so schlechte Weise durcheinander bringen und Sie können nicht versehentlich eine System-Binärdatei ersetzen.
Gertvdijk

8
Ich mag die Erklärung auf der Fehlerseite:Severity:Serious Certainty:Certain
cutrightjm

1
Ich habe einige Dateien in / usr / local / bin abgelegt und kann sie ausführen, aber ich kann sie nicht bearbeiten, ls -lazeigt nichts an
M. Reza Nasirloo

6

Ich hatte selbst vor einem Jahr eine ähnliche Frage: Bestes Verzeichnis, um meine Bash-Skripte zu platzieren?

Systemverzeichnisse für Binärdateien

man hier(Hierarchie) listet alle Verzeichnisse auf. Um die nur für Binärdateien zu erhalten, verwenden Sie:

$ man hier | grep -E 'bin$|sbin$|^.{7}(/bin)|^.{7}(/sbin)' -A2

       /bin   This directory contains executable programs which are needed in single user
              mode and to bring the system up or repair it.

--
       /sbin  Like  /bin,  this  directory  holds commands needed to boot the system, but
              which are usually not executed by normal users.

--
       /usr/X11R6/bin
              Binaries  which  belong  to the X-Window system; often, there is a symbolic
              link from the more traditional /usr/bin/X11 to here.
--
       /usr/bin
              This  is the primary directory for executable programs.  Most programs exe
              cuted by normal users which are not needed for booting or for repairing the
--
       /usr/local/bin
              Binaries for programs local to the site.

--
       /usr/local/sbin
              Locally installed programs for system administration.

--
       /usr/sbin
              This directory contains program binaries for  system  administration  which
              are  not  essential  for the boot process, for mounting /usr, or for system

Wo können Sie Ihre eigenen Skripte ablegen?

Damit alle Benutzer auf Ihre Skripte zugreifen können, können Sie sie eingeben /usr/local/bin. Denken Sie daran, dass Sie hier sudoZugriff zum Hinzufügen / Ändern von Dateien benötigen . Siehe: Gibt es einen Standardspeicherort für benutzerdefinierte Linux-Skripte?

Fügen Sie Skripte für Ihre eigene Benutzer-ID ein /home/YOUR_NAME/bin. Denken Sie daran, dass Sie zuerst dieses Verzeichnis erstellen und das Terminal neu starten müssen, damit der Pfad von automatisch eingerichtet wird ~/.profile. Siehe: Wie füge ich / home / username / bin zu $ ​​PATH hinzu?


Was ich weiß, weiß ich nicht

Ich denke darüber nach, einige meiner komplexeren Bash-Skripte in Ask Ubuntu zu verwenden und sie mit install-Skripten einzurichten github. Hier einige Beispiele:

Ich denke, die Skripte sollten /usr/binin dem $ PATH installiert werden , aber ich bin mir noch nicht sicher, an welcher Stelle sie sich befinden.


1
Ich weiß deine Mühe zu schätzen, aber abgesehen von dem Teil "Was ich weiß, weiß ich nicht", hast du gertvdijks Antwort wiederholt.
Tanzel

1
@danzel Ich denke, der wichtigste Teil ist der man hierAbschnitt, den Gertvdijks Antwort nicht ansprach. dh Sie können die verzeichnishierarchische Struktur in der Befehlszeile abrufen, ohne sie im Web lesen zu müssen (dh hier).
WinEunuuchs2Unix

1
das sind interessante informationen, da stimme ich zu. Aber gertvdijk erwähnte bereits den Dateisystem-Hierarchie-Standard (der man hierein informativ unzureichender Auszug aus IMO ist). Dies kann jedoch meine persönliche Meinung sein.
Tanzel

@danzel Ich stimme zu, dass Websites viel ausführlicher analysiert werden als die Inhalte unserer Festplatten. Ich versuche nur darauf hinzuweisen, dass sich die Informationen auf unseren Festplatten befinden, ohne auf das Internet zurückzugreifen. Neben dem Wikipedia - Link ist zitierte fehlt /usr/X11R6/bin und /usr/local/bindie in enthalten ist man heir.
WinEunuuchs2Unix

@ WinEunuuchs2Unix, wieder letzter Absatz; Warum nicht, /usr/local/binweil Sie nicht der Paketmanager sind?
Pacerier
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.