はじめに
こんにちは!ITスクールRareTECHにてCS(Customer Support)を担当している池村です。今回の記事はLinuxのPATHについてです。ここの理解がないと、シェル上でコマンドがどう実行されるかわからないという状態になります。
この記事では、環境変数について初学者でもわかるように解説していきます。
PATH(パス)について
まず、Linuxでは/
(ルート)ディレクトリが最上位にあり、その下に根のようにディレクトリやファイルが置かれています。これは、Linuxで標準的に使えるls
やcat
コマンド等も例外ではなく、どこかのディレクトリにコマンドの実行ファイルが置かれています。
ではls
などのコマンドはなぜ使えるのでしょうか?
シェルはコマンドが実行されると、そのコマンドの実行ファイルを探しにいきます。どういったところを探しに行くかというと、PATHと呼ばれる環境変数に登録されたディレクトリを順番に確認し、その中からそのコマンドの実行ファイルを見つけています。
たとえばls
の実行ファイルがどこにあるのか?というお話しですが、which
コマンドで特定することができます。
which ls
# 実行結果
/bin/ls
Macの方は同じように上記のコマンドを叩くことができますので、ターミナル上で実行してみてください。
どうやら、ls
やcat
コマンドは/binのディレクトリ以下にあるようです。
まだPATHの話をしているわけではありません。
実際にシェルに登録してあるPATHを確認する時は、以下のコマンドで確認ができます。
echo $PATH
上記のコマンドの実行結果に、/bin
があるはずです。
この/bin
のディレクトリがPATHという環境変数に登録されているおかげで、ls
やcat
コマンドが使えるようになっています。
ただこのままでは横並びにディレクトリが並んでいて、とても見にくいと思います。
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/...
一応:
で区切られているので、このままでもわかるのですが、少し表示結果を整えていきましょう。
PATHの表示結果を整える
ホームディレクトリにある、.zshrcファイルを開いていただき、以下の記述を追加します。
alias path="echo $PATH | tr ':' '\n'"
上記のaliasを設定した後は、ファイルを保存して閉じてください。
source ~/.zshrc
これでpath
とシェル上で叩くと、横並びだった表示が改行されるようになります。
path
だいぶ見やすくなりましたね!😆
環境変数ってなに?
さて、ここまでの説明で肝心の環境変数とは何か?を解説していなかったですね。
環境変数とは何かを理解していきましょう。
環境変数とは、シェルや特定のプログラムが利用する設定情報を保持する変数です。
PATHは環境変数の1つになります。
様々な環境変数が登録されているので、まずは一覧で見ていきましょう。
printenv
# or
env
これを叩くことによって、環境変数の一覧を表示することができます。
echo $SHELL
echo $PATH
echo $HOME
echo $USER
これらの変数は、システムやユーザーごとの設定情報を格納するのに使われています。
もちろん、環境変数を自身で登録することも可能です。
環境変数の登録と使用(一時的)
環境変数を登録する際は、export
を使います。
export MY_VAR="test"
echo $MY_VAR
# 実行結果
test
登録解除をしたい場合は以下のコマンドで可能です。
unset MY_VAR
この環境変数は一時的な登録になります。永続的に登録しておきたい場合はまた違う方法となりますのでご注意ください。
環境変数の登録と使用(永続的)
永続的に使いたい場合は、.zshrcに登録する必要があります。
echo 'export MY_VAR="test"' >> ~/.zshrc
この場合、環境変数を削除するには、.zshrcからexport MY_VAR="test"
の記述を消す必要があります。
変数の定義と使用方法の違い
通常のプログラムと、シェルでの変数定義は定義の方法は違いますが、やっていることは一緒です。
home = "test"
print(home)
home="test"
echo $name
よくプログラムの内部で使われる.envファイルとの違い
さて、実際に開発をするようになると、.envというファイルに、プログラムで利用する環境変数を登録しておいて使う場面が出てきます。
まず結論からいいますと、.env は「プログラム用の環境変数」、シェルの export は 「シェル全体で有効な環境変数」 という違いになります。
よく使われるような.envの環境変数は以下になります。
- DBの認証情報
- 外部APIの認証情報
- ポート番号
- クラウドなどの外部サービスの認証情報
シェル全体に影響を与えないためにも、プログラム内で使う環境変数は別にするのが一般的です。
コードをGithubで管理している場合、.gitignoreと呼ばれるファイルに、.envを記述しておかないと、機密情報が漏れるのでお気をつけください。
おわりに
今回は環境変数について解説しました。
シェルスクリプトなどを書き始めると、この辺りの変数はよく利用するようになります。ただ、初学者はシェル上で使われる変数なんだな〜くらいの認識で大丈夫です。