Wo soll ich meine Bash-Skripte ablegen?

15

Ich habe ein paar sehr einfache Bash-Skripte, die ich für Dinge zusammengestellt habe, die ich regelmäßig mache. Eine davon ist das Ausführen von Duplicity, um meine Sicherungsaufgaben auszuführen. Nichts Kluges, nur ein Haufen von wenn ... dann Aussagen wirklich. Da dies als sudo ausgeführt werden muss, ist es empfehlenswert, mein Skript in / usr / bin (oder an einem anderen Ort in PATH) abzulegen, das in root.root und in chmod in 700 angegeben ist.

Hutmacher
quelle
Ich würde sagen, verwenden gitSie diese Option, um Ihre Skripte einer Versionskontrolle zu unterziehen, lokale Kopien der Git-Repos an einer beliebigen Stelle zu platzieren ~und die Skripte dann mit Symlinks zu verknüpfen ~/bin.
Edwinksl
Du meinst gitwie githubin den Wolken?
WinEunuuchs2Unix
2
@ WinEunuuchs2Unix Wenn Sie möchten, dass Ihre Skripte anderen Benutzern zur Verfügung stehen, sollten Sie sie einfügen /usr/local/bin. Ansonsten würde ich sagen einfach reinstecken ~/bin. Ihre eigenen Skripte in beiden Verzeichnissen sollten beim Upgrade sicher sein.
Edwinksl
2
Legen Sie sie wie oben in / usr / local / bin ab. Stellen Sie einfach sicher, dass Ihre Skriptnamen eindeutig und nicht ein vorhandener Linux-Befehl / Binärname sind. Ich selbst füge am Ende eines Skripts, das ich erstelle, einfach eine Zahl hinzu, da ich noch keine Linux-Namen gesehen habe, die mit einer Zahl enden. (um nicht zu sagen, einige wirklich obskure können ...
Doug
1
@edwinksl Fast ein Jahr später muss ich sagen, dass dies ~/binder beste Ort für die meisten Skripte ist, da Sie sie nicht so sudobearbeiten müssen, wie Sie es tun, wenn sie in gespeichert sind /usr/local/bin.
WinEunuuchs2Unix

Antworten:

3

Ich speichere meine eigenen Skripte in /opt/scripts.

Wenn Ihr Skript von jedem Systembenutzer ausgeführt werden soll, können Sie eine symbolische Verknüpfung zu erstellen /usr/bin.

Wenn nur root das Skript ausführen soll, können Sie eine symbolische Verknüpfung zu erstellen /usr/sbin.

Befehl zum Hinzufügen eines symbolischen Links in /usr/bin/:

ln -s /opt/scripts/<script> /usr/bin/

Sie können das Skript ausführen, da /usr/bin/es sich standardmäßig in Ihrem PATH befindet .

SynPrime
quelle
1
Ich würde empfehlen, anstatt /usr/binals Ziel für Benutzer / lokales Shell-Skript zu verwenden, dass es /usr/local/bin(oder /opt/bin) gemäß Dateisystem-Hierarchie-Standard - Debian-Wiki ist , um Konflikte zu vermeiden (in den meisten Fällen möchten Sie, dass die von Ubuntu bereitgestellten Skripte Vorrang haben).
Shalomb
Auf den meisten Systemen wird dies /usr/local/binüberschrieben /usr/bin, wie später im Pfad erläutert wird. Dies ist mit Absicht so, da das System keine Dateien dort ablegt. Sie können also Dateien dort ablegen, die die vom System bereitgestellten überschreiben MÜSSEN.
Allo
Ich habe dies als die richtige Antwort markiert, obwohl beide Antworten in Ordnung zu sein scheinen. Grund dafür ist, dass ich mir die FHS-Dokumente angesehen habe und mir ein Bild davon gemacht habe, dass / opt genau für diesen Zweck zur Verfügung steht. Ich mag die Idee, dass sie einfach symbolisch mit meinen Skripten in / usr / local / bin verlinkt werden. Danke für all die Hinweise.
Hutmacher
17

Wenn kein anderer Benutzer als Sie diese Skripte verwendet:

Dann können Sie sie behalten /home/$USER/bin. Erstellen Sie den binOrdner, wenn er nicht vorhanden ist, und verschieben Sie die Dateien dorthin. Der Ordner bin in Ihrem Zuhause wird automatisch zur Umgebungsvariablen PATH hinzugefügt. Der Code befindet sich in .profile:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Siehe Wie füge ich / home / username / bin zu $ ​​PATH hinzu?

Oder in einigen Systemen kann es sein, in .bashrc:

export PATH=${HOME}/bin/:${HOME}/.local/bin:${PATH}

Danke Elder Geek

Wenn dieses Skript von anderen Benutzern verwendet werden soll:

Dann sind entweder /usr/local/binoder /opt/bingute Möglichkeiten. Siehe Gibt es einen Standardspeicherort für benutzerdefinierte Linux-Skripts?

Hoffe das hilft

user68186
quelle
3

Ich habe ein Verzeichnis, in dem ich meine lokalen Tools oder Dinge, die ich auf verschiedenen Computern bereitstelle, schnell sammle /usr/local/apollo. Es gibt abzweigt dieses Verzeichnis für flags, binund logs.

Für die Anwendungen, die ich außerhalb der Standard- apt-getRepositorys herunterlade und installiere, werden /opt/ein Verzeichnis mit dem Namen der Anwendung sowie ein weiteres Unterverzeichnis für die jeweilige Version der Anwendung erstellt. Auf diese Weise wird meine kompilierte Version einer Anwendung mit der verteilten Version in Konflikt stehen vlcoder eclipsenicht.

Ich benutze /optes so, wie es im Grunde genommen offiziell entworfen wurde.

By the way die Verzeichnisse /usr/local/bin, /usr/local/apollound /optüberlebt eine neue Betriebssystemversion Installation überschreiben.

LD James
quelle
1
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binMir gefällt, dass /usr/local/bines auf dem Weg bereits eine Sache weniger gibt, an die man sich erinnern muss. Ich mag deine Methode, die /opt/program/versionich für Kernel-Sachen verwenden kann, die ich wie EnhanceIO bekomme und kompiliere, wo sie Dinge zwischen Kernel-Versionen ändern. Ist /apolloeine Mondlandung ein persönlicher Favorit oder hat sie Ubuntu-Bedeutung?
WinEunuuchs2Unix
Was ist der Unterschied zwischen /usr/local/binund usr/local/sbin, dass letzteres bei Upgrades zerstört wird?
WinEunuuchs2Unix
Das Installationsprogramm überprüft die verwendeten Verzeichnisse. Es erstellt bequemerweise /usr/localVerzeichnisse, fügt aber nichts in eines von ihnen ein. Diese Verzeichnisse werden vom Benutzer ausgefüllt. Bei vielen Quellprogrammen außerhalb der Repositorys kann der Benutzer auswählen, wohin die Installation erfolgen soll. Die Standardeinstellungen in den Konfigurationsdateien sind /usr/local/bin. Aufgrund der Häufigkeit, mit der diese Verzeichnisse verwendet werden, sind sie standardmäßig im Pfad des Benutzers enthalten. Standardmäßig prüft das System, ~/bin ob es existiert, und fügt es dem Pfad hinzu.
LD James
Sie meinen, das System prüft ~/binwährend der Installation oder bei jedem Start? Was ist der Unterschied zwischen sbinund bin? Sie scheinen nebeneinander zu existieren. Es muss Quasi-Regeln geben, die Sie je nach Programmtyp auswählen, oder?
WinEunuuchs2Unix
1
@ WinEunuuchs2Unix Auf dem ~/binPfad ... wird während der Installation nicht hinzugefügt. Das System überprüft es bei jedem Login und fügt es dem $ PATH hinzu, falls es beim Login existiert. Schauen Sie sich die letzten beiden Zeilen Ihrer ~/.profileEinstellungen an.
LD James