こんにちは、フルスタックエンジニアのryuです。
今回の記事では、Linuxでコマンドがどこにあるのか調べる方法について解説します。
Linuxでは、lsやgitなどが実際にはどのファイルを実行しているのか確認したいことがあります。
さらにcommand -vやtypeも含め、何を使えば何が分かるのかを整理します。
Linuxでコマンドの場所を調べる方法とは?¶
Linuxでコマンドの場所を確認するときは、主に次のコマンドを利用できます。
| コマンド | 主な用途 |
|---|---|
which |
PATHから実行ファイルを探す |
command -v |
シェルが実際に解釈するコマンドを確認する |
type |
外部コマンド、組み込み、エイリアスなど種類を確認する |
whereis |
実行ファイルやマニュアルなどをまとめて探す |
whichコマンドで実行ファイルの場所を確認する¶
まずは、よく使われるwhichコマンドです。
基本的な使い方は次の通りです。
which [コマンド名]
実際にlsコマンドがどこにあるのか調べてみましょう。
which ls
実行すると、環境によって次のようなパスが表示されます。
/usr/bin/ls
または、
/bin/ls

whichは、環境変数PATHに登録されているディレクトリを順番に探し、実行対象となるコマンドの場所を表示します。
PATHとは?¶
Linuxでは、コマンドを実行するたびに自分でフルパスを書く必要はありません。
たとえば、次のように実行できます。
ls
本来の実行ファイルが/usr/bin/lsにある場合でも、毎回次のように書く必要はありません。
/usr/bin/ls
現在のPATHは次のように確認できます。
echo $PATH
たとえば、次のような結果が表示されます。
/usr/local/bin:/usr/bin:/bin
:で区切られたディレクトリを左から順番に探し、該当するコマンドを見つけます。
【関連記事】PATHなどの環境変数については、exportコマンドの使い方解説!環境変数の設定をしようでも解説しています。
command -vでコマンドを確認する¶
command -v ls
実行すると、次のように表示されます。
/usr/bin/ls
whichと似ていますが、command -vはシェルがその名前をどのように解釈するのか確認できる点がポイントです。
たとえば、cdを確認してみます。
command -v cd
環境によっては次のように表示されます。
cd
cdは一般的な実行ファイルではなく、シェルの組み込みコマンドだからです。
つまり、Linuxで使うコマンドがすべて/usr/binなどに実行ファイルとして存在するわけではありません。
typeコマンドでコマンドの種類まで確認する¶
type ls
環境によっては次のように表示されます。
ls is /usr/bin/ls
cdを確認すると、次のような結果になります。
type cd
cd is a shell builtin
これは、cdがシェル組み込みコマンドであることを表します。
aliasも確認できる¶
環境によっては、lsなどにエイリアスが設定されていることがあります。
type ls
たとえば次のように表示されることがあります。
ls is aliased to `ls --color=auto'
複数の候補を確認したい場合は、シェルによって次のように-aを利用できます。
type -a ls
whereisコマンドでコマンドやマニュアルを探す¶
次にwhereisコマンドです。
基本的な使い方は次の通りです。
whereis [コマンド名]
先ほどと同じようにlsを調べてみましょう。
whereis ls

環境によっては、次のような結果が表示されます。
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
whichとの違いは、実行ファイルだけではなく、マニュアルなど関連する場所もまとめて表示できることです。
whichとwhereisの違い¶
違いを整理すると次のようになります。
| コマンド | 探し方 | 向いている用途 |
|---|---|---|
which |
PATHから検索 | 実行ファイルの場所を知りたい |
command -v |
シェルの解釈を確認 | 実際に何が実行されるか知りたい |
type |
コマンドの種類を確認 | builtinやaliasまで調べたい |
whereis |
標準的な場所を検索 | 実行ファイルやmanをまとめて探したい |
which git
whereis git
manコマンドとwhereisを組み合わせる¶
whereisでマニュアルの場所が表示された場合、その内容を読むために直接ファイルを開く必要はありません。
通常はmanコマンドを使います。
man ls
manを実行すると、コマンドの説明、オプション、使い方などを確認できます。
Linuxでは分からないオプションが出てきたとき、検索エンジンだけではなくmanを確認する習慣を付けておくと便利です。
【関連記事】manコマンドの使い方を解説!コマンドやパッケージなどのドキュメントを表示する
コマンドはどのディレクトリに保存されている?¶
Linuxの実行ファイルは、/usr/binや/usr/sbin、/usr/local/binなどに配置されることが多いです。
代表的なディレクトリを整理すると次のようになります。
| ディレクトリ | 主な用途 |
|---|---|
/usr/bin |
一般的なユーザーコマンド |
/usr/sbin |
主にシステム管理用コマンド |
/usr/local/bin |
管理者がローカルに追加したコマンドなど |
/usr/local/sbin |
ローカルに追加した管理用コマンドなど |
/bin |
基本コマンド。現在は/usr/binへのリンクの場合もある |
/sbin |
管理用コマンド。現在は/usr/sbinへのリンクの場合もある |
比較的新しいLinuxでは、/binが/usr/binへのシンボリックリンクになっていることがあります。
実際に確認するには、次のように実行できます。
ls -ld /bin
環境によっては次のように表示されます。
/bin -> usr/bin
表示されるパスはLinuxの構成によって異なると覚えておきましょう。
コマンドが見つからないときにも使える¶
whichやcommand -vは、command not foundが出たときの確認にも使えます。
たとえばgitを実行したとします。
git --version
次のようなエラーになった場合です。
bash: git: command not found
まず次のように確認します。
command -v git
何も表示されなければ、現在のシェルからgitを見つけられていない可能性があります。
この場合は、Gitそのものがインストールされていないのか、PATHに問題があるのかを切り分けます。
逆に次のようにパスが表示されるのであれば、コマンド自体は見つかっています。
/usr/bin/git
whichで複数バージョンの問題を調べる¶
開発環境では、同じコマンドが複数の場所にインストールされることがあります。
たとえばPythonを複数の方法でインストールすると、次のようなパスが存在する場合があります。
/usr/bin/python3
/usr/local/bin/python3
PATHでは左側にあるディレクトリが先に検索されるため、どちらが利用されるかによってバージョンが変わることがあります。
まず確認します。
command -v python3
次にバージョンを確認します。
python3 --version
想定と違うPythonが起動している場合は、PATHや仮想環境などを調べます。
実際にコマンドの場所を調べてみよう¶
ここまで読んだら、自分のLinux環境でいくつか確認してみてください。
which ls
command -v ls
type ls
whereis ls
次に、シェル組み込みコマンドを確認します。
command -v cd
type cd
さらにPATHも表示してみましょう。
echo $PATH
Linuxはコマンド名だけを暗記するより、実際に実行して結果の違いを見る方が理解しやすいです。
コマンドの場所を調べる方法まとめ¶
今回の記事では、Linuxでコマンドの場所を調べる方法について解説しました。
まず覚えておきたいのは次の4つです。
which ls
command -v ls
type ls
whereis ls
whichはPATHから実行ファイルを探したいとき、whereisは実行ファイルやマニュアルなどをまとめて確認したいときに使えます。
さらに、シェル組み込みやエイリアスを含めて実際に何が実行されるのか確認したい場合は、command -vやtypeが便利です。
コマンドが見つからない、想定と違うバージョンが動くといったトラブルでも役立つので、実際に使いながら覚えてみてください。
さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。
「Linuxの実践的な内容を学習したい」、「コマンドを打ちながらLinuxを学習したい」
そのような方は、Linux入門講座から学習できます。
ネットワークを実際に操作しながら学びたい方は、ネットワーク講座も用意しています。
↓InfraAcademyの講座の一部です。

インフラエンジニアに必要な知識が学習できます。
参考:Linuxのコマンド練習用サイトのInfraAcademyを作成しました。【Linuxのコマンドをブラウザで練習しよう】



