特定のコマンドに対応する実行可能ファイルを見つけるためのunixコマンドは何ですか?


22

たとえば、ls入力として渡された/bin/ls場合ls、コマンドラインで実行すると実行されることを通知する必要があります。

回答:


25

使用するコマンドはシェルごとに異なります。

エイリアスのみ、シェル関数、他のビルトインなどを完全に知ることができるのはビルトインのみであるため、シェルビルトインのみが与えられたコマンド名に対してシェルが何をするかを正しく伝えます。要確認:すべてのコマンドがそもそも実行可能ファイルに対応しているわけではありません。

  • Bourne Againシェルの場合bash組み込みtypeコマンドは次のとおりです。

    $ type '['
    [ is a shell builtin
    
  • Fishシェルの場合fishtype組み込みはbashと同様に機能します。実行可能ファイルへのパスのみを取得するには、次を使用しますcommand -v

    $ type cat
    cat is /bin/cat
    $ command -v cat
    /bin/cat
    
  • Kornシェルの場合kshビルトインはwhenceコマンドです。type最初はの通常のエイリアスとして設定されwhence -vcommandビルトインは次の-vオプションと同等whenceです:

    $ whence -v ls
    ls is a tracked alias for /bin/ls
    
  • Zシェルの場合、zsh内蔵しているwhenceと、コマンドcommandと内蔵-vのオプションと等価whenceとビルトインtypewhichおよびwhereに相当するwhenceオプションで-v-cおよび-caそれぞれ。

    $ whence ls
    /bin/ls
    
  • TCシェルの場合tcsh組み込みwhichコマンドはコマンドです。その名前の外部コマンドと混同しないでください。

    > which ls
    ls: aliased to ls-F
    > which \ls
    /bin/ls
    

参考文献


kshでは、「type」は「whence -v」のデフォルトのエイリアスであるため、従来のbourneシェルおよびbashと同様に使用できます。
jlliagre

typezshにも組み込まれていますか?
Hongxuチェン14年

RHEL6のRPM(例:)which-2.19-6.el6.x86_64は、スタートアップファイルをに置きます/etc/profile.d/which2.sh。これは、zshを含む非cshシェルによって読み取られます。それwhichはそれ自身にエイリアスします。したがって、特にzshユーザーの場合は、組み込みのbreaksをオーバーライドしますwhich
ダンプリッツ14

14

whichこれに使用できます:

aix@aix:~$ which ls
/bin/ls

PATH引数の名前に一致する実行可能ファイルを検索することで機能します。はシェルエイリアスでは機能しないことに注意してください。

aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin    dev   initrd.img      lib32   media  proc  selinux  tmp  vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$

typeただし、機能します:

aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'

3
注意:lsが関数またはエイリアスである場合、「which ls」ではなく「type ls」が必要です
William Pursell

1
which必ずしもそれだけでは十分ではありません。$ PATH ...で最初に見つかった名前のみを返します。その名前はシンボリックリンクであり、実際のチェーン終了実行可能ファイルではありません
Peter.O

8

which(必ずしも)実行可能ファイルを返しませ。$ PATHで最初に一致するファイル(またはを使用する場合は複数の類似ファイルwhich -a)を返します... 実際の実行可能ファイルは、複数のリンクから離れている場合があります。

  • which locate
    /usr/bin/locate
    `
  • file $(which locate)
    /usr/bin/locate: symbolic link to /etc/alternatives/locate'

実際の実行可能ファイルを見つけるコマンドはreadlink -e
(と組み合わせてwhich

  • readlink -e $(which locate)
    /usr/bin/mlocate

すべての中間リンクを表示するには:

f="$(which locate)"             # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do  # follow links to executable
    printf "# %s\n" "$f"
done

# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.