環境構築とかで「パスを通す」といった用語がサラッと出てくるが、
一体どういう理屈で何をすることなのかを解説する。
前提知識
「パスを通す」を理解するためには、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 まとめ
- パスを通すとは、コマンドを使えるようにする作業
- コマンドは、ただのプログラムが書かれたファイルである