[Linux] パス=環境変数（$PATH）を通すとは

# まとめ
- **パスを通す=環境変数（$PATH）の記述を変えて、コマンドサーチパスを追加すること**
- **パスが通ってない=環境変数（$PATH）のディレクトリ検索したが、該当のコマンドが存在しない**

# 環境
MacBook Pro (2.3 GHz 8コアIntel Core i9)
macOS 14.0（23A344）
Homebrew 4.3.8
gh 2.52.0

# 目次
- [環境変数（$PATH）の使われ方](#環境変数（$PATH）の使われ方)
- [環境変数（$PATH）が通っている=パスが通っているとは](#環境変数（$PATH）が通っている=パスが通っているとは)
- [環境変数($PATH)の確認](#環境変数($PATH)の確認)
- [環境変数($PATH)を通す=パスを通す](#環境変数($PATH)を通す=パスを通す)


# 環境変数（$PATH）=パスの使われ方
本来、Linuxでは、コマンドを実行する際には、本来`/usr/bin/passwd`のように、フルパス、すなわちコマンド(実行ファイル)があるディレクトリまですべて含めてコマンドを指定する必要がある。

### `git`というコマンドを入力した時
1. `/usr/local/bin/git`という実行ファイルがあるか確認し、あれば実行する
1. なかった場合、`/usr/local/sbin/git`という実行ファイルがあるか確認し、あれば実行する
1. なかった場合、`/usr/bin/git`という実行ファイルがあるか確認し、あれば実行する
1. 環境変数PATHに書かれているディレクトリの数だけくり返す (詳細は[環境変数($PATH)の確認](#環境変数($PATH)の確認))
1. 実行ファイルがなかった場合、`command not found: git`というエラーが出力される

# 環境変数（$PATH）が通っている=パスが通っているとは
`/usr/bin/passwd`のように、フルパスを指定しなくても、そのコマンド(実行ファイル)ある特定のディレクトリに対して探しに行ける状態。

### `git`というコマンドを使用したい時
1. `user/bin/git`を指定する
    ~~~sh
    /usr/bin/git
    ~~~

1. `git`コマンド(実行ファイル)が実行できる
    ~~~sh
    git
    ~~~

### パスが通った状態で、`git`コマンド(実行ファイル)した際に参照すると下記をファイルを自動で辿る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/701a1c04-52f2-7ed1-abc7-a838f4332408.png)


# 環境変数($PATH)の確認
**環境変数($PATH)の中身次第でコマンド(実行ファイル)を検索する順番が決まる**

1. `echo`コマンド`$PATH`の中身を確認する
    ~~~sh
    echo $PATH
    ~~~

1. 出力結果
    ~~~sh
    // 出力結果
    /usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin
    ~~~

1. 上記の出力結果を`:`区切りで改行
    ~~~sh
    /usr/local/bin:
    /usr/local/sbin:
    /usr/bin:
    /bin:
    /usr/sbin:
    /sbin:
    /opt/homebrew/bin
    ~~~

# 環境変数($PATH)を通す=パスを通す
## 手段1
- homebrewやnodenvを有効化するときなど、特定のディレクトリにいろんなプログラムが配置されるような場合に、この方法をとることが多い
- `.zshrc`などのファイルは、シェルを起動するたびに読み込まれるので、このファイルにPATH追加のためのコマンドを書くことで、データを永続化できる

    ~~~sh
    vim <追加したいディレクトリ名>
    ~~~
    ~~~sh
    export PATH=$PATH:<追加したいディレクトリ名>
    ~~~
- `vim`コマンドで`.zshrc`を開く
    ~~~sh:例1
    vim ~/.zshrc
    ~~~
- `i`を押下し、インサートモードにし、`export`コマンドを記載する
    ~~~sh:例1
    export PATH=$HOME/.nodebrew/current/bin:$PATH
    ~~~
- `esc`を推して、`:wq`と入力性て、エンターを押す

## 手段2
- `echo`コマンドを使用して`.zshrc`ファイルに書き込む
    ~~~sh
    echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc
    ~~~

## 手段3
- `.zshrc`ファイルに直接書き込む
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/555408f6-3af9-0d4b-aed5-fc77a207179d.png)

## 保存した環境変数($PATH)を確認する
~~~sh
cat ~/.zshrc
~~~
または
~~~sh
cat .zshrc
~~~


## 保存した環境変数($PATH)を有効化する
~~~sh
source ~/.zshrc
~~~
または
~~~sh
source .zshrc
~~~

# 参考リンク
- [Linux入門 ~「パスを通す」とは~](https://qiita.com/Naggi-Goishi/items/2c49ea50602ea80bf015)
- [Pathを通すとは、環境変数とは](https://qiita.com/fuwamaki/items/3d8af42cf7abee760a81)
- [パスを通す](https://linuc.org/study/knowledge/349/)
- [「PATHを通す」とは何か、改めてまとめてみた](https://zenn.dev/d0ne1s/articles/1f435463551ac2)
- [sourceコマンドについて詳しくまとめました 【Linuxコマンド集】](https://eng-entrance.com/linux-command-source)
## `echo`コマンド使用
- [macにnode.js（npm）をインストールするならnodebrewがおすすめ](https://fromscratch-y.work/blog/programming/mac-nodejs-install/#sec2-2)
## `export`コマンド使用
- [MacにNode.jsをnodebrewでインストールして環境構築【決定版】](https://qiita.com/7110/items/efe0be1be11bed1db143)