Verwenden Sie für Software, die nur Sie benötigen, Ihr Basisverzeichnis anstelle von /usr/local.
Anstatt den Besitz von /usr/localBefehlen 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 binund Weise, in der sich die sbinVerzeichnisse und Unterverzeichnisse im rootPfad 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 chmodSie 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/binwerden 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 configureSkript geliefert wird, das so ausgeführt werden kann, wird standardmäßig der Build für die Installation konfiguriert, /usr/localwenn 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 usernameSie dies natürlich durch Ihren tatsächlichen Benutzernamen. Wenn Ihr Ausgangsverzeichnis aus irgendeinem Grund nicht vorhanden /homeist, 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 uninstallZiel 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 binUnterverzeichnis Ihres Home-Verzeichnisses entweder:
- schon in deinem
$PATH, oder
- wird in Ihrem sein,
$PATHwenn Sie sich nur aus- und wieder anmelden.
Der Grund dafür ist, dass die .profileDatei 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 binVerzeichnis $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 binUnterverzeichnis Ihres Home-Verzeichnisses - sowie das .local/binUnterverzeichnis - 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 binUnterverzeichnis Ihres Home-Verzeichnisses wahrscheinlich bereits in Ihrem $PATH.
Ihre .profileDatei wird aus dem /etc/skelVerzeichnis kopiert, wenn Ihr Benutzerkonto erstellt wird. Wenn Ihr Benutzerkonto mit einer älteren Ubuntu-Version erstellt wurde, hat es diese Version von erhalten .profileund wurde für Ihr Benutzerkonto durch ein Upgrade auf eine neuere Version nicht geändert.
Sobald sich das binUnterverzeichnis 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 .localOption
Möglicherweise haben Sie bemerkt, dass die Standarddatei .profilefür Benutzerkonten, die in einigen Ubuntu-Versionen erstellt wurden, einschließlich 16.04, wie oben beschrieben, nicht nur $HOME/binIhren Pfad erweitert, sondern auch $HOME/.local/bin. Wenn Sie .profiledas 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 .localUnterverzeichnis 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 lsBefehl (übergeben Sie das Flag -Aoder -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 $HOMEfü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/.localund andere Software in installieren $HOME. Es liegt an dir. Das binVerzeichnis, das zuerst in Ihrer $PATHUmgebungsvariablen 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 .profileund hilft mir zu korrigieren sie (siehe auch hier ).