web-dev-qa-db-ja.com

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

たとえば、入力としてlsを渡した場合、/bin/lsは、コマンドラインでlsを実行すると実行されます。

22
hugomg

使用するコマンドは、シェルによって異なります。

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

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

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

    $ type cat
    cat is /bin/cat
    $ command -v cat
    /bin/cat
    
  • Kornシェルの場合、ksh組み込みはwhenceコマンドです。typeは、最初にwhence -vの通常のエイリアスとして設定され、 commandと同等の-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
    
  • T Cシェルの場合、tcsh組み込みはwhichコマンドです。その名前の外部コマンドと混同しないでください。

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

参考文献

25
JdeBP

これには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'
14
NPE

whichnotを実行し、(必要に応じて)実行可能ファイルを返します。最初に一致したファイルを返しますname $ PATHで見つかった(または_which -a_を使用する場合は複数の名前付きファイルなど)... actual実行可能ファイルは複数の場合があります離れてリンクします。

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

actual実行可能ファイルを見つけるコマンドは_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
_
8
Peter.O

あなたが試すことができます:

whereis ls

それは私に与えます:

ls: /bin/ls /usr/share/man/man1/ls.1.gz
4
Ivan Morgillo