InfraAcademy

InfraAcademy Blog

【Linux】コマンドの場所を調べる方法とは?whichコマンド、whereisコマンドで調査する

| #Linux #コマンド
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、Linuxでコマンドがどこにあるのか調べる方法について解説します。

Linuxでは、lsgitなどが実際にはどのファイルを実行しているのか確認したいことがあります。

さらにcommand -vtypeも含め、何を使えば何が分かるのかを整理します。

Linuxでコマンドの場所を調べる方法とは?

Linuxでコマンドの場所を確認するときは、主に次のコマンドを利用できます。

コマンド 主な用途
which PATHから実行ファイルを探す
command -v シェルが実際に解釈するコマンドを確認する
type 外部コマンド、組み込み、エイリアスなど種類を確認する
whereis 実行ファイルやマニュアルなどをまとめて探す

whichコマンドで実行ファイルの場所を確認する

まずは、よく使われるwhichコマンドです。

基本的な使い方は次の通りです。

which [コマンド名]

実際にlsコマンドがどこにあるのか調べてみましょう。

which ls

実行すると、環境によって次のようなパスが表示されます。

/usr/bin/ls

または、

/bin/ls

whichコマンドで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

whereisコマンドの実行結果

環境によっては、次のような結果が表示されます。

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の構成によって異なると覚えておきましょう。

コマンドが見つからないときにも使える

whichcommand -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 -vtypeが便利です。

コマンドが見つからない、想定と違うバージョンが動くといったトラブルでも役立つので、実際に使いながら覚えてみてください。

さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。

「Linuxの実践的な内容を学習したい」、「コマンドを打ちながらLinuxを学習したい」

そのような方は、Linux入門講座から学習できます。

ネットワークを実際に操作しながら学びたい方は、ネットワーク講座も用意しています。

↓InfraAcademyの講座の一部です。

上記以外にも、DNSサーバーの構築方法や、Dockerの設定方法などさまざまな講座があります。

インフラエンジニアに必要な知識が学習できます。

InfraAcademyで学習を始める

参考:Linuxのコマンド練習用サイトのInfraAcademyを作成しました。【Linuxのコマンドをブラウザで練習しよう】

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る