PATHが通っていないからErrorになった。という話を聞いたことありますでしょうか。これは、どういう意味でしょうか。
理解し易くするために、サーバーは様々な処理を実行してくれるコマンド群とイメージして下さい。
1. コマンドの在りか
サーバーには様々なディレクトリが存在しています。
コマンドは役割に応じて、複数のディレクトリ配下に待機しています。
例えば、下記のようなディレクトリです。
- usr/bin
- usr/sbin
- local/bin
コマンドがOSでリクエストされるのを待機しております。
2. PATHとは何か。
サーバー上で、下記コマンドを実行して下さい。
env
下記のような環境変数が出力されると思います。 ※一部抜粋
EB_ENV_NAME=ZZZZZZZZZZZZZZZZ MAIL=/var/spool/mail/ec2-user PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin PWD=/home/ec2-user LANG=ja_JP.UTF-8 HISTCONTROL=ignoredups SHLVL=1 HOME=/home/ec2-user LOGNAME=ec2-user SSH_CONNECTION=ZZZZZZZZZZZZZZZZ
その中に、 PATH=XXXX
の部分が存在するかと思います。
これが、PATHを通す。の、PATHの正体です。
3. 結局、PATHとは何か。
結局のところ、PATHとは何でしょうか。
OSにコマンドリクエストされた際に、PATHで指定された配下のコマンドを探すよ。
ということです。
つまり、このPATHに指定されていないディレクトリ配下にはコマンドを確認しにいきません。
4. PATHを通す必要がある機会
では、どんな場合にPATHを通す必要がるのでしょうか。
例えば、サーバーにnode.jsをインストールして起動するときなどに必要です。(node.jsのインストール方法によっても異なります。PATHが元々通った状態でインストールされている場合もあります。)
再度、envのPATHを確認してみます。
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
下記のディレクトリにはPATHが通っています。
- /usr/local/bin
- /usr/bin
- /usr/local/sbin
- /usr/sbin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
つまり、コマンドをリクエストされた際にPATHディレクトリ配下に確認して、コマンドが存在していれば、そのコマンドを実行してくれます。
私の環境では、この状態ではnode.jsのPATHが通っておりません。nodeはインストールされているが、コマンドがこのディレクトリに存在していないのです。
nvm use v14.19.0
した後に、再度 envのPATHを確認します。
PATH=/home/ec2-user/.nvm/versions/node/v14.19.0/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
/home/ec2-user/.nvm/versions/node/v14.19.0/bin
が追加されております。このディレクトリ配下にnodeのコマンドが存在しております。そして、このPATH追加によってコマンドを受け入れられる状態になりました。すなわち、PATHが通った状態になりました。
如何でしたでしょうか。PATHを通すとは何かについてイメージを深めて頂けましたでしょうか。