JAVAをインストールした時によく聞く「PATH」を通す。がよく分からなかったので調べてみました。
■コマンドの実行ファイル
PATHの話の前に、普段我々がLinuxで使っているコマンド(cdやls等の)がどの様に実行されているかを理解する必要があります。
コマンドを実行する際、実際はShell※が実行ファイルを読み込んでいます。
例えば、「ls」コマンドであれば、実際には/bin/lsに格納されている実行ファイルをShellが読み込み実行しています。
ですので、lsまたは/bin/lsのどちらも同じことを行なっています。
※ユーザの命令をカーネルに伝える役割を持つ。LinuxのスタンダードなShellとしてbashがある。
しかし、頻繁に利用するコマンドを毎回パスで指定して実行するのは面倒過ぎます。そこでコマンド検索パスを使うことでコマンドだけで実行できるような仕組みがあります。
■コマンド検索パス
shellがコマンドを検索するためのパス。
コマンドを実行する際に、大量のディレクトリ内のファイルを検索していると時間がかかります。
そのため、コマンドの実行ファイルを格納しているディレクトリをコマンド検索対象のパスとして指定して置くことで効率的に実行ファイルを見つける事ができます。
コマンド検索パスは環境変数「PATH」に格納されており、内容は以下のコマンドで確認が出来ます。
(環境変数はシステム全体で利用される変数)
——————————————
#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
——————————————
パスは「:」で区切られるため、コマンド検索パスとして以下のパスが設定されていることが分かります。
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
コマンド検索パスは前から順番に検索されるため、同じコマンドがあっても先に見つかった方が実行されます。
■コマンドの検索
特定のコマンドのパスを知りたい場合は
which コマンド名
を実行することでコマンドのPATHを調べることができます。
■コマンドの優先順位
実はコマンド実行パス以外にもコマンドを実行させる方法があります。
・エイリアス
長いコマンドやコマンドのオプションを短いコマンドに置き換える。
lsはこれに当たります。
#which ls
を実行すると以下の結果が得られますが、これは、'ls -F --color=auto’というコマンドをlsだけで実行できる様に設定されています。また、lsのパスは/bin/lsであることも分かります。
—————————————
alias ls='ls -F --color=auto'
/bin/ls
—————————————
・ビルドインコマンド(組み込みコマンド)
/bin等に格納されておらず、Shellに組み込まれているコマンド。
コマンドが実行される際の優先順位は以下の通りです。
・エイリアス
・ビルドインコマンド
・外部コマンド(Shellに組み込まれていないコマンド、これまで説明していたディレクトリに格納されているコマンド)
外部コマンドは、“パス名付きで実行する”ことで、ビルトインコマンドやエイリアスよりも優先させることが可能です。
自分が使っているコマンドが上記3つのどれに当たるかを調べるには
type コマンド名
を実行します。
—————————————
# type cd
cd はシェル組み込み関数です
# type ls
ls は `ls --color=auto' のエイリアスです
# type ss
ss は /usr/sbin/ss です
—————————————
■JAVAのPATHを通す
ここまで来てやっとJAVAのPATHを通すの意味が理解できます。
JAVAの実行に使われるプログラムはJAVAをインストールしたディレクトリ配下のbinに格納されているため、それらを利用する際に毎回パスを指定するのは面倒なので、コマンド検索パスにbinのパスを記載しておけばプログラムの実行が楽になる、という訳なのですね。
パスを追加するとこんな感じ
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8.0_131/jre/bin:/root/bin
以上でした。
JAVAのPATHを通すって何?