Was bedeuten / usr / sbin, / usr / local / sbin und / usr / local / bin?

22

Kommen wir zu allen bin- und sbin-Ordnern (vom Dateisystem-Hierarchiestandard):

  • /bin ist für Binärdateien auf Systemebene
  • /sbin ist für andere Binärdateien auf Systemebene vorgesehen, hauptsächlich für den Bootloader und Systemadministratoren
  • /usr/bin ist für nicht unbedingt notwendige binaries
  • /usr/sbin- Hier fängt das Chaos an - nicht unbedingt erforderlich für Systemadministratoren? Was heißt das? Für Experimente?
  • /usr/local/bin - kein Wort über diesen Ordner
  • /usr/local/sbin- lokal installierte Systemverwaltungsprogramme. Nochmal? Wie wäre es /usr/sbin?

Die Frage ist also: Warum gibt es so viele Verzeichnisse und was sind die Bedeutungen von /usr/sbin, /usr/local/sbinund /usr/local/bin?

Viele Programme werden über Archive verteilt und müssen aus dem Quellcode erstellt werden. Normalerweise haben sie makefile, also ist es ziemlich einfach. Dieser Prozess umfasst das Erstellen von Dateien in usr / local / lib, usr / local / bin ... usr / local / whatever, ohne bestimmte Ordner für ein bestimmtes Programm zu erstellen.

Wieso ist es so?

Ich denke, es ist nicht richtig, denn wenn wir das Programm entfernen müssen, müssen wir jede seiner Dateien manuell löschen, wenn der Ersteller des Programms sich nicht darum gekümmert hat.

Sergey
quelle
Sergey, bitte benutze die Markdown-Syntax, um Beiträge im Super User zu schreiben. Wenn sie HTML-Code enthalten, können sie nur schwer im Nur-Text-Format gelesen und bearbeitet werden.
Slhck
Okay, ich werde es versuchen
Sergey
Ich hasse Verzeichnis-Dateisysteme. Warum erfindet jemand kein Dateisystem, in dem Dateien stattdessen nur mit Tags versehen werden? Darüber hinaus ergeben Verzeichnisse keinen Sinn, da Inodes die Fragmentierung von Dateien ermöglichen. Ein Verzeichnis sollte ein zugewiesener Teil des Festplattenspeicherplatzes sein, kein Pfad, meistens wie eine Partition.
jokoon
Auf [FilesystemQA] gibt es diese Erklärung: askubuntu.com/questions/138547/…

Antworten:

22

1. Verzeichnisstruktur

Dies sollte im Filesystem Hierarchy Standard ( 2.3 PDF ) behandelt werden

/ bin / Essential-Befehls-Binärdateien, die im Einzelbenutzermodus verfügbar sein müssen;
            für alle Benutzer, zB cat, ls, cp

/ sbin / Essential-Systembinärdateien, z. B. init, ip, mount.

/ usr / bin / Nicht unbedingt erforderliche Befehls-Binärdateien (im Einzelbenutzermodus nicht erforderlich); 
            für alle Benutzer

/ usr / sbin / Nicht unbedingt erforderliche System-Binärdateien, z. B. Daemons für verschiedene Netzwerkdienste.

/ usr / local / Tertiäre Hierarchie für lokale Daten, spezifisch für diesen Host. 
            Verfügt normalerweise über weitere Unterverzeichnisse, z. B. bin /, lib /, share /

2. Installation

Ich benutze wo immer möglich einen Paketmanager (zB yum oder apt-get). Dies ist für eine sehr große Anzahl von Anwendungen möglich. In einigen Fällen müssen Sie möglicherweise ein Repository hinzufügen. Meine zweite Wahl wären Pakete auf niedrigerer Ebene wie RPMs, und das Kompilieren aus dem Quellcode wäre mein letzter Ausweg (aber manche Leute bevorzugen dies).

Einige Paketmanager können über RPMs installiert werden (z. B. yum install oddity.rpm).

Wenn Sie aus dem Quellcode kompilieren, ist es wahrscheinlich kein großer Schritt, ein eigenes Paket zu erstellen, damit der Systeminstallateur weiß, was Sie getan haben.

Dann reduziert sich Ihr Problem auf z yum remove packagename

Die Alternative ist, eine gute Dokumentation über alle durchgeführten Sysadmin-Aktivitäten aufzubewahren (ich führe trotzdem ein Tagebuch in einer Textdatei).

RedGrittyBrick
quelle
3
Ich verstehe immer noch nicht den Unterschied zwischen usr / sbin, usr / local / bin und usr / local / sbin. usr / local soll für diesen Host spezifisch sein, ist usr / sbin nicht auch für den Host spezifisch? Die zweite Frage betraf jene Programme, die sich nicht in Repos befinden - make uninstall funktioniert nicht immer - also habe ich gefragt, wie man diese löscht.
Sergey
3
@ Sergey Dies ist historisch. /usr/(s)binwurden in der Regel von einem Netzwerk-Dateisystem eingehängt. Aus diesem Grund musste alles vorhanden sein, was zum Booten der Maschine benötigt wurde /(s)bin. Der größte Teil /usr/localwird jetzt für Programme verwendet, die Sie außerhalb des Paketmanagers installieren (was Sie nicht tun sollten).
Let_Me_Be
Für manuell installierte Programme, die Sie nicht mehr benötigen, führen Sie einfach ein reguläres Löschen durch (rm). / usr / local ist für maschinenspezifische Daten wie für Netzwerk-Boot-Systeme / usr in häufig einer Netzwerkfreigabe. @Let_Me_Be Das Installieren von Programmen von außerhalb des Paketmanagers ist vollkommen in Ordnung und kann oft erforderlich sein.
Lamar B
@Sergey: Wenn Sie zwei Computer haben, die vom selben Medium installiert wurden und später manuell eine Software zu einem dieser Computer hinzufügen, wird dies normalerweise in / usr / local gespeichert, da es lokal für diesen Computer ist und nicht Teil des "Standards". eine Reihe von Programmen, die vom Anbieter bereitgestellt werden. Wie andere bereits gesagt haben, wird diese historische Praxis heutzutage von Paketherstellern kaum noch beachtet. Ich nehme an, dass Software in den Standard-Repositorys eher als vom Anbieter bereitgestellte optionale Software als als vom Benutzer installierte lokale Anpassung behandelt wird.
RedGrittyBrick
3

Zeug in allen * / sbin-Verzeichnissen ist normalerweise nur für Systemadministratoren nützlich. Sie können sie von Ihrem PFAD fernhalten, wenn Sie ein normaler Benutzer sind.

Die verschiedenen Verzeichnisse sind wenig sinnvoll, wenn Sie einen einzelnen Unix-Rechner auf einer einzelnen Festplatte haben, aber sinnvoller, wenn Sie ein großes System und verschiedene Partitionen haben. Denken Sie daran, dass viele dieser Gewohnheiten in den 80er und 90er Jahren gemacht wurden, als die Systeme etwas anders waren.

/sbinneigt dazu, sehr klein zu sein. Dies sind Dienstprogramme, die Sie benötigen, wenn Sie wirklich abgespritzt sind. Sie würden dies mit / root und / lib auf eine minimale Root-Partition setzen. Die Dinge in / sbin waren früher alle statisch verknüpft, da dynamisch verknüpfte Apps unbrauchbar sind, wenn Ihre / usr-Partition überlastet ist. fsck ist hier und statisch verlinkt. Wenn Sie eine Abhängigkeit von / usr haben, können Sie / usr / offensichtlich nicht überprüfen. Natürlich, wenn Wurzelpartition abgespritzt wird, sind Sie sehr verschraubt. Aus diesem Grund ist dies eine so kleine Partition - verringern Sie die Wahrscheinlichkeit eines fehlerhaften Plattenblocks, indem Sie hier nur sehr wenige Blöcke verwenden.

/usr/sbinBinärdateien sind allgemeine Sysadmin-Tools, mit denen Sie mindestens in den Einzelbenutzermodus wechseln und alle Volumes bereitstellen können. Sie dürfen dynamisch verknüpft werden.

Die getrennten Partitionen für / sbin (also / sbin auf / partition) und / usr sind auch sinnvoller, wenn Sie sich daran erinnern, dass die Sicherung sowohl für die Zeit als auch für das Band sehr teuer war. Wenn sie sich auf separaten Partitionen befinden, können Sie sie anders planen.

/usr/localkann ein Netzwerk-Dateisystem sein. Daher werden lokal geschriebene Sysadmin-Tools, die von vielen Computern gemeinsam genutzt werden können, manchmal in / usr / local / sbin abgelegt. Offensichtlich können keine Netzwerk-Fixing-Utils dorthin gehen.

Wiederum machten viele Dinge auf großen Maschinen in einer Netzwerkumgebung auf verwalteten Maschinen mit mehreren Volumes mehr Sinn, weniger auf einer Linux-Maschine auf einer einzelnen Root-Partition.

Reiche Homolka
quelle
2

Sie sollten Ihre zweite Frage wirklich als separate Frage hier auf Superuser haben. Es hat nichts mit dem ersten zu tun.

Ja, Akten überall zu haben, ist zum Kotzen. Deshalb gibt es viele Verpackungslösungen. RedHat hat RPM erstellt, das überall verwendet wird. Solaris hatte ihr Paketformat. HP / UX hatte ihre und es gibt passende und viele andere Paketformate. Bewahren Sie die Dinge an den richtigen Stellen auf (/ usr / bin, / usr / lib), lassen Sie sie jedoch einfach hinzufügen und entfernen.

Für den Quellcode gab es Tools, mit denen Sie in einem Unterverzeichnis von / usr / local konfigurieren und installieren konnten und die Symlinks zu / usr / local / bin für Sie handhabten. Seit der großen Verbreitung von Pakettools ist dies weniger notwendig, und ich habe ihre Namen vergessen.

Einige Leute möchten in / opt / packagename installieren und dort alles zusammenhalten. Das Gute: Alles ist in einem Verzeichnis und eine Deinstallation ist rm -rf /opt/packagename. Der Nachteil dabei ist, dass man / opt / packagename / bin zum PATH aller hinzufügen muss und dass die Leute normalerweise nicht auf einer separaten Partition / opt setzen und die Root-Partition ausfüllen.

Reiche Homolka
quelle
1
RPM wird überall verwendet? Wäre es nicht der Wahrheit näher, zu sagen, dass das Debian-Format überall verwendet wird?
Iconoclast
0

Zur Beantwortung Ihrer zweiten Frage:
Üblicherweise werden Programme mit einem sogenannten Paketmanager verteilt . Ein Paketmanager holt normalerweise Binärpakete (Software, die für eine bestimmte Plattform kompiliert wurde) und wirft sie in Verzeichnisse (einige laden den Quellcode herunter, kompilieren ihn auf Ihrem Computer und installieren ihn). Auf diese Weise weiß der Paketmanager, wo sich die Dateien befinden, die zu einem bestimmten "Programm" (Paket) gehören, und wenn Sie das Paket entfernen möchten, kümmert sich der Paketmanager um die Bereinigung aller Daten.
Auch wenn Sie den Quellcode selbst mit kompilieren

make

und installiere es mit

make install

das kannst du normalerweise tun

make uninstall

Dadurch werden die Dateien aus dem Dateisystem gelöscht.

Matej Repinc
quelle
Die Deinstallation von make kann nur in dem Programmierer erfolgen, der diesen Prozess zur make-Datei hinzugefügt hat. Die Frage war, wie man diejenigen löscht, bei denen make uninstall nicht funktioniert.
Sergey
1
Richtig, aber ich denke, es ist ziemlich schwierig, ein ernstes Projekt ohne Deinstallation in makefile zu finden (hatte nie Probleme damit). Wenn Sie aus dem Quellcode kompilieren und makefile nicht deinstalliert haben, ist dies meines Erachtens keine einfache Möglichkeit, aber Sie können trotzdem ein Skript schreiben, das die make installAusgabe analysiert und die dort genannten Dateien löscht.
Matej Repinc