環境構築とかで「パスを通す」といった用語がサラッと出てくるが、
一体どういう理屈で何をすることなのかを解説する。
前提知識
「パスを通す」を理解するためには、Linuxコマンドがどのように実行されるかの前提知識が必要。
標準コマンドのデータはどこにあるのか
ls
コマンドなどのLinuxに標準実装されているコマンドは、
そのプログラムファイルがPC内のどこかに配置されている。
「ls
」とコマンドを打つと、実際はそこに書かれたプログラムが実行されるだけである。
その場所を特定するためにはwhich
コマンドを利用する。which
コマンドは、コマンドの実行ファイルの場所を特定するためのコマンドである。
$ which ls
/bin/ls
$ which less
/usr/bin/less
大抵の標準コマンドは「/bin
」or「/usr/bin
」ディレクトリに配置されている。
コマンドの実行方法
本来コマンドを実行するときは、そのファイルのパスをしっかりと指定しなければならない。
例えば、ls
コマンドの場合、本当は以下のどちらかで実行する必要がある。
# 絶対パスで実行
$ /bin/ls
# 相対パスで実行
$ pwd
/Users/username
$ ../../bin/ls
ただ、この場合次の問題が発生する。
- 相対パス指定:自分が居るディレクトリによって実行コマンドが変わってしまう
- 絶対パス指定:コマンド名が長い
この問題を解決するための仕組みが、パスという仕組みである。
パスとは
「パスを通す」のパスとは何かという問題だが、これは環境変数の「PATH
」のことである。
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
これは、区切り文字「:
」でプログラムファイルのありかが書かれているだけである。
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/Library/Apple/usr/bin
コマンドが実行されたときは、ここに記載されたディレクトリから検索される。
ls
というコマンドを実行した場合
/usr/local/bin/ls
があるか探す→ない/usr/bin/ls
があるか探す→ない/bin/ls
があるか探す→ある→中身のプログラムが実行される
という流れでコマンドは実行される。
パスを通すとは
ここまで読んでいればある程度察しがつくと思うが、
「パスを通す」とは、環境変数$PATH
にコマンド検索対象のディレクトリを追加するということである。
nodebrewなどを利用してnodeのバージョンを操作する場合を例に考えると、
実際のnodeコマンドの場所は/Users/username/.nodebrew/current/bin/node
に配置される。
そのため、node
とコマンドを打った場合は/Users/username/.nodebrew/current/bin
からコマンドを検索して欲しい。
これを実現するために、環境変数$PATH
に/Users/username/.nodebrew/current/bin
を追加する。
# 最初は追加されていない
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
# パスの先頭にnodebrewのコマンドパスを追加
$ export PATH=~/.nodebrew/current/bin:$PATH
# もう一度確認してみると、追加されている
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
/Users/username/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
まとめ
- パスを通すとは、コマンドを使えるようにする作業
- コマンドは、ただのプログラムが書かれたファイルである