Infra Engineer

コマンドのパスや情報の表示~typeコマンド・whichコマンド・whereisコマンド~
2022.08.31
Lv1

コマンドのパスや情報の表示~typeコマンド・whichコマンド・whereisコマンド~

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、typeコマンド、whichコマンド、whereisコマンドについて解説します。
コマンドの情報を表示するコマンドですが、それぞれに少し違いがあります。

・typeコマンド
・whichコマンド
・whereisコマンド
・まとめ
・確認問題

typeコマンド

typeコマンドは、指定したコマンドがどのように解釈されているかを確認することができます。
解釈の種類としては「実行ファイル」「シェルの組み込みコマンド」「エイリアス」「予約語」などがあげられます。

typeコマンド
意味 コマンドがシェルにどう解釈されているかを確認する。
書式 type [オプション] コマンド名

主なオプションは以下です。

オプション 説明
-a 指定したコマンドのすべての解釈を表示する。
-p 指定したコマンドのパスのみを表示する。
-t 指定したコマンドの種類のみを表示する。
例①)
「cat」コマンドの解釈を表示。
[root@localhost ~]# type cat
cat は /usr/bin/cat です

catコマンドは、実行ファイルの存在するコマンドです。
catコマンドをシェルで実行した場合、「/use/bin/cat」が実行されているということになります。

例②)
「cd」コマンドの解釈を表示。
[root@localhost ~]# type cd
cd はシェル組み込み関数です

cdコマンドは、シェルの組み込みコマンドです。

例③)
「if」の解釈を表示。
[root@localhost ~]# type if
if はシェルの予約語です

「if」はシェルの予約語です。
シェルスクリプトで使用して、シェル上で特別な意味を持つ文字列となります。

例④)
「ls」コマンドの解釈を表示。
[root@localhost ~]# type ls
ls は `ls --color=auto' のエイリアスです

lsコマンドはエイリアスです。(ディストリビューションによって異なります)
lsコマンドをシェル上で実行した場合、「ls –color=auto」と解釈され実行されていることになります。

例⑤)
「cd」「ls」コマンドのすべての解釈を表示。(-a)
[root@localhost ~]# type -a cd
cd はシェル組み込み関数です
cd は /usr/bin/cd です
[root@localhost ~]# type -a ls
ls は `ls --color=auto' のエイリアスです
ls は /usr/bin/ls です

「-a」オプションを使用すると、そのコマンドのすべての解釈を表示できます。
コマンドの実行の際、シェルは最初にエイリアス、続いて組み込みコマンド、環境変数PATHにセットされているパスの順に探し、見つけたものを実行する仕組みになっています。
「cd」コマンドには実行ファイルも存在していますが、組み込みコマンドとしてのcdが優先されています。
「ls」コマンドは実行ファイルの存在する外部コマンドですが、エイリアスとしての解釈が優先して表示されていたということです。

 

「/usr/bin/ls」の実行ファイルを直接実行すると、色が消えています。
こちらが本来のlsコマンドです。


whichコマンド

whichコマンドは、コマンドの絶対パスを表示します。

which
意味 コマンドの絶対パスを表示する。
書式 which コマンド名
例)
「ls」コマンドの絶対パスを表示。
[sak@localhost ~]$ which ls
/usr/bin/ls

lsコマンドの実行ファイルの絶対パスを調べることができます。
whichコマンドは環境変数PATHに基づいて検索を行います。PATHに通っていない場所に存在するコマンドは調べることができません。

whichコマンドでコマンドを調べた際に、ディストリビューションによってはエイリアスも表示される場合があります。

[sak@localhost ~]$ which ls
alias ls='ls --color=auto'
        /usr/bin/ls

これに関しては、whichコマンド自体をwhichコマンドで調べることによって理由が分かります。

[sak@localhost ~]$ which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
        /usr/bin/alias
        /usr/bin/which

whichコマンドを実行した際に「/usr/bin/alias」コマンドと「/usr/bin/which」コマンドが実行されるようになっていることが分かります。
よって、先ほどlsコマンドのエイリアスと絶対パスが両方表示されていたということになります。


whereisコマンド

whereisコマンドは、コマンドの実行ファイル、ソースコード、マニュアルファイルのパスを表示します。

whereis
意味 コマンドの実行ファイル、ソースコード、マニュアルファイルのパスを表示する。
書式 whereis コマンド名
例)
「ls」コマンドの実行ファイル、ソースコード、マニュアルファイルのパスを表示。
[sak@localhost ~]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

「/usr/bin/ls」が実行ファイル、「/usr/share/man/man1/ls.1.gz」がソースコードファイル、「/usr/share/man/man1p/ls.1p.gz」がマニュアルファイルのパスです。


まとめ

今回は、typeコマンド、whichコマンド、whereisコマンドについて解説しました。
それぞれの特徴をまとめておきます。

コマンド 書式 説明
type type コマンド名 コマンドの解釈を表示。(実行ファイル、組み込みコマンド、エイリアス、予約語)
which which コマンド名 コマンドの絶対パスを表示。
whereis whereis コマンド名 コマンドの実行ファイル、ソースコード、マニュアルファイルのパスを表示。

例えばsudoコマンドの設定をする際に「/etc/sudoers」を編集することになりますが、ここにコマンドの絶対パスを記載する箇所があります。
そのようなときにこれらのコマンドを使用することで、絶対パスを知ることが可能です。
基本的にはこのような用途で使用するため、実務においては「which」コマンドが最も使用機会が多いです。

最後に、確認問題で今回の記事で得た知識を確かめましょう。


確認問題

問題

次のコマンドのうち、コマンドの実行ファイルの絶対パスを表示するものはどれか。(2つ選択)

A) which
B) locate
C) find
D) pwd
E) type

解答
答え:A、E

A) 正解です。コマンドの絶対パスを表示します。
B) ファイルの検索のコマンドです。
C) ファイルの検索のコマンドです。
D) カレントディレクトリの絶対パスを表示するコマンドです。
E) 正解です。コマンドの絶対パスを表示することができます。