Où dois-je mettre mes scripts bash

15

J'ai quelques scripts bash très simples que j'ai bricolé pour des choses que je fais régulièrement. L'un d'eux consiste à exécuter la duplicité pour effectuer mes tâches de sauvegarde. Rien d'intelligent juste un tas de si .. alors des déclarations vraiment. Comme cela doit être exécuté comme sudo, serait-il préférable de placer mon script dans / usr / bin (ou tout autre emplacement dans PATH), affiché dans root.root et chmod dans 700?

chapelier
la source
Je dirais utiliser gitpour contrôler la version de vos scripts, placer des copies locales du dépôt git quelque part dans lequel vous aimez ~, puis créer un lien symbolique entre les scripts ~/bin.
edwinksl
Tu veux dire gitcomme githubdans les nuages?
WinEunuuchs2Unix
2
@ WinEunuuchs2Unix Si vous voulez que vos scripts soient disponibles pour d'autres utilisateurs, vous devez les mettre /usr/local/bin. Sinon, je dirais juste les mettre ~/bin. Vos propres scripts dans les deux répertoires doivent être en sécurité lors de la mise à niveau.
edwinksl
2
Comme ci-dessus, placez-les dans / usr / local / bin. Assurez-vous simplement que vos noms de script sont uniques et pas un nom de commande / binaire linux existant. Moi-même, je viens d'ajouter un numéro à la fin de tout script que je crée car je n'ai vu aucun nom Linux préexistant se terminer par un nombre. (pour ne pas dire que certains vraiment obscurs peuvent ...
doug
1
@edwinksl Près d'un an plus tard, je dois dire que ~/binc'est le meilleur endroit pour la plupart des scripts, car vous n'avez pas besoin sudode les modifier comme vous le faites lorsqu'ils sont stockés dans /usr/local/bin.
WinEunuuchs2Unix

Réponses:

3

J'enregistre mes propres scripts dans /opt/scripts.

Si votre script doit être exécutable par chaque utilisateur du système, vous pouvez créer un lien symbolique vers /usr/bin.

Si seul root doit exécuter le script, vous pouvez créer un lien symbolique vers /usr/sbin.

Commande pour ajouter un lien symbolique dans /usr/bin/:

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

Vous pouvez exécuter le script, car se /usr/bin/trouve par défaut dans votre PATH .

SynPrime
la source
1
Je recommanderais qu'au lieu d'utiliser /usr/bincomme cible pour le script shell utilisateur / local - que ce soit /usr/local/bin(ou /opt/bin) selon la norme de hiérarchie du système de fichiers - Debian Wiki pour éviter les conflits (la plupart du temps, vous voulez que les scripts fournis par Ubuntu aient priorité).
shalomb
Sur la plupart des systèmes, les /usr/local/binremplacements /usr/bin, car ils viennent plus tard dans le chemin. C'est exprès, car le système n'y place pas de fichiers, vous pouvez donc y placer des fichiers, qui DEVRAIENT remplacer ceux fournis par le système.
allo
J'ai marqué cela comme la bonne réponse, même si les deux réponses semblent correctes. La raison en est que j'ai fini par jeter un œil aux documents FHS et que je suis reparti avec la compréhension que / opt est là pour cela. J'aime l'idée qu'ils soient simplement liés à mes scripts dans / usr / local / bin. Merci pour tous les conseils.
Hatterman
17

Si aucun autre utilisateur que vous n'utilise ces scripts:

Ensuite, vous pouvez les garder /home/$USER/bin. Créez le bindossier s'il n'y est pas et déplacez-y les fichiers. Le dossier bin de votre domicile sera automatiquement ajouté à la variable d'environnement PATH. Le code est dans .profile:

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

Voir Comment ajouter / home / nom d'utilisateur / bin à $ PATH?

Ou dans certains systèmes, il peut être dans .bashrc:

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

Merci Elder Geek

Si ces scripts doivent être utilisés par d'autres utilisateurs:

Alors soit /usr/local/binou /opt/binsont de bonnes options. Voir Existe - t-il un emplacement standard pour placer des scripts Linux personnalisés?

J'espère que cela t'aides

user68186
la source
3

J'ai un répertoire que j'utilise pour la collecte rapide de mes outils locaux ou des choses que je déploie sur divers ordinateurs /usr/local/apollo. Il existe des branches hors de ce répertoire pour flags, binet logs.

Pour les applications que je télécharge et installe en dehors des apt-getréférentiels par défaut sont placés dans /opt/et un répertoire par le nom de l'application, avec un sous-répertoire de plus pour la version spécifique de l'application. De cette façon, ma version compilée d'une application comme vlcou eclipsene sera pas en conflit avec la version distribuée.

Mon utilisation /optest la façon dont il est essentiellement officiellement conçu.

Au fait, les répertoires /usr/local/bin, /usr/local/apolloet /optsurvivent à une nouvelle installation de la version du système d'exploitation écrasée.

LD James
la source
1
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binJ'aime que le fait /usr/local/binsoit déjà sur le chemin une chose de moins à retenir. J'aime votre méthode, /opt/program/versionje peux l'utiliser pour les trucs du noyau que j'obtiens et compiler comme EnhanceIO où ils changent les choses entre les versions du noyau. Un /apolloatterrissage sur la lune est-il un favori personnel ou a-t-il une signification pour Ubuntu?
WinEunuuchs2Unix
Quelle est la différence entre /usr/local/binet usr/local/sbintelle que celle-ci est supprimée lors des mises à niveau?
WinEunuuchs2Unix
Le programme d'installation Nukes les répertoires qu'il utilise. Il crée facilement des /usr/localrépertoires, mais ne met rien dans aucun d'entre eux. Ces répertoires sont remplis par l'utilisateur. De nombreux programmes source en dehors des référentiels donnent à l'utilisateur la possibilité de sélectionner où il souhaite que l'installation aille. La valeur par défaut dans les fichiers de configuration est /usr/local/bin. Par conséquent, en raison de la fréquence d'utilisation de ces répertoires, ils sont inclus par défaut dans le chemin de l'utilisateur. Par défaut, le système recherche ~/bin et l'ajoute au chemin s'il existe.
LD James
Vous voulez dire que le système vérifie ~/binpendant l'installation ou chaque démarrage? Quelle est la difference entre sbinet bin? Ils semblent coexister, il doit y avoir des quasi-règles sur lesquelles vous choisissez en fonction du type de programme, n'est-ce pas?
WinEunuuchs2Unix
1
@ WinEunuuchs2Unix Sur le ~/binchemin ... il n'est pas ajouté lors de l'installation. Le système le vérifie à chaque connexion et l'ajoute au $ PATH s'il existe lors de la connexion. Regardez les deux dernières lignes de vos ~/.profileparamètres.
LD James