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?
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.
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.
@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.
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.
Diese Nebenbemerkung /etcist verdammt ärgerlich, wenn ein Server mit mehreren Administratoren verwaltet wird - es ist ziemlich schwierig, benutzerdefinierte Änderungen an Conf-Dateien nachzuverfolgen.
$HOME
. Dies überflutet Ihr Home-Verzeichnis mit zahlreichen Verzeichnissen, an denen Sie überhaupt nicht interessiert sind. Wer will habenman
,lib
etc. in denen Hauptdir? Ich würde lieber die Hierarchie unten erstellen$HOME/bin
oder$HOME/local
. Das fügt Ihrem Home-Verzeichnis nur ein Unterverzeichnis hinzu, anstatt zehn. DasPATH
kann einfach angepasst werden, um$HOME/bin/bin
oder einzuschließen$HOME/local/bin
.$HOME/.local/share
(Version 0.7, 24. November 2010).Wie bereits erwähnt ,
/usr/local
ist es als Präfix für Software gedacht, die vom Systemadministrator installiert wurde, während/usr
es für Software verwendet werden sollte, die aus den Paketen der Distribution installiert wurde.Die Idee dahinter ist, Konflikte mit verteilter Software (wie
rpm
unddeb
Paketen) 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.
Uther empfiehlt, bei
$HOME
der 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/share
wird bereits in der XDG-Basisverzeichnisspezifikation von freedesktop.org verwendet , daher ist es nicht sehr schwierig, sich vorzustellen,$HOME/.local/bin
wie Sie$PATH
ein hinzufügen und ein$HOME/.local/lib
usw. 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 .:
Randnotiz
Es ist erwähnenswert, dass
.config
(nicht.local/etc
) der Standardwert$XDG_CONFIG_HOME
fü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_HOME
diese Option möglicherweise deaktiviert ist, wenn die Standardeinstellung$HOME/.config
gewü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
/etc
der Distribution bereitgestellt oder vom Systemadministrator bearbeitet wurde.quelle
.local
in der FHS keine Erwähnung finden/etc
ist verdammt ärgerlich, wenn ein Server mit mehreren Administratoren verwaltet wird - es ist ziemlich schwierig, benutzerdefinierte Änderungen an Conf-Dateien nachzuverfolgen.