LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルを利用していると、「今実行しているコマンドの実体はどこにあるのか?」「複数バージョンがインストールされているが、どのパスのコマンドが優先されているのか?」といった疑問を持つことがあります。
また、cronにスクリプトを登録する際などは、環境変数が異なるためコマンドを絶対パスで記述することが推奨されます。その際にもコマンドの場所を確認する作業が必要です。
本記事では、Linuxでコマンドの場所(パス)を確認する方法を、目的別(which, whereis, type, command -v)に解説します。
コマンドの場所を確認する代表的な方法一覧
用途に応じて、以下のコマンドを使い分けるのが一般的です。
| コマンド | 特徴・用途 |
|---|---|
which | 最もよく使われる。環境変数 $PATH から実行ファイルの場所を検索する。 |
type | コマンドの種類(エイリアス、組み込みコマンド、外部コマンドなど)も含めて詳細に確認できる。 |
whereis | 実行ファイルだけでなく、ソースコードやマニュアル(man)の場所も検索する。 |
command -v | POSIX準拠のため、シェルスクリプト内でパスを確認する際によく利用される。 |
それぞれ詳しく見ていきましょう。
1. which コマンド:シンプルに実行パスを確認
whichコマンドは、環境変数 $PATH に設定されているディレクトリ内を検索し、最初に見つかった実行ファイルの絶対パスを表示します。一番シンプルでよく使われるコマンドです。
$ which python3/usr/bin/python3複数のパスに同名コマンドがある場合 (-a)
同じ名前のコマンドが複数の場所にインストールされている場合、デフォルトでは「最優先で実行されるもの(最初に見つかったもの)」だけが表示されます。
すべて確認したい場合は -a オプションを使用します。
$ which -a python3/usr/bin/python3/usr/local/bin/python32. type コマンド:コマンドの種類も詳細に確認
typeコマンドは、単なる実行パスだけでなく、「そのコマンドがどのように解釈されるか(エイリアス、シェルの組み込みコマンド、外部コマンドなど)」を教えてくれます。
$ type grepgrep is /usr/bin/grep
# ※現在のセッションで一度でも実行されたコマンドはパスがキャッシュされ、以下のように表示されます。# grep is hashed (/usr/bin/grep)$ type llll is aliased to `ls -l'$ type cdcd is a shell builtinエイリアスが設定されているコマンドの実体を調べたい時などに非常に重宝します。typeコマンドにも -a オプションがあり、全ての場所や種類を表示させることができます。
3. whereis コマンド:マニュアル等の場所も確認
whereisコマンドは、環境変数 $PATH だけでなく、システムの標準的なディレクトリを検索し、実行ファイル(バイナリ)、ソースコード、マニュアル(manページ)の場所をすべて表示します。
$ whereis nginxnginx: /usr/sbin/nginx /usr/share/man/man8/nginx.8.gz実行ファイルだけを探す (-b)
マニュアルなどのパスが不要で、バイナリ(実行ファイル)の場所だけを知りたい場合は -b オプションを使用します。
$ whereis -b nginxnginx: /usr/sbin/nginx4. command -v :シェルスクリプトでの推奨
command -v は、which や type と同様にコマンドの場所を出力しますが、POSIX準拠であるという特徴があります。
which コマンドはOSOS [オーエス]Operating System。基本ソフトウェアや環境によってはインストールされていなかったり、挙動が微妙に異なる場合がありますが、command -v は多くのシェルに組み込まれているため、シェルスクリプト内でコマンドの存在確認やパスの取得を行う場合に推奨される方法です。
$ command -v docker/usr/bin/dockerシェルスクリプトで「あるコマンドがインストールされているか」をチェックする場合は、以下のように書くのがベストプラクティスとされています。
if ! command -v jq > /dev/null 2>&1; then echo "jqコマンドが見つかりません。インストールしてください。" exit 1fiまとめ
Linuxでコマンドの場所(パス)を確認する方法を解説しました。 目的に合わせて、以下のように使い分けるのがおすすめです。
- 普段使いでサクッとパスを知りたい:
whichコマンド - エイリアスかどうかも含めて詳細に知りたい:
typeコマンド - 関連ファイル(マニュアルなど)も探したい:
whereisコマンド - シェルスクリプト内で使用したい:
command -vコマンド
特に cron の設定などでは、コマンドが見つからずにエラーになるケースが多いため、事前にこれらのコマンドで絶対パスを確認する癖をつけておくとトラブルを減らすことができます。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。