which コマンド

目次

概要

which - コマンドのパス名を検索する

コマンドライン

which [OPTIONS] COMMAND...

対象バージョン

説明

which コマンドは引数で指定したコマンドのパス名を、環境変数 PATH のディレクトリを探索して表示します。

$ which cat
/usr/bin/cat

RHEL で which コマンドが見つからない場合はインストールしてください。

# dnf -y install which

RHEL ではエイリアス情報も探索します。Ubuntu は探索しないようです。

$ which grep
alias grep='grep --color=auto'
        /usr/bin/grep

RHEL ではシェル関数も探索します。Ubuntu は探索しないようです。

$ lls() { /bin/ls -Fl; }
$ which lls
lls ()
{
    /bin/ls -Fl
}

オプション

RHEL 10 のオプション

--all, -a
最初に見つかったものだけではなく、すべてのパス名を表示します。
--skip-dot
PATH の中からドット(.)で始まるディレクトリをスキップします。
--skip-tilde
PATH の中からチルダ(~)で始まるディレクトリをスキップします。
--show-dot
ドット(.)で始まるパス名配下にコマンドが見つかった場合、絶対パス名ではなく ./ で始まるパス名で表示します。RHEL 10 ではデフォルトの動作のようです。
--show-tilde
チルダ(~)で始まるパス名配下(/root を除く)にコマンドが見つかった場合、絶対パス名ではなく ~/ で始まるパス名で表示します。RHEL 10 ではデフォルトの動作のようです。
--tty-only
--show-dot--show-tilde オプションの効能を出力先が TTY でない場合に無効化し、常に絶対パス名で表示します。
--read-alias, -i
標準入力からエイリアス情報を読み込み、エイリアス情報も検索対象とします。ただし、RHEL 10 ではデフォルトでエイリアス情報も参照するため -i を指定しなくても動作は変わらないようです。
$ alias | which -i grep
alias grep='grep --color=auto'
        /usr/bin/grep
--skip-alias
エイリアスを参照しません。
$ which grep                      # エイリアスも参照する
alias grep='grep --color=auto'
        /usr/bin/grep
$ which --skip-alias grep         # エイリアスを参照しない
/usr/bin/grep
--read-functions
標準入力からシェル関数情報を読み込み、シェル関数情報も検索対象とします。ただし、RHEL 10 ではデフォルトでシェル関数情報も参照するため --read-functions を指定しなくても動作は変わらないようです。
--skip-functions
ヘルプにはシェル関数情報を読み込まないとありますが、RHEL 10 の実装ではシェル関数の実体({ ... })部を表示しない動作のようです。
$ lls() { /bin/ls -Fl; }
$ which lls
lls ()
{
    /bin/ls -Fl
}
$ which --skip-functions lls
lls ()
$
--version, -[vV]
バージョン情報を表示して終了します。
--help,
ヘルプを表示して終了します。

Ubuntu 24.04 のオプション

-a
最初に見つかったものだけではなく、すべてのパス名を表示します。
$ which -a ls
/usr/bin/ls
/bin/ls
-s
何も表示せず、コマンドの終了ステータスとして、コマンドが見つかれば 0、見つからなければ 1 を、オプションに誤りがあれば 2 を返します。
$ which -s ls ; echo $?
0
$ which -s lls ; echo $?
1