連載
» 2016年05月09日 05時00分 公開

“応用力”をつけるためのLinux再入門(8):PATHを理解して、コマンドの在りかを探してみよう (2/3)

[西村めぐみ,@IT]

ビルトインコマンドとコマンドの優先順位

 コマンドラインで使用するコマンドには、“シェル自身が備えているコマンド”もあります。これを「ビルトインコマンド(シェルの組み込みコマンド)」と呼びます(※)。

※ビルトインコマンドは「内部コマンド」と呼ぶこともあります。これに対し、シェルとは独立したコマンドは「外部コマンド」と呼びます。



 例えば、前回使用した「cd」コマンドはビルトインコマンドです。「/bin/cd」もありますが、ビルトインコマンドが優先されるため、コマンドラインで「cd」と指定した場合は、シェルの内部コマンドであるcdコマンドが実行されます。

 この他に、コマンドラインで“コマンド名として使用するもの”には、本連載第5回で簡単に触れた「エイリアス(コマンドラインエイリアス)」があります。

コマンドの優先順位どうやって決まる?

 コマンドをパス名なしで実行すると、シェルは「(1)エイリアス」「(2)ビルトインコマンド(内部コマンド)」「(3)PATHに指定されたディレクトリ」の順に、該当するコマンドを探します。

 従って、「ls」という名前でエイリアスが登録されている場合、lsコマンドを実行すると「/bin/ls」ではなく、エイリアスのlsが実行されます。CentOSでは、lsだけで常に「--color」オプション(ファイルの種類によって色分けして表示するオプション)付きで実行されるようにエイリアスが設定されています(画面2)。

画面2 画面2 「ls」と「/bin/ls」の違い

 なお、ポイントは“パス付きかどうか”なので、オプションの有無は関係ありません。「ls -l」と実行した場合も、エイリアスのlsが「-l」オプション付きで実行されることになります(※)。

※「ls -l | more」と実行した場合は色付き表示ではなくなりますが、これは「--color=auto」の指定で画面以外に出力(この場合はパイプで出力結果がmoreコマンドに渡っている)した場合は、自動で「色指定なし」になっているためです。なお、常に色付きで表示したい場合は、「ls -l --color=always | more」のように「always」を指定します。



実行するコマンドを明示したい場合には

 先ほどの例のように、外部コマンドは“パス名付きで実行する”ことで、ビルトインコマンドやエイリアスよりも優先させることができます。

 ビルトインコマンドと同名のエイリアスがある場合は「builtin コマンド名」のように「builtin」コマンドを使うことで、シェルのビルトインコマンドを明示的に実行することができます。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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