/usr ディレクトリが参照できない状態でも、一部のコマンドが実行できるのは何故か？


### 事象

1.rhel7.5環境にてLVを作成  
2.LV上にファイルシステムを作成  
3.マウントポイント /usr9を作成  
4./usr9にLVをマウント(コマンド入力ミス)  
正) mount /dev/vg/lvol1 /usr9  
誤) mount /dev/vg/lvol1 /usr

### 影響

/usr配下のコマンド実行不可。ほとんどのコマンドは、/usr配下をリンク参照。

### 対処

・pwdとechoが実行可能なことを確認。  
・強制的にカーネルパニック実行によるリブート実施  
echo c > /proc/sysrq-trigger

※顧客環境下のため、即時的にVM再起動は不可であり、苦肉の策でカーネルパニックにたどり着く。

### 確認したいこと

echoコマンド等が、上述の状況で実行可能であった理由を知りたい。

リブートによる復旧後、コマンドpathを調査したが/usr配下を参照していることがわかっている。

なお、busyboxの導入は未実施の環境。




### 原因

bash や zsh などのシェルには組み込みコマンドがあります。bashのベースとなった Bourne Shellにもありました。組み込みコマンドは,
当然？ `/usr/bin` など参照しません。`/usr` が使えなくなっても利用可能です。(シェルが動いてる状態ならば)

### 組み込みコマンド

組み込みコマンドの一覧は `help` コマンドにて調べることができます。  
また, `type` コマンドで組み込みか外部コマンドかを調べることもできます

[code]

    $ type cd
    cd はシェル組み込み関数です
    
    $ type man
    man は /usr/bin/man です
    
    $ help
    GNU bash, バージョン 5.0.17(1)-release (x86_64-pc-linux-gnu)
    これらのシェルコマンドは内部で定義されています。`help' と入力して一覧を参照してください。
    `help 名前' と入力すると `名前' という関数のより詳しい説明が得られます。
    
    〜 (以下略)
    
[/code]

### 存在理由

組み込みコマンドになっている理由は, いくつかの場合があります。高速化, あるいはそもそも組み込みコマンドでないと実行できない場合も  
(例えば `cd` コマンド … 外部コマンドだと実行終了後に元に戻ってしまうため)

