Wo ist ein guter permanenter Ort, um benutzerdefinierte Bash-Skripte zu installieren?

32

Ich bin dabei, "leiningen" zu installieren, ein Bash-Skript für die Programmiersprache clojure, das sehr nützlich ist, aber ich bin mir nicht sicher, wo es angebracht ist, ein ausführbares Skript unter Linux einzugeben System dauerhaft und stabil verfügbar.

Ich denke nicht, dass irgendwo in / home Sinn macht, aber ich weiß nicht, welches Verzeichnis / welche Verzeichnisse dafür verwendet werden sollen.

/ usr / teilen?

Kzqai
quelle
1
pathname.com/fhs/pub/fhs-2.3.html
Ignacio Vazquez-Abrams

Antworten:

45

(Hinweis: ~übersetzt wie /home/userin diesem Beitrag)

Persönlich stelle ich alle meine maßgeschneiderten Systemskripte /usr/local/binund alle meine persönlichen Bash-Skripte ein ~/bin. Sehr wenige Programme, die ich selbst installiere, befinden sich in einem /usr/local/binVerzeichnis, sodass es nicht sehr überladen ist und sich $PATHauf den meisten meiner Computer bereits in der Variablen befand.

Zum Hinzufügen /usr/local/binzu Ihrem Systempfad (falls noch nicht vorhanden) fügen Sie Folgendes hinzu /etc/profile:

PATH=$PATH:/usr/local/bin
export PATH

So fügen ~/binSie dem Pfad Ihres Benutzers Folgendes hinzu ~/.bash_profile:

PATH=$PATH:$HOME/bin
export PATH

Manchmal enthält die Standarddatei .bash_profileeine if-Anweisung, die automatisch hinzugefügt wird ~/bin, $PATHwenn sie vorhanden ist. Erstellen Sie also die ~/binund öffnen Sie ein neues Terminal, um zu prüfen, ob Ihre dies bereits tut.

Trey Hunner
quelle
Die BSDs tun dies standardmäßig.
Chris S
@ Chris: BSDs haben eine Menge Sachen in / usr / local / bin abgelegt
Dan Andreatta
Was ist der Unterschied zwischen Ihren Bash-Skripten und System-Skripten und gibt es einen Grund, warum Sie die beiden trennen?
Hashim
@Hashim Ich kann natürlich nicht für Trey sprechen, aber Tools, die Sie für Ihre persönlichen Bedürfnisse entwickeln, tendieren dazu, zu System-Tools zu "graduieren", wenn Sie feststellen, dass sie ein Problem lösen, mit dem andere Probleme haben, oder wenn Sie eine andere systemweite Installation haben, die davon abhängt auf einem dieser Werkzeuge. Ich vermute, dass die Schwelle für die Installation eines Systems für die meisten Programmierer ziemlich hoch ist. Außerdem muss ein Tool, das Sie freigeben, über Dokumentation usw. verfügen, die von vielen Entwicklern selten anders geschrieben wird.
Tripleee
Abgesehen davon ist exporteine Variable nicht mehrmals erforderlich (und wahrscheinlich ist Ihr System bereits PATHfür den Export markiert , sodass Sie dies überhaupt nicht selbst tun müssen).
Tripleee
9

/ usr / local / ist wirklich der richtige Ort, während / opt wirklich für Anwendungen von Drittanbietern ist; "/ opt ist für die Installation von Add-On-Anwendungssoftwarepaketen reserviert." Dies ist Teil des Filesystem Hierarchy Standard.

Weitere Informationen zu / opt finden Sie unter http://www.pathname.com/fhs/pub/fhs-2.3.html .

Für / usr / local / ist dies "vom Systemadministrator zu verwenden". Vergiss nur nicht, was da drin ist - dokumentiere es.

Jamieson Becker
quelle
Der von Ihnen angegebene Link lautet "Die Verzeichnisse / opt / bin, / opt / doc, / opt / include, / opt / info, / opt / lib und / opt / man sind für die Verwendung durch den lokalen Systemadministrator reserviert." Es gibt nichts über / usr / local. Nur / usr / local / share wird dort erwähnt. Auf der anderen Seite werden kompilierte Programme normalerweise unter Linux in / usr / local installiert. Denken Sie nicht, dass / opt / bin der bessere Ort für den Systemadministrator ist?
Raacer
1
@raacer Meine Erfahrung ist, dass /usr/local- wie der Name schon sagt - dies für den lokalen Administrator gilt und /optfür Dinge, die nicht offiziell vertrieben werden, wie kommerzielle Software von Drittanbietern, die durch einen ähnlichen Prozess verwaltet werden (möglicherweise durch ein Upgrade von ersetzt oder gelöscht) Upstream), aber nicht vom Paketmanager der Distribution verwaltet oder möglicherweise tatsächlich als RPM oder .debPakete verteilt, aber nicht gemäß den Richtlinien und Konventionen der Distribution organisiert und verpackt.
Tripleee
1
@raacer Es gibt einen separaten Abschnitt zu einem /usr/localspäteren Zeitpunkt im Dokument.
Tripleee
@raacer Tripleee ist richtig. Hier ist der Link: pathname.com/fhs/pub/… .. Richtige kompilierte Programme (normalerweise Open Source), die speziell für dieses System kompiliert / erstellt oder von mehreren Systemen gemeinsam genutzt werden (jedoch nicht Teil der normalen Betriebssystemverpackung / -verteilung). aber die stark von gemeinsam genutzten Bibliotheken abhängen) sollten in / usr / local installiert werden (spiegelt im Grunde die Hierarchie von / usr wider). Drittanbieter-Software, die auf einem möglicherweise anderen System mit möglicherweise eigener Bibliotheksunterstützung kompiliert wurde (z. B. Firefox, Userify), sollte in / opt aufgenommen werden.
Jamieson Becker
3

Historisch gesehen würden Sie so etwas wie / opt verwenden. Alles ist in Ordnung, solange es in $ PATH für die Benutzer, die es haben sollen, aktualisiert wird (daher ist alles in / home eine schlechte Idee).

Tony
quelle
2

/usr/share/clojureEs scheint ein üblicher Ort zu sein, um die Binärdateien und Bibliotheken von clojure abzulegen - warum ich es nicht weiß, scheint es eine Selbstverständlichkeit zu sein /usr/local/share/clojure-, also sitescheint es in Ordnung , ein Unterverzeichnis für diese Bash-Skripte zu erstellen .

Der allgemeine Punkt ist, dass es sinnvoller ist, Skripte nach Funktionen zu organisieren und nicht alle Bash-Skripte an derselben Stelle zu haben.

Charles Stewart
quelle
1
Hierfür gibt es einige Probleme /usr/share. Zuallererst sharebedeutet dies architekturunabhängige Dateien (dh die von allen Architekturen gemeinsam genutzt werden). Aus diesem Grund gehören Bibliotheken und ausführbare Dateien nicht in ein shareVerzeichnis. Zweitens, außer von /usr/localnichts anderem, als dass der Distributionspaket-Manager jemals schreiben sollte /usr.
Kasperd
2

/usr/localIch glaube, es gibt einige Verwirrung um die Bedeutung von "lokal".

So wie ich es verstehe, bedeutet "lokal" nicht "von / auf dem lokalen Computer", sondern "spezifisch für den lokalen Computer", der von / auf dem lokalen Computer stammen kann oder nicht.

Hatebit
quelle