Edited at

PATHを通すとは? (Mac OS X)

More than 1 year has passed since last update.

PATHの通し方が記されている記事はよく見かけますが

「そもそもPATHを通すってどういうこと?」状態だったのでそれに関しての備忘録です。


PATHを通すとは?

コマンド検索パス(コマンドサーチパス)を追加すること。

※色々な言葉で説明されていましたが、自分はこれが理解しやすかったです。


コマンド検索パスとは?

シェルがコマンド実行ファイルを探しに行くパスのこと。

たとえば、lsというコマンドの実行ファイルは/binディレクトリに格納されており(自分の環境では)

/bin/lsと入力すると実行される。しかし、パスを指定せずにlsだけ入力しても/bin/lsと同じ実行がされる。


コマンド

# どちらのコマンドでも同じ結果が出力される。

/bin/ls
ls

これは、コマンドがパスの指定なしで入力された時、シェルがそのコマンドに対応する実行ファイルを

/bin/usr/binなどのディレクトリへ探しに行き、同じ名前の実行ファイルがあれば、それを実行してくれるからである。

今回、lsを入力された時に探しに行った/binディレクトリに同じ名前の実行ファイルが存在したため、それが実行された。

このように、コマンド入力時にシェルが実行ファイルを探しに行くパスをコマンド検索パスと言う。


コマンド検索パスの確認方法

コマンド検索パスは環境変数$PATHに設定されており、echo $PATHで確認できる。

自分の環境でecho $PATHを入力してみると、以下が出力される。


コマンド

echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin #実行結果

パスは:で区切られており、今回の例では下記のパスがコマンド検索パスとして設定されている。

/usr/local/bin

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/sbin


コマンド実行ファイルの格納場所の確認方法

whichを利用すれば指定したコマンドの実行ファイルがどこに格納されているのか確認できる。

lsコマンドの実行ファイルが/binディレクトリに格納されている場合、以下が出力される。


コマンド

which ls

/bin/ls #実行結果


同じ名前のコマンド実行ファイルが複数のコマンド検索パスに存在する場合

コマンド検索パスには優先度があり、echo $PATHで出力された左が優先される。

先ほどの例だと/usr/local/binが一番優先される。

そのため、/usr/local/bin/ls/usr/bin/lsのような同じ名前の実行ファイルが

存在する場合、/usr/local/bin/lsが実行される。

コマンドは実行されるが、意図通りの実行がされない場合、パスの優先度が原因かもしれない。


PATHを通す意味がわかったら

PATHを通しましたが、PATHを通すうえでよくわからないことがあったので投稿しました。


以上

認識が間違っていたらご指摘ください。