連載
» 2016年05月20日 05時00分 UPDATE

Linux基本コマンドTips(13):【 type 】コマンド――シェルがどのコマンドを起動しているかを知る

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「type」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、どこにあるコマンドが実行されているかを知るための「type」コマンドです。

typeコマンドとは?

 コマンドラインで「cd」コマンドや「ls」コマンドを実行すると、シェルは最初にエイリアスを、続いてシェルのビルトインコマンド(組み込みコマンド)に該当する名前のコマンドを探し、それがない場合は環境変数PATHにセットされているパス(コマンドサーチパス)を先頭から順に探し、見つけたものを実行します。

 「type コマンド名」を実行することで、シェルがどのコマンドを起動しているかを確認できます。type自身はシェルのビルトインコマンドで、sh、bashおよびzshで使用できます。

 tcshの場合は、「where」コマンドを同じ用途で使うことができます。whereコマンドの場合は、シェルが実行可能なコマンドを全て表示します(「type -a」相当:実行例2を参照)。通常、一番上に表示されたものが実行されます。


typeコマンドの書式

type [オプション] コマンド名(bash/zshの場合)

where コマンド名(tcshの場合)

※[ ]は省略可能な引数を示しています



typeコマンドの主なオプション

 typeコマンドの主なオプションは次の通りです(bashの場合)。

短いオプション 意味
-a 同名で実行可能なコマンドを全て表示する(実行例2を参照)
-f シェル関数は除外する
-P PATH内のみを探す(whichコマンドと同じ結果になる)
-p 実行されるコマンドのディスク上のファイル名を表示する(例えば、ビルトインコマンドの場合は何も表示されない)
-t 実行されるコマンドに応じて「alias」「keyword」「function」「builtin」「file」を表示する。該当するコマンドが見つからない場合は何も表示しない


どのコマンドが実行されているかを知る

 コマンドラインで「ls」と入力してコマンドを実行した際、指定したつもりのないオプションも一緒に実行されることがあります。これは同じ「ls」という名前でエイリアスが登録されているためです。

 「type ls」では、「ls」とコマンドラインで入力したときに何が実行されているのかを調べることができます。CentOSの場合は、「ls --color=auto」というエイリアスが登録されていることが分かります。「unalias ls」でエイリアスを削除した場合と結果を比較してみましょう(画面1)。

コマンド実行例

type コマンド名


ls
type ls
unalias ls
ls
type ls
画面1 画面1 「type ls」でどの「ls」が実行されているかを確認する

 エイリアスはログイン時に読み込まれる設定ファイルでセットされるので、ログインし直せばエイリアスの設定も元に戻ります。X環境の場合は、端末を開き直せば再度設定されます。

※よく使われるコマンドの場合、パス名の前に「〜is hashed」と表示されることがあります。PATHを探しに行くのではなく、既に場所を覚えている(メモリ内の「ハッシュテーブル」と呼ばれる場所に記録してある)、という意味です。





実行可能なコマンドを全て表示する

 同じ名前のコマンドが複数の場所にあるときには、「type -a コマンド名」で全てを表示することができます(画面2)。

コマンド実行例

type -a コマンド名


画面2 画面2 「type -a ls」で「ls」という名前で実行できるものを全て表示する

※CentOSでは、「/bin」は「/usr/bin」へのシンボリックリンクになっているため、「/bin/ls」と「usr/bin/ls」が表示されています。環境変数PATHで「/usr/bin」よりも「/bin」の方が先に設定されているため、「type -a」コマンドでも「/bin」が先に表示されています。





typeコマンドとwhichコマンドの違いは?

 typeはbashのビルトインコマンドです。コマンドラインで入力されたコマンドを呼び出すのはシェルの仕事なので、bashがどれを実行しようとしたかは、ビルトインコマンド、つまりbash自身が実行しているコマンドであるtypeコマンドの結果が一番正確であるといえるでしょう。

 同じような用途で使えるコマンドに「which」があります。whichコマンドはシェルとは独立したコマンド(外部コマンド)です。シェルのビルトインコマンドやエイリアスは調べず、環境変数PATHに指定された場所を先頭から確認し、見つけたものを表示しています。


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。