web-dev-qa-db-fra.com

Shell - Comment trouver le répertoire d'une commande?

Je sais que lorsque vous êtes sur Shell, les seules commandes utilisables sont celles que l’on trouve sur certains répertoires définis dans PATH. Même si je ne sais pas comment voir les répertoires de ma variable PATH (et ceci est une autre bonne question à laquelle on pourrait répondre), ce que j'aimerais savoir, c'est:

Je viens à Shell et écris:

$ lshw

Je souhaite connaître une commande sur Shell capable de 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?

112

Si vous utilisez Bash ou zsh, utilisez ceci:

type -a lshw

Cela montrera si la cible est une commande intégrée, une fonction, un alias ou un exécutable externe. Si ce dernier point, il montrera à chaque endroit sa place 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

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

160

Comme ça:

which lshw

Pour voir toutes les commandes qui correspondent dans votre chemin:

which -a lshw 
55

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 là où se trouve l'exécutable réel, vous pouvez utiliser readlink et lui donner le résultat de which:

readlink -f $(which lshw)

Le -f Le paramètre demande à readlink de 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
17
hasen
~$ 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
5
Jack

Dans le shell C TENEX, tcsh, on peut répertorier le ou les emplacements d'une commande ou, s'il s'agit d'une commande intégrée, à l'aide de 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
2
Pierz

Le shell Korn, ksh, offre le whence intégré, qui identifie d’autres bâtis, macros, etc. du shell. La commande which est toutefois plus portable.

0
mpez0