Ubuntu のwhich コマンド

Windows 10にWSL 2 Ubuntu をインストールしている。Debian 系のディストリビューションを使うのは初めてで、まだ慣れない。

ところで、Ubuntu のwhich コマンドが私の常識と異なり、コマンドが見つからなかったときに何もメッセージを表示しない。

# Ubuntu on WSL 2
$ which non_existent_command
$

# Cygwin
$ which non_existent_command
which: no non_existent_command in (/usr/local/bin:/usr/bin:(※以下略)

Cygwin のwhich はGNU 製で、which --version でそれがわかるが、Ubuntu のwhich はバイナリではなくシェルスクリプトで、--version オプションなどはない。あるのは-a オプション(すべて表示)のみ。

まずUbuntu のwhich コマンドがどのパッケージに含まれているか確認してみる。

$ which which
/usr/bin/which

$ dpkg -S /usr/bin/which
dpkg-query: no path found matching pattern /usr/bin/which

/bin -> usr/bin のシンボリックリンクが張られていて、本体は/bin/which のほうだった。

$ dpkg -S /bin/which
debianutils: /bin/which

debianutils パッケージに含まれていることがわかった。そこから少しウェブで検索したが、Ubuntu(Debian)がGNU which を使わない理由はわからなかった。