Verwenden Sie für Software, die nur Sie benötigen, Ihr Basisverzeichnis anstelle von /usr/local
.
Anstatt den Besitz von /usr/local
Befehlen zu ändern oder Befehle als root ausführen zu müssen, wenn Sie dies nicht möchten, sollten Sie Ihre Builds nur so konfigurieren, dass sie in Ihrem Ausgangsverzeichnis installiert werden, anstatt /usr/local
. Hiermit werden alle potenziellen Probleme beim Ändern des Eigentums an behoben /usr/local
, einschließlich der Art bin
und Weise, in der sich die sbin
Verzeichnisse und Unterverzeichnisse im root
Pfad befinden.
Wenn Sie anderen Benutzern erlauben müssen, Ihre Software auszuführen, können Sie ihnen Zugriff gewähren. In der Tat werden sie wahrscheinlich bereits in der Lage sein, da Ihr Home-Verzeichnis standardmäßig über einen zulässigen Lese- und Ausführungszugriff verfügt . (Wenn Sie das nicht möchten, können Sie es ganz einfach ändern, indem chmod
Sie die Dateien oder Verzeichnisse verwenden, die Sie als privat kennzeichnen möchten, und möglicherweise auch Ihre ändern umask
.)
Wenn die Software in Ihrem Ausgangsverzeichnis installiert ist, /usr/local/bin
werden stattdessen Binärdateien verwendet, die eingegangen wären . Sie erhalten andere Unterverzeichnisse Ihres Home-Verzeichnisses, die den Unterverzeichnissen der von Ihnen installierten Software entsprechen. Dies geschieht normalerweise automatisch, wenn Sie Software aus dem Quellcode installieren./home/username/bin
/usr/local
Konfigurieren Ihrer Builds
Die meiste Software, die Sie aus Quellcode erstellen, hat einen Schritt, in dem Sie Folgendes ausführen:
./configure
Für die große Mehrheit der Software, die mit einem configure
Skript geliefert wird, das so ausgeführt werden kann, wird standardmäßig der Build für die Installation konfiguriert, /usr/local
wenn Sie ihn schließlich ausführen sudo make install
, um ihn zu installieren. Der Grund ist, dass es implizit gleichbedeutend mit dem Ausführen von:
./configure --prefix=/usr/local
Verwenden Sie stattdessen Folgendes, um einen Build für die Installation in Ihrem Ausgangsverzeichnis zu konfigurieren:
./configure --prefix="$HOME"
In der Praxis enthalten Homeverzeichnis-Pfade in Ubuntu keine Leerzeichen, andere Leerzeichen oder andere Zeichen, die von der Shell speziell behandelt *
werden. Wenn Sie also Ihr Benutzerkonto nicht recht merkwürdig eingerichtet haben, können Sie einfach Folgendes eingeben:
./configure --prefix=$HOME
(Ich empfehle jedoch nicht, sich daran zu gewöhnen, Skripte zu schreiben . Bei einigen anderen Betriebssystemen, wie z. B. macOS, ist es weniger ungewöhnlich, dass die Pfade zu den Basisverzeichnissen der Benutzer Leerzeichen enthalten.)
Wenn Sie möchten, können Sie auch Ihren vollständigen Pfad zum Basisverzeichnis eingeben:
./configure --prefix=/home/username
(Ersetzen username
Sie dies natürlich durch Ihren tatsächlichen Benutzernamen. Wenn Ihr Ausgangsverzeichnis aus irgendeinem Grund nicht vorhanden /home
ist, müssen Sie es entsprechend anpassen.)
Installieren Ihrer Builds
Nachdem Sie ausgeführt haben make
, sind Sie möglicherweise an das Ausführen gewöhnt sudo make install
, aber wenn Sie in Ihrem eigenen Ausgangsverzeichnis installieren, müssen Sie es nicht als Root ausführen, sodass Sie es beenden können und solltensudo
. Lauf einfach:
make install
Ebenso für Software, die ein uninstall
Ziel unterstützt :
make uninstall
Dies ist genau das, wonach Sie gefragt haben ... nur in Ihrem Home-Verzeichnis, nicht /usr/local
.
Ausführen Ihrer Programme
Wahrscheinlich ist das bin
Unterverzeichnis Ihres Home-Verzeichnisses entweder:
- schon in deinem
$PATH
, oder
- wird in Ihrem sein,
$PATH
wenn Sie sich nur aus- und wieder anmelden.
Der Grund dafür ist, dass die .profile
Datei in Ihrem Ausgangsverzeichnis , die Befehle enthält, die beim Anmelden ausgeführt werden, diese standardmäßig für Benutzerkonten enthält, die in den meisten Versionen von Ubuntu erstellt wurden (einschließlich des ersten Administratorkontos, das beim Installieren des Betriebssystems erstellt wurde):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Dieser Code wird ausgeführt, wenn Sie sich anmelden (weil er angemeldet ist .profile
) und legt Ihr persönliches bin
Verzeichnis $PATH
nur dann ab, wenn es zu diesem Zeitpunkt vorhanden ist. Deshalb müssen Sie sich möglicherweise abmelden und wieder anmelden.
Ältere Releases wie Ubuntu 14.04 sowie neuere Releases wie Ubuntu 17.10 sind ebenfalls enthalten. Ubuntu 16.04, das zum Zeitpunkt des Schreibens wahrscheinlich beliebteste Release, hat jedoch stattdessen Folgendes:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Das fügt einfach das bin
Unterverzeichnis Ihres Home-Verzeichnisses - sowie das .local/bin
Unterverzeichnis - zu Ihrem hinzu $PATH
, ohne zu überprüfen, ob diese Verzeichnisse tatsächlich existieren. Wenn Sie also 16.04 verwenden oder ein Upgrade von einem System durchführen, das 16.04 war, als Ihr Benutzerkonto erstellt wurde, befindet sich das bin
Unterverzeichnis Ihres Home-Verzeichnisses wahrscheinlich bereits in Ihrem $PATH
.
Ihre .profile
Datei wird aus dem /etc/skel
Verzeichnis kopiert, wenn Ihr Benutzerkonto erstellt wird. Wenn Ihr Benutzerkonto mit einer älteren Ubuntu-Version erstellt wurde, hat es diese Version von erhalten .profile
und wurde für Ihr Benutzerkonto durch ein Upgrade auf eine neuere Version nicht geändert.
Sobald sich das bin
Unterverzeichnis Ihres Home-Verzeichnisses in Ihrem befindet $PATH
, können Sie Programme ausführen, deren ausführbare Dateien dort installiert sind, indem Sie einfach deren Namen eingeben, genau wie Sie es mit Programmen tun könnten, die vom Ubuntu-Paketmanager installiert oder in diesem installiert wurden /usr/local
.
Die .local
Option
Möglicherweise haben Sie bemerkt, dass die Standarddatei .profile
für Benutzerkonten, die in einigen Ubuntu-Versionen erstellt wurden, einschließlich 16.04, wie oben beschrieben, nicht nur $HOME/bin
Ihren Pfad erweitert, sondern auch $HOME/.local/bin
. Wenn Sie .profile
das nicht hinzufügen, aber möchten , können Sie es einfach bearbeiten.
Obwohl häufig zum Speichern von Einstellungen und zwischengespeicherten Daten verwendet , können Sie Software auch im .local
Unterverzeichnis Ihres Basisverzeichnisses installieren . Sie sollten sich dabei ungehemmt fühlen, da dies in Bezug auf Benutzerfreundlichkeit und Sicherheit --prefix="$HOME/.local"
ähnlich ist wie --prefix="$HOME"
.
Denken Sie daran, dass Dateien und Verzeichnisse, die mit beginnen .
, in grafischen Dateibrowsern nicht standardmäßig angezeigt werden (verwenden Sie Ctrl+, Hum sie ein- und auszublenden) oder über den ls
Befehl (übergeben Sie das Flag -A
oder -a
, um sie anzuzeigen ). Dies ist möglicherweise nicht das, was Sie möchten, oder es ist möglicherweise genau das, was Sie möchten. Dies ist eine Frage der persönlichen Präferenz.
Ich habe jedoch beobachtet, dass einige automatisierte quellbasierte Paketmanager, die Software im eigenen Heimverzeichnis erstellen und installieren, diese verwenden $HOME/.local
. Ich weiß nicht genau, wie häufig dies vorkommt - ich hoffe, dass ich es weiter untersuchen und diese Antwort aktualisieren kann -, aber vielleicht bevorzugen Sie es, sie nur $HOME
für manuell kompilierte Aufgaben zu verwenden. Auf diese Weise wird klar, woher die Dinge kamen. Und wenn es zu einer Kollision kommt, ist es wahrscheinlich, dass die Software weiterhin akzeptabel koexistiert.
Sie können auch absichtlich Software in $HOME/.local
und andere Software in installieren $HOME
. Es liegt an dir. Das bin
Verzeichnis, das zuerst in Ihrer $PATH
Umgebungsvariablen angezeigt wird, ist dasjenige, von dem aus ein Befehl ausgeführt wird, falls in beiden Befehlen derselbe Name vorhanden ist.
Kredit geht an Zanna und Videonauth für den Hinweis auf Fehler in einer früheren Version dieser Antwort in Bezug auf die Ubuntu - Releases , die Standard - Code in .profile
und hilft mir zu korrigieren sie (siehe auch hier ).