シェルのコマンドは2種類ある
シェルのコマンドには、内部コマンド(組み込みコマンド)と外部コマンドがある。
コマンドの種類はtype
コマンドで確認できる。
type <コマンド名>
内部コマンド
内部コマンドは、シェルの機能として実装されているコマンドである。たとえば、cd
, echo
, pwd
, type
などが該当する。
cd
コマンドが内部コマンドかtype
コマンドで確認すると、以下のように表示される。
$ type cd
cd is a shell builtin
これより、cd
コマンドはシェルの内部コマンドであるとわかる。
外部コマンド
外部コマンドは、シェルの外部にあるプログラムファイルとして実装されているコマンドである。たとえば、ls
, cat
, grep
, find
などが該当する。
ls
コマンドが外部コマンドかtype
コマンドで確認すると、以下のように表示される。
$ type ls
ls is /usr/bin/ls
これより、ls
コマンドはシェルの外部にあるプログラムファイル/usr/bin/ls
として実装されていることがわかる。つまり、ls
コマンドが実行されるとき、シェルは/usr/bin/ls
を実行する。
入力されたコマンドが内部コマンドでない場合、シェルは$PATH
変数に設定されたディレクトリを順に検索し、最初に見つかったファイルを実行する。$PATH
変数に設定されたディレクトリは、echo $PATH
で確認できる。
$ echo $PATH
/vscode/vscode-server/bin/linux-x64/89de5a8d4d6205e5b11647eb6a74844ca23d2573/bin/remote-cli:/usr/local/nvm/versions/node/v20.14.0/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
コロン区切りだと見づらいので、改行区切りで表示すると、次のようになる。
$ echo $PATH | tr ':' '\n'
/vscode/vscode-server/bin/linux-x64/89de5a8d4d6205e5b11647eb6a74844ca23d2573/bin/remote-cli
/usr/local/nvm/versions/node/v20.14.0/bin
/usr/local/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
シェルはこれらのディレクトリを順に検索し、最初に見つかったファイルを実行する。