同内容の記事はたくさんありますが、やはり避けては通れないので…
環境変数PATHとは
githubなどからツールを新たにダウンロードした場合、その実行ファイルを起動するには実行ファイルのありかを直接指定する必要があります。
$ ./bowtie2-2.2.9/bowtie2
のような感じですね。
しかし ls や pwd のようにLinuxにもともと含まれるコマンドや、ssh や R のようにapt-getなどの方法でインストールしたコマンドは、パスを指定する必要なく、 ls
ssh
とタイプするだけで起動します。
なぜでしょうか。
結論から言うと、Linuxには環境変数PATHというものがあり、PATHに指定されているディレクトリ内の実行ファイルは自動的に検索されるため、絶対パスで指定しなくてもよいのです。
実行ファイルの所在を調べる
では、ls や R の実行ファイルはどこにあるのでしょうか。
which
コマンドか where
コマンドを使うと調べることができます。
$ which ls /bin/ls $ which R /usr/bin/R
ls は/bin, R は/usr/bin 内にあることがわかりました。 Linuxに元々付属するコマンドは/bin, aptなどでインストールしたものは/usr/binに含まれる傾向があります。 なお、特定のユーザのみのためにインストールされるツールの場合は /usr/local/bin にインストールされることもあります。
環境変数PATHを表示する
echo $PATH
とタイプすると、環境変数PATHに登録されているディレクトリを一覧表示できます。
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
/bin や /usr/bin が含まれていることが確認できます。 ここに表示されていないパスについては、実行ファイルを直接指定する必要があるということですね。
PATHを一時的に追加する
環境変数PATHに新たに参照ディレクトリを追加したい場合(PATHを通す と言います)、
一時的に追加する場合はコマンドライン上で以下のようにタイプします。
(ここでは上述のbowtie2を例とします)
$ export PATH=$PATH:/home/rnakato/bowtie2-2.2.9/
こうすると/home/rnakato/bowtie2-2.2.9/にPATHが通り、bowtie2とタイプするだけで実行できるようになります。 複数PATHを通したい時にはコロン(:) で挟んで併記します。
$ export PATH=$PATH:<パス1>:<パス2>:<パス3>:...
ちなみに$PATH
と最初に記載しているのは、既存のPATHを上書きしてしまわないためです。
この方法でPATHを通した場合、そのターミナルを閉じると追加したPATHも消えてしまいます。
PATHを永続的に追加する(.bashrc)
常にPATHを通したい場合はホームディレクトリにある .bashrc (または.bash_profile)に以下の行を追記します。 (ファイルが存在しない場合は新規作成で問題ありません)
export PATH=$PATH:<パス1>:<パス2>:<パス3>:...
.bashrcに書かれた設定は次回ターミナル起動時から有効になりますので、既存のターミナルで新しく追加した設定を有効にしたい場合は以下のコマンドを実行します。
$ source ~/.bashrc
同一プログラムが複数箇所にある場合
ツールによっては、ソースからインストール、aptやyumでインストール、あるいはcondaのようなツールでインストールと、
複数の方法でインストール可能なものがありますが、インストールされるディレクトリはそれぞれ異なります。
複数のPATH上に同一プログラムがインストールされている場合、最初にヒットしたPATHが優先されます。
つまり、bowtie2が/usr/bin
と /home/rnakato/bowtie2-2.2.9/
に存在し、PATHが /usr/bin:/home/rnakato/bowtie2-2.2.9/
となっていた場合、
単にbowtie2とタイプすると/usr/bin/bowtie2
が起動します。
/home/rnakato/bowtie2-2.2.9/bowtie2
のように絶対パスで記述することで好きな方を起動可能ですが、バージョンが異なる同一ツールをあちこちにインストールするのはトラブルの元ですので、
プログラムは一箇所のみのインストールに留めるべきでしょう。
(一般にaptやyumでインストールされるプログラムはバージョンが古いことが多いです)
また、which コマンドを利用して、自分が起動しているプログラムがどこにインストールされたものかを常にチェックしておく癖をつけておくとより安心です。