Wo soll eine lokale ausführbare Datei abgelegt werden?


62

Ich habe eine ausführbare Datei für den Perforce-Versionskontroll-Client ( p4). Ich kann es nicht einfügen, /opt/localda ich keine Root-Rechte habe. Gibt es einen Standardstandort, unter dem es platziert werden muss $HOME?

Verfügt die Dateisystemhierarchie über eine Konvention, die besagt, dass lokale ausführbare Dateien / Binärdateien abgelegt werden müssen $HOME/bin?

Ich konnte eine solche Konvention im Wikipedia-Artikel für die FHS nicht finden .

Wenn es tatsächlich eine Konvention gibt, muss ich dann explizit den Pfad zum $HOME/binVerzeichnis oder den Speicherort des binVerzeichnisses angeben?

Antworten:


64

Wenn eine nicht auf dem System installierte und verwaltete Binärdatei für mehrere Benutzer systemweit zugänglich sein soll, sollte sie im Allgemeinen von einem Administrator abgelegt werden /usr/local/bin. Darunter befindet sich eine vollständige Hierarchie /usr/local, die in der Regel für lokal kompilierte und installierte Softwarepakete verwendet wird.

Wenn Sie der einzige Benutzer einer Binärdatei sind, $HOME/binist die Installation an der richtigen Position, da Sie sie selbst installieren können und der einzige Verbraucher sind. Wenn Sie ein Softwarepaket aus dem Quellcode kompilieren, empfiehlt es sich auch, eine teilweise oder vollständige lokale Hierarchie in Ihrem $HOMEVerzeichnis zu erstellen . Die vollständige lokale Hierarchie würde so aussehen.

  • $HOME/bin Lokale Binärdateien
  • $HOME/etc Hostspezifische Systemkonfiguration für lokale Binärdateien
  • $HOME/games Lokale Spiel-Binärdateien
  • $HOME/include Lokale C-Header-Dateien
  • $HOME/lib Lokale Bibliotheken
  • $HOME/lib64 Lokale 64-Bit-Bibliotheken
  • $HOME/man Lokale Online-Handbücher
  • $HOME/sbin Lokale Systembinärdateien
  • $HOME/share Lokale architekturunabhängige Hierarchie
  • $HOME/src Lokaler Quellcode

Während der Ausführung configuresollten Sie Ihre lokale Hierarchie für die Installation definieren, indem Sie $HOMEdas Präfix für die Installationsstandards angeben.

./configure --prefix=$HOME

Nach der make && make installAusführung werden die kompilierten Binärdateien, Pakete, Manpages und Bibliotheken in Ihrer $HOMElokalen Hierarchie installiert . Wenn Sie keine $HOMElokale Hierarchie manuell erstellt haben , make installwerden die vom Softwarepaket benötigten Verzeichnisse erstellt.

Einmal installiert in $HOME/bin, können Sie entweder $HOME/binIhre hinzufügen $PATHoder die Binärdatei mit der absoluten aufrufen $PATH. Einige Distributionen sind standardmäßig $HOME/binin Ihrem $PATHPaket enthalten. Sie können dies entweder testen, indem Sie prüfen echo $PATH, ob $HOME/bines vorhanden ist, oder die Binärdatei $HOME/bineingeben und ausführen which binaryname. Wenn es mit zurückkommt $HOME/bin/binaryname, befindet es sich standardmäßig in Ihrem $ PATH.


5
solange sich $ HOME nicht auf einem von noexec gemounteten Dateisystem befindet. / tmp / wird normalerweise auch noexec gemountet.
ewanm89

3
Dies ist richtig, es ist Teil des Filesystem Hierarchy Standard (FHS). pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Patrick

29
Ich würde die Verwendung nicht empfehlen $HOME. Dies überflutet Ihr Home-Verzeichnis mit zahlreichen Verzeichnissen, an denen Sie überhaupt nicht interessiert sind. Wer will haben man, libetc. in denen Hauptdir? Ich würde lieber die Hierarchie unten erstellen $HOME/binoder $HOME/local. Das fügt Ihrem Home-Verzeichnis nur ein Unterverzeichnis hinzu, anstatt zehn. Das PATHkann einfach angepasst werden, um $HOME/bin/binoder einzuschließen $HOME/local/bin.
Marco

18
Eine Möglichkeit besteht darin, $ HOME / .local / {bin, lib, etc.} Zu verwenden, wie es z. B. in der XDG-basierten Version ( standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ) und in Python ( python.org/dev/peps/pep-0370 )
janneb

4
@janneb Die XDG- Basisverzeichnisspezifikation, auf die Sie sich nur beziehen $HOME/.local/share(Version 0.7, 24. November 2010).
Piotr Dobrogost

27

Wie bereits erwähnt , /usr/localist es als Präfix für Software gedacht, die vom Systemadministrator installiert wurde, während /usres für Software verwendet werden sollte, die aus den Paketen der Distribution installiert wurde.

Die Idee dahinter ist, Konflikte mit verteilter Software (wie rpmund debPaketen) zu vermeiden und dem Administrator die volle Kontrolle über das "lokale" Präfix zu geben.

Dies bedeutet, dass ein Administrator angepasste kompilierte Software installieren kann, während er weiterhin eine Distribution wie Debian verwendet.

Aus der FHS

In / oder / usr abgelegte Software kann durch System-Upgrades überschrieben werden (wir empfehlen jedoch, dass Distributionen unter diesen Umständen keine Daten in / etc überschreiben). Aus diesem Grund darf lokale Software nicht ohne Grund außerhalb von / usr / local platziert werden.

Uther empfiehlt, bei $HOMEder Installation benutzerspezifischer Software das Präfix zu verwenden, da dies sicherstellt, dass Sie über Schreibrechte verfügen. Persönlich bin ich der Meinung $HOME/.local, eine elegantere Lösung zu sein, da hierdurch vermieden wird, dass Ihr (hoffentlich) schönes und aufgeräumtes Home-Verzeichnis überfüllt wird!

$HOME/.local/sharewird bereits in der XDG-Basisverzeichnisspezifikation von freedesktop.org verwendet , daher ist es nicht sehr schwierig, sich vorzustellen, $HOME/.local/binwie Sie $PATHein hinzufügen und ein $HOME/.local/libusw. erstellen, während Sie gerade dabei sind.

Wenn Sie nicht möchten, dass Ihr Präfix ein verstecktes Verzeichnis ist, können Sie auch leicht einen symbolischen Link dazu erstellen, z. B .:

ln -s .local ~/local

Randnotiz

Es ist erwähnenswert, dass .config(nicht .local/etc) der Standardwert $XDG_CONFIG_HOMEfür benutzerspezifische Konfigurationsdateien ist. Ich sollte auch darauf hinweisen, dass leider ein großer Teil der Software die XDG ignoriert und Konfigurationsdateien erstellt, wo immer sie möchten (normalerweise im Stammverzeichnis von $HOME). Beachten Sie auch, dass $XDG_CONFIG_HOMEdiese Option möglicherweise deaktiviert ist, wenn die Standardeinstellung $HOME/.configgewünscht wird.

Seltsamerweise gibt es kein Verzeichnis, das für die Standardkonfigurationsdateien einer Distribution reserviert ist. Es gibt also keine Möglichkeit, festzustellen, ob eine Datei in /etcder Distribution bereitgestellt oder vom Systemadministrator bearbeitet wurde.


1
Ich kann .localin der FHS keine Erwähnung finden
Daniel Serodio

@DanielSerodio In der XDG-Verzeichnisspezifikation, einem neueren Standard, gewinnt er an Bedeutung. Siehe unix.stackexchange.com/questions/316765/... und superuser.com/questions/1170793/...
ivan_pozdeev

Diese Nebenbemerkung /etcist verdammt ärgerlich, wenn ein Server mit mehreren Administratoren verwaltet wird - es ist ziemlich schwierig, benutzerdefinierte Änderungen an Conf-Dateien nachzuverfolgen.
naught101
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.