シェルのコマンドは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シェルはこれらのディレクトリを順に検索し、最初に見つかったファイルを実行する。