web-dev-qa-db-fra.com

Comment puis-je rendre un programme exécutable de partout

Que dois-je faire si je veux pouvoir exécuter un programme donné quel que soit mon répertoire actuel? Dois-je créer un lien symbolique vers le programme dans le /bin dossier?

79
aneuryzm

Si vous tapez simplement export PATH=$PATH:</path/to/file> sur la ligne de commande, il ne durera que la durée de la session.

Si vous souhaitez le modifier définitivement, ajoutez export PATH=$PATH:</path/to/file> à votre fichier ~/.bashrc (juste à la fin, c'est bien).

55
oadams

La réponse courte est que pour exécuter le programme, quel que soit votre répertoire, vous devez avoir le répertoire du programme dans votre chemin de recherche. Le problème peut être résolu en plaçant le programme dans un dossier qui se trouve déjà dans ce chemin, ou en ajoutant un nouveau dossier au chemin - l'un ou l'autre fonctionnera. La meilleure réponse dépend:

Ce programme est-il un programme téléchargé que vous avez vous-même compilé à partir des sources?

Son très probablement aura déjà un mécanisme d'installation. Dans le dossier que vous avez compilé le programme, en tant que root, exécutez 'make install'

Ce programme est-il un programme téléchargé que vous souhaitez rendre disponible dans le cadre des programmes standard sur l'ordinateur?

Il est judicieux de placer ce type d'application dans un dossier standard. il est assez courant d'utiliser des répertoires tels que/usr/local/bin pour de tels programmes. Pour cela, vous aurez besoin d'un accès root.

C'est un programme que vous avez écrit pour vous-même et/ou vous n'avez aucun privilège spécial sur l'ordinateur.

Création d'un dossier dans votre répertoire personnel appelé 'bin', et placement du programme dedans. Vous devrez peut-être modifier votre script de connexion pour ajouter le chemin d'accès complet à ce dossier (par exemple/usr/home/jeremy/bin)

Bien que vous puissiez simplement ajouter son répertoire actuel au chemin de recherche, vous devrez continuer à le faire avec chaque nouveau programme - et c'est plus de travail à plus long terme.

24
Michael Shaw

Placer un lien vers le fichier dans le /bin le répertoire n'est pas la meilleure chose à faire pour plusieurs raisons.

  • Si le fichier exécutable réel se trouve dans un emplacement que certains utilisateurs ne peuvent pas voir ou exécuter, ils le voient comme un mauvais lien ou un programme dysfonctionnel.
  • Le /bin Le répertoire est censé être réservé aux programmes nécessaires au fonctionnement du système (des choses comme chmod, mkdir, etc.).

Vous pouvez réellement placer (installer) le fichier exécutable dans /usr/bin/ ou même /usr/local/bin/. Bien sûr, vous avez installé manuellement le programme à ce stade; votre distribution ne va pas en garder la trace comme elle le fait pour le reste de vos programmes - vous devrez la mettre à niveau manuellement si nécessaire et la supprimer manuellement si vous voulez qu'elle disparaisse. De plus, vous devrez savoir de quels packages il dépend (il semble que vous utilisiez déjà le programme, donc c'est réglé, mais en général ...).

À moins que je ne configure un programme que j'attends des autres utilisateurs, ce n'est pas ce que je fais habituellement: je crée un répertoire bin juste pour moi dans mon répertoire personnel et je modifie mon profil Shell pour ajouter ~/bin/ à ma variable d'environnement PATH. Je trouve plus facile de garder une trace des programmes que j'ai installés de cette façon, car ils sont séparés du reste du système.

17
Shawn J. Goff

Si vous souhaitez exécuter une commande foo dans le répertoire dans lequel votre shell se trouve actuellement, vous avez essentiellement deux options:

  1. Tapez ./foo à l'invite du shell.

  2. Ajouter le . répertoire (. est un nom pour "le répertoire courant") de la variable d'environnement PATH; la façon dont vous procédez dépend du Shell que vous utilisez:

    • pour les shells de type Bourne (bash, zsh, ksh, etc.) que vous écrivez (voir cette page pour plus d'informations):

      export PATH=$PATH:.
      
    • pour les shells de type csh (tcsh, csh) vous écrivez (voir cette page pour plus d'informations):

      set path = ( $path .)
      

Notez que 2. est un risque de sécurité sur les systèmes multi-utilisateurs: imaginez que vous cd dans le répertoire /tmp et un utilisateur malveillant a créé un binaire malveillant nommé ls là-dedans.

6
Riccardo Murri

Jouer avec le PATH vous ouvre à l'exécution de programmes malveillants par erreur. La norme consiste à installer des éléments "locaux" sous /usr/local (voir FHS , qui codifie l'utilisation d'Unix: un peu datée mais elle donne une justification)., /usr/local/bin est généralement dans le PATH pour tous les utilisateurs.

Mes programmes "installés localement" sont dans $HOME/bin, dans la danse standard de ./configure --prefix=$HOME ..., couplé à quelques alias (bash) à choisir, par exemple git auto-construit sur le système (ceux qui ne sont pas en conflit se trouvent dans le PATH à la fin).

1
vonbrand