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)