Shell – Comment trouver le répertoire d’une commande?

Je sais que lorsque vous êtes en shell, les seules commandes utilisables sont celles que l’on peut trouver dans certains répertoires définis sur PATH. Même je ne sais pas comment voir les dirs sur ma variable PATH (et c’est une autre bonne question à laquelle on pourrait répondre), ce que je voudrais savoir, c’est:

Je viens bombarder et écrire:

$ lshw 

Je veux connaître une commande sur shell qui peut me dire où se trouve cette commande. En d’autres termes, où se trouve ce “fichier exécutable”?

Quelque chose comme:

 $ location lshw /usr/bin 

N’importe qui?

Si vous utilisez Bash ou zsh, utilisez ceci:

 type -a lshw 

Cela montrera si la cible est une fonction intégrée, une fonction, un alias ou un exécutable externe. Si ce dernier, il montrera chaque endroit qu’il apparaît dans votre PATH .

 bash$ type -a lshw lshw is /usr/bin/lshw bash$ type -a ls ls is aliased to `ls --color=auto' ls is /bin/ls bash$ zsh zsh% type -a which which is a shell builtin which is /usr/bin/which 

Dans Bash, pour les fonctions de type -a affichera également la définition de la fonction. Vous pouvez utiliser declare -f functionname pour faire la même chose (vous devez l’utiliser pour zsh, puisque le type -a ne le fait pas).

Comme ça:

 which lshw 

PATH est une variable d’environnement et peut être affichée avec la commande echo:

 echo $PATH 

C’est une liste de chemins séparés par le caractère deux-points ‘ :

La commande which vous indique quel fichier est exécuté lorsque vous exécutez une commande:

 which lshw 

parfois, vous obtenez un chemin vers un lien symbolique; Si vous voulez suivre ce lien vers l’endroit où se trouve l’exécutable réel, vous pouvez utiliser readlink et lui fournir le résultat suivant:

 readlink -f $(which lshw) 

Le paramètre -f demande à readlink de continuer à suivre le lien symbolique de manière récursive.

Voici un exemple de ma machine:

 $ which firefox /usr/bin/firefox $ readlink -f $(which firefox) /usr/lib/firefox-3.6.3/firefox.sh 
 ~$ echo $PATH /home/jack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games ~$ whereis lshw lshw: /usr/bin/lshw /usr/share/man/man1/lshw.1.gz 

Le shell Korn, ksh , offre la fonction intégrée, qui identifie les autres éléments du shell, les macros, etc.

Dans le TENEX C Shell, tcsh , on peut lister le ou les emplacement (s) d’une commande, ou s’il s’agit d’une commande intégrée, en utilisant la commande where par exemple:

 tcsh% where python /usr/local/bin/python /usr/bin/python tcsh% where cd cd is a shell built-in /usr/bin/cd