16
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

改めてLinuxコマンドを理解する[環境変数について]

Posted at

はじめに

こんにちは!ITスクールRareTECHにてCS(Customer Support)を担当している池村です。今回の記事はLinuxのPATHについてです。ここの理解がないと、シェル上でコマンドがどう実行されるかわからないという状態になります。

この記事では、環境変数について初学者でもわかるように解説していきます。

bb1d71f9-ccd8-4d46-86c7-2390e1e48244_720.png

PATH(パス)について

まず、Linuxでは/(ルート)ディレクトリが最上位にあり、その下に根のようにディレクトリやファイルが置かれています。これは、Linuxで標準的に使えるlscatコマンド等も例外ではなく、どこかのディレクトリにコマンドの実行ファイルが置かれています

ではlsなどのコマンドはなぜ使えるのでしょうか?
シェルはコマンドが実行されると、そのコマンドの実行ファイルを探しにいきます。どういったところを探しに行くかというと、PATHと呼ばれる環境変数に登録されたディレクトリを順番に確認し、その中からそのコマンドの実行ファイルを見つけています。

たとえばlsの実行ファイルがどこにあるのか?というお話しですが、whichコマンドで特定することができます。

lsの場所を確認
which ls

# 実行結果
/bin/ls

Macの方は同じように上記のコマンドを叩くことができますので、ターミナル上で実行してみてください。
image.png

どうやら、lscatコマンドは/binのディレクトリ以下にあるようです。

まだPATHの話をしているわけではありません。
実際にシェルに登録してあるPATHを確認する時は、以下のコマンドで確認ができます。

PATHの確認方法
echo $PATH

上記のコマンドの実行結果に、/binがあるはずです。
この/binのディレクトリがPATHという環境変数に登録されているおかげで、lscatコマンドが使えるようになっています。

ただこのままでは横並びにディレクトリが並んでいて、とても見にくいと思います。

PATHの表示結果の例
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/...

一応:で区切られているので、このままでもわかるのですが、少し表示結果を整えていきましょう。

PATHの表示結果を整える

ホームディレクトリにある、.zshrcファイルを開いていただき、以下の記述を追加します。

.zshrcにaliasを追加
alias path="echo $PATH | tr ':' '\n'"

上記のaliasを設定した後は、ファイルを保存して閉じてください。

設定を反映させる
source ~/.zshrc

これでpathとシェル上で叩くと、横並びだった表示が改行されるようになります。

改行されて表示される
path

image.png

だいぶ見やすくなりましたね!😆

環境変数ってなに?

さて、ここまでの説明で肝心の環境変数とは何か?を解説していなかったですね。
環境変数とは何かを理解していきましょう。

環境変数とは、シェルや特定のプログラムが利用する設定情報を保持する変数です。

PATHは環境変数の1つになります。

様々な環境変数が登録されているので、まずは一覧で見ていきましょう。

環境変数の一覧を確認
printenv
# or
env

これを叩くことによって、環境変数の一覧を表示することができます。

一つ一つを確認するには
echo $SHELL
echo $PATH
echo $HOME
echo $USER

これらの変数は、システムやユーザーごとの設定情報を格納するのに使われています。

もちろん、環境変数を自身で登録することも可能です。

環境変数の登録と使用(一時的)

環境変数を登録する際は、exportを使います。

環境変数の登録方法
export MY_VAR="test"
echo $MY_VAR
# 実行結果
test

登録解除をしたい場合は以下のコマンドで可能です。

unsetを使う
unset MY_VAR

この環境変数は一時的な登録になります。永続的に登録しておきたい場合はまた違う方法となりますのでご注意ください。

環境変数の登録と使用(永続的)

永続的に使いたい場合は、.zshrcに登録する必要があります。

.zshrcに環境変数を登録
echo 'export MY_VAR="test"' >> ~/.zshrc

この場合、環境変数を削除するには、.zshrcからexport MY_VAR="test"の記述を消す必要があります。

変数の定義と使用方法の違い

通常のプログラムと、シェルでの変数定義は定義の方法は違いますが、やっていることは一緒です。

Pythonの変数
home = "test"
print(home)
シェルの変数
home="test"
echo $name

よくプログラムの内部で使われる.envファイルとの違い

さて、実際に開発をするようになると、.envというファイルに、プログラムで利用する環境変数を登録しておいて使う場面が出てきます。

まず結論からいいますと、.env は「プログラム用の環境変数」、シェルの export は 「シェル全体で有効な環境変数」 という違いになります。

よく使われるような.envの環境変数は以下になります。

  • DBの認証情報
  • 外部APIの認証情報
  • ポート番号
  • クラウドなどの外部サービスの認証情報

シェル全体に影響を与えないためにも、プログラム内で使う環境変数は別にするのが一般的です。

コードをGithubで管理している場合、.gitignoreと呼ばれるファイルに、.envを記述しておかないと、機密情報が漏れるのでお気をつけください。

おわりに

今回は環境変数について解説しました。
シェルスクリプトなどを書き始めると、この辺りの変数はよく利用するようになります。ただ、初学者はシェル上で使われる変数なんだな〜くらいの認識で大丈夫です。

16
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?