Cours Linux : Le $PATH
Cet article a été publié par Benjamin
le 17-10-08 à 08:20 dans la catégorie Cours Linux
Tags :
- Libre
- TrucsAstuces
- Tutoriel
- Ubuntu
Un cas pratique : je veux installer un nouveau logiciel (un jeu par exemple) : asciijump. Je me logue donc en root pour faire un apt-get install asciijump
.
L'installation se passe bien, je regarde dans le menu Applications, Jeux et constate que ce nouveau jeu ne s'affiche pas. Je décide donc de lancer mon jeu depuis la console, je tape donc la commande asciijump
.
Problème, j'ai ce superbe message :
.
bash : asciijump : command not found
Conclusion, le répertoire contenant l'exécutable de mon jeu n'est pas renseigné dans le $PATH du compte courant (en l'occurrence, root).
I. Généralités, qu'est-ce que le $PATH ?
Cette erreur arrive assez souvent, vous tapez une commande et vous avez un command not foud
. C'est le cas pour les jeux en root par exemple. Pourquoi ?
Je vous invite à taper echo $PATH
dans votre terminal. Vous obtenez une liste de répertoires. Par exemple chez moi :
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
A quoi ça sert ? C'est simple, en fait quand vous tapez une commande du genre frozen-bubble
, le terminal va parcourir tous les répertoires présents dans le $PATH dans l'ordre afin de voir si il ne trouve pas un executable du nom que vous avez appelé précédemment.
Dans mon cas, je tape frozen-bubble
, il va donc chercher si il ne trouve pas /usr/local/bin/frozen-bubble, si il ne trouve pas, il va regarder dans /usr/bin/frozen-bubble, etc...
Le dernier répertoire contenu dans mon $PATH est le répertoire /usr/games, il va donc regarder si il trouve /usr/games/frozen-bubble. /usr/games/ étant le répertoire par défaut des jeux, il va bien trouver l'executable /usr/games/frozen-bubble et me lancer mon jeu favori :)
II. Cas pratique, comment changer les dossiers par défaut ?
Le problème que j'avais était que je ne pouvais pas lancer mon jeu (asciijump) directement depuis le compte root (à moins bien sur de taper l'adresse complète de l'exécutable (/usr/games/asciijump)). Je regarde donc ce que contient le $PATH root :
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
Je me rend compte que le dossier /usr/games n'est pas présent. Voici donc comment l'ajouter !
Il y a deux solutions :
- Soit vous ajoutez un ou plusieurs répertoires pour un utilisateur donné
- Soit vous ajoutez un ou plusieurs répertoires pour tous les utilisateurs
Comment faire :
Pour modifier le $PATH pour un utilisateur donné, éditez le fichier de configuration de votre terminal de votre compte. Normalement, le fichier de configuration pour un utilisateur est /home/utilisateur/.bashrc et celui du root est /root/.bashrc.
Dans notre exemple, je veux ajouter le dossier /usr/games dans le $PATH du root. J'ajoute donc cette ligne dans /root/.bashrc :
PATH=$PATH:/usr/games
Pour modifier le $PATH pour tous les utilisateurs, ajoutez la même ligne dans le fichier de configuration général de votre terminal qui doit se trouver ici : /etc/bash.bashrc.
Voila, désormais vous pouvez lancer votre jeu favoris depuis l'utilisateur root (Je sais, aucun intérêt mais c'est pour donner un exemple quoi :) )
Commentaires
Tu installes un paquetage qui ne s'installe pas les menus et tu dois modifier ton path à la main !? Mais dis-moi tu utilises quelle distro ? Elle font toute cela automatiquement désormais !
Lancer un jeu en tant que root, c'est pas bien malin.
Tout doux, Yoho...
La preuve que non, ILS ne font pas tous cela (les packages). J'utilise une distribution Debian pour information.
Si tu veux un exemple, xmoto ne fait pas cela, que je l'installe depuis les sources ou que je le compile moi même, je n'ai pas les menus.
Et je le répète, aucun intérêt de lancer les jeux en root mais c'était pour l'exemple !
Ben, c'est l'histoire de Path, le chemin...
Sinon, en tapant asciijump, le message d'erreur ne serait pas plutôt
bash : asciijump : command not found.
Effectivement :)
Merci de me l'avoir fait remarqué.
Ptdr... et les gars les distributions linux c'est pas un ubuntu hein, faut arrêter de faire les grands en disant "moi j'utilise une distribution linux" et ensuite enchainé avec "ubuntu". Mandriva, Fedora, OpenSuse etc... idem!
Une réponse logique à ton soucis, cher propriétaire du blog aurait été que ta commande n'est pas exécutée simplement parce que ton logiciel n'a pas d'"exécutable" dans /usr/bin/ et qu'il n'est donc pas possible de le lancer comme ça.
Pour information, le /usr/bin/ répertorie les logiciels que l'on peut lancer en tant qu'utilisateur quelconque.
Une réponse intelligente aurait été de créer un lien symbolique pointant de ton fichier exécutable vers /usr/bin/lenomdetonprog.
De cette manière, tu aurais pu lancer ton exécutable de n'importe où, comme si tu savais ce que tu faisais ;)
Have Fun les gays!
Ta manière de procéder est une manière de bricoleur qui n'y comprends rien grand chose. Retournes sous ubuntu, et s'il te plaît arrêtes de dire que tu utilise ArchLinux depuis un p'tit moment mon grand, tu dis ça pour te la pèter mais t'y comprends rien!
ArchLinux c'est une distribution, pas comme ubuntu qui est une blague!
Va donc suivre une p'tite formation gnu, ça te fera du bien l'ami ;)
Figures toi que je suis actuellement en licence pro "linux", donc je connais tout ça imbécile... Je répète (car soit tu ne sais pas lire, soit tu ne comprend rien (je dirais les deux...)), que c'était un exemple pour illustrer ce qu'est le $PATH.
De plus, je n'ai jamais utilisé Arch donc écrase un peu ;) Je suis actuellement à la fois sous Debian et sous Ubuntu en fait.
Espèce de guignol va, je comprend pourquoi certaines personnes pensent que les Linuxiens sont trop catégoriques, avec des personnes comme toi c'est normal !!
Bon, retournes t'amuser à faire le 1337 avec ton ArchLinux, ne reviens pas sur ce blog, il n'est pas digne d'un leet comme toi, nous on reste des bricoleurs n'oublies pas ;)
Bah, moi j'ai trouvé ça intéressant.
"Espèce de ****, je comprend pourquoi certaines personnes pensent que les Linuxiens sont trop catégoriques, avec des personnes comme toi c'est normal !!"
+200
En espérant te relire, malgré les commentaires désobligeants.
"Pour information, le /usr/bin/ répertorie les logiciels que l'on peut lancer en tant qu'utilisateur quelconque.
Une réponse intelligente aurait été de créer un lien symbolique pointant de ton fichier exécutable vers /usr/bin/lenomdetonprog."
ahah, comme ça tu bourres ton /usr/bin/ de liens symboliques (qui finiront par te bouffer de la place) sans compter que tu peux aussi vouloir restreindre l'accès à certains exécutables en fonctions des utilisateurs... genre le $PATH de dugenou ne sera pas le même que root ou que duschmol.... désolé de répondre aussi tard, mais l'article de Benjamin est :
- explicite
- pratique
- tout à fait compréhensible et de bonne qualité.
Merci pour ton site Benjamin et continues :) Je te lis avec plaisir quotidiennement, j'arrive un peu tard sur ce commentaire, mais il m'a fait bondir... Surtout que je suis utilisateur d'Arch, Debian, Gentoo, BSD (pas un linux, je sais), Ubuntu chez ma copine et Slackware...
Merci, tres instructif : moi je suis embeté avec le Path de wine pour une appliaction windows !!!
si quelqun veut m'aider : http://chris-computing.dnsalias.com/ ==> envoit moi un message.
Merci
Merci pour cet article de fort bonne qualité Benjamin.
Je cherchais à comprendre le path, qui me paraissait fort complexe, mais grâce à ton tuto je vais non seulement pouvoir faire quelques trucs utiles mais aussi règler certains problèmes. Esperons que les remarques complètement stupides ne te dégoouterons pas.
Merci ;)
Bonjour,
j'espère que je suis au bon endroit. J'ai une petite question : comment on fait pour ajouter un ensemble de sous-répertoires au PATH sans avoir à tous les taper explicitement ? Genre "tous les sous-répertoires du répertoire Machin". C'est par défaut ? Ou il y a des caractères génériques ?
Merci d'avance
Bonjours tout le monde,
Mes félicitations pour ton billet mais je pense que tu as omis un petit détail.
Tu montres que l'on peut modifier le PATH de chaque utilisateur mais tu ne dis pas si on peut ou pas supprimer une valeur enregistrer.
OUPSS!
Pour pouvoir retrouver l'ancienne valeur il faut juste supprimer la ligne ajouter dans le fichier edité.
Chose utile à savoir
On peut éditer le PATH temporairement, c'est t'a dire juste pour la session en cours en exécutant dans la console:
PATH:$PATH:/usr/games
Salut à tous
Même si ce tuto a été fait il y a longtemps, il marche à la perfection!!!
J'avais command not found et en changeant le path plus de probleme!
Merci
Bonjour,
merci pour ce petit article que je trouve, en ce qui me concerne, bien rédigé, qui a presque 10 ans maintenant, mais qui est toujours d'actualité pour moi, néophyte dans le monde de Linux.
J'ai trouvé réponse à mon interrogation.
Si je peux me permettre d'apporter une petite correction (parce que j'ai du m'y prendre à deux fois):
Je cite:
"Pour modifier le $PATH pour tous les utilisateurs, ajoutez la même ligne dans le fichier de configuration général de votre terminal qui doit se trouver ici : /etc/bash.bashrc."
... en fait, il n'y a pas de ponctuation à la fin de /etc/bash.bashrc
Je sais, c'est peut être un détail pour vous, mais j'ai au moins appris que sous linux, chaque détail voulait dire beaucoup (que ça soit au niveau de la casse, qu'au niveau de la ponctuation).
Du coup, j'avais voulu éditer mon fichier directement en tapant son nom complet (avec le chemin absolu tel qu'indiqué)(un copier/coller quoi) mais je m'étais retrouvé avec un fichier vide (grosse blague)
Je pense que d'autres padawan tomberont dans le piège également.
Bonne soirée