{{tag>sysadmin bash cli}} ====== Bash : Retrouver le chemin complet de la commande ====== L' **expression** saisie par l'utilisateur est **évaluée** par le shell afin de déterminer la commande à invoquer. Les différents répertoires du **PATH** sont parcourus par le shell pour trouver la commande à exécuter. Les commandes **type**, **which**, **file** et **readlink** peuvent être utiles lorsque l'on souhaite identifier le fichier réellement exécuté par le shell : Dans cet exemple l'utilisateur tape simplement ''python'' et valide. Un interpréteur Python est trouvé puis lancé par Bash: python Python 3.12.0 (main, Oct 21 2023, 17:44:38) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> On peut constater que c'est la version 3.12.0 La commande **type** avec l'option ''-t'' affiche le type de la commande passée en paramètre. Ce type peut valoir : "alias", "keyword", "function", "builtin", "file" ou "" si la commande est inconnue. type -t python file Ici la commande 'python' correspond à un fichier externe. On peut afficher son chemin via l'option -p de **type** ou avec la commande **which** : type -p python /usr/bin/python # Affiche toutes les correspondances type -p -a python /usr/bin/python /bin/python # Equivalent avec which which python /usr/bin/python Ce fichier "/usr/bin/pyhton" peut être directement un exécutable ou un lien vers un autre lien ou fichier. file /usr/bin/python /usr/bin/python: symbolic link to /etc/alternatives/python file /etc/alternatives/python /etc/alternatives/python: symbolic link to /usr/bin/python3.12 file /usr/bin/python3.12 /usr/bin/python3.12: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=76fcae736cac0dd8e82f0e301fcd54545b0de609, for GNU/Linux 3.2.0, stripped La commande **readlink** avec l'option ''-f'' permet de suivre chaque lien jusqu'au fichier final: readlink -f /usr/bin/python /usr/bin/python3.12 Dans notre exemple taper ''python'' est strictement équivalent à saisir ''/usr/bin/python3.12''. On peut condenser cette recherche avec la commande suivante : readlink -f $(which python) ===== Références ===== * [[https://stackoverflow.com/questions/2869100/how-to-find-directory-of-some-command|Retrouver le répertoire d'une commande (stackoverflow)]]