【Linux】パスを通すとは

Linuxコマンド ターミナル操作

環境構築とかで「パスを通す」といった用語がサラッと出てくるが、
一体どういう理屈で何をすることなのかを解説する。

前提知識

「パスを通す」を理解するためには、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というコマンドを実行した場合

  1. /usr/local/bin/lsがあるか探す→ない
  2. /usr/bin/lsがあるか探す→ない
  3. /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

まとめ

  • パスを通すとは、コマンドを使えるようにする作業
  • コマンドは、ただのプログラムが書かれたファイルである
タイトルとURLをコピーしました