UnixのPATHについて
Unixでなにかアプリケーションをインストールするとき、「パスを通す」ってよく言いますよね。 この「パスを通す」の意味、今までよく知らずに使っていたのでちゃんと調べてみました。
パスとは
Unixにおけるパスは、2種類あります。
- ファイルパス
- コマンドサーチパス
ファイルパス
ファイルパスとはそのまま、ファイルパスです。おわり。
あ、コレじゃダメですか
WinでもUnixでも、ファイルシステム
と言うものがあって、コレはファイル・ディレクトリの階層構造
を実現しているものです。
たとえば、Foo
というディレクトリの中にBar
というディレクトリがあったとします。
でも、存在するのは知っていても住所を知らなければアクセスできません。
現実もアイドルの家がどこかにあるのは知っていても住所を知らなければ凸できないのと同じです。
なので、それぞれのファイル・ディレクトリには住所が必要なわけですね。この住所の代わりをするのがファイルパスです。
たとえば、先ほどの
だったら、Foo/bar/..
というのがファイルパスになります。
もっと細かい話?知らん!(普段から使ってるせいでよくわかってなくても使える
ものなんですなぁ。)
コマンドサーチパス
今回の題目の「パスを通す」はこのコマンドサーチパスが該当します。
Unixのターミナルには、様々なコマンドがありますよね。cd
, echo
などのビルトインコマンド、
そして、vim
, rails
, gcc
等何かしらのパッケージやアプリケーションをインストールすることで使えるコマンド。
後者のパッケージやアプリケーションをインストールすることで使えるコマンドは、実行ファイルを実行することで使えるのですが、
この実行ファイルが存在するディレクトリをターミナルが知らなければ使えません。
知らないものは使えないわけです。
なので、この実行ファイルが存在するディレクトリをターミナルに教えてあげる必要があります。
コレが「パスを通す」ということです。
パスを通すと何が変わるの?
コマンドが使えるようになります
本ブログはRubメインなので、Rubyのバージョン管理ツールのrbenv
を例に上げてみると
パスを通さないと、rbenv
と言ってもコマンドが見つからないよ!とbashに怒られてしまいます。
$ rbenv bash: rbenv: command not found...
ちなみに、rbenvは~/.rbenv
にgit clone
しているので、
$ ~/.rbenv/bin/rbenv rbenv 1.0.0-21-g9fdce5d Usage: rbenv <command> [<args>] Some useful rbenv commands are: commands List all available rbenv commands local Set or show the local application-specific Ruby version global Set or show the global Ruby version shell Set or show the shell-specific Ruby version install Install a Ruby version using ruby-build uninstall Uninstall a specific Ruby version rehash Rehash rbenv shims (run this after installing executables) version Show the current Ruby version and its origin versions List all Ruby versions available to rbenv which Display the full path to an executable whence List all Ruby versions that contain the given executable
フルパスを使えば呼び出せます。
コレだと使いにくいよね。
というわけで、よく紹介されている通りにPATHを通してみます。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile $ echo 'eval "$(rbenv init -)"' >> ~/.profile $ exec $SHELL -l
こうすることで、rbenv
と打つだけでターミナルがrbenvの実行ファイルを探して起動してくれる様になります。
$ rbenv rbenv 1.0.0-21-g9fdce5d Usage: rbenv <command> [<args>] Some useful rbenv commands are: commands List all available rbenv commands local Set or show the local application-specific Ruby version global Set or show the global Ruby version shell Set or show the shell-specific Ruby version install Install a Ruby version using ruby-build uninstall Uninstall a specific Ruby version rehash Rehash rbenv shims (run this after installing executables) version Show the current Ruby version and its origin versions List all Ruby versions available to rbenv which Display the full path to an executable whence List all Ruby versions that contain the given executable See `rbenv help <command>' for information on a specific command. For full documentation, see: https://github.com/rbenv/rbenv#readme
パスの通し方
パスの通し方は、bash_profile
, bash_rc
等の設定ファイルに直接記述する方法、
rbenvの例のようにechoでprofileに書き出す方法があります。
bashrc
はbash
を開くたびに実行する処理を書くためのものなので、今回のパスを通す用途には適さないため、
bash_profileに追加するのが良いみたいですね。
あっ・・・もしかして・・・とUnix不慣れな頃に作ったbashrcを見なおしてみたらPATHの記述してました( ゚∀゚)・∵. グハッ!!
qiita.com
PATHの通し方ですが、下が基本です。
export PATH=<コマンドサーチパスに含めたいパス>
プログラミングの感覚からすると、
export PATH=xxxx export PATH=yyyy
とやると、代入されちゃうんじゃ?と思いそうですが、ちゃんとそれぞれがPATHに追加されるようです。
パスを確認するときはecho $PATH
とターミナルに入力すれば表示されます。
$echo $PATH /home/foo/.rbenv/shims:/home/foo/.rbenv/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/foo/.local/bin:/home/sueda/bin:/home/foo/.local/bin:/home/foo/bin
それぞれのパスは:
で区切られます。
なので、bash_profile
に入力するときにも下のように区切って入力することができます。
export PATH=xxxx:yyyy
参考文献
UNIX入門 - MacWiki
パス(PATH)の確認と設定方法は? - Pocketstudio.jp Linux Wiki