web-dev-qa-db-ja.com

シェル-いくつかのコマンドのディレクトリを見つける方法は?

シェルを使用している場合、使用できるコマンドは、PATHに設定されたディレクトリで見つかるコマンドのみであることを知っています。私のPATH変数にdirsがどのように表示されるかわかりません(これは答えられる別の良い質問です)、私が知りたいのは:

私はシェルに来て、書いています:

$ lshw

このコマンドがどこにあるかを教えてくれるシェルのコマンドを知りたい。つまり、この「実行可能ファイル」はどこにあるのでしょうか?

何かのようなもの:

$ location lshw
/usr/bin

誰でも?

112

Bashまたはzshを使用している場合、これを使用します。

type -a lshw

これにより、ターゲットが組み込み、関数、エイリアス、または外部実行可能ファイルかどうかが示されます。後者の場合、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

Bashでは、関数のtype -aも関数定義を表示します。 declare -f functionnameを使用して同じことを行うことができます(type -aは使用しないため、zshに使用する必要があります)。

160

このような:

which lshw

パスで一致するすべてのコマンドを表示するには:

which -a lshw 

PATHは環境変数であり、echoコマンドで表示できます。

echo $PATH

これは、コロン文字「:」で区切られたパスのリストです

whichコマンドは、コマンドを実行したときに実行されるファイルを示します。

which lshw

時々、取得するのはシンボリックリンクへのパスです。実際の実行可能ファイルが存在する場所へのリンクをトレースする場合は、readlinkを使用して、それにwhichの出力を渡すことができます。

readlink -f $(which lshw)

-fパラメーターは、readlinkに、シンボリックリンクを再帰的にたどり続けるよう指示します。

これが私のマシンの例です:

$ 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

TENEX Cシェルtcshでは、コマンドの場所をリストできます。組み込みコマンドの場合は、whereコマンドを使用して、たとえば:

tcsh% where python
/usr/local/bin/python
/usr/bin/python

tcsh% where cd
cd is a Shell built-in
/usr/bin/cd
2
Pierz

Kornシェルkshは、whenceビルトインを提供します。これは、他のシェルビルトイン、マクロなどを識別します。ただし、whichコマンドはより移植性があります。

0
mpez0