【初心者向け解説】環境変数PATH

【初心者向け解説】環境変数PATH

環境変数PATHとは

プロンプトが表示されている状態でコマンドを入力すると、シェルはそのコマンドを実行します。コマンドには内部コマンド外部コマンドの2種類があります。

内部コマンド

シェル自体に組み込まれているもの

外部コマンド

独立したプログラムとして存在するもの

内部コマンドと外部コマンドについて

例えば、lsコマンドは/bin/lsが実行されている外部コマンドですが、 cdコマンドはシェルに組み込まれている内部コマンドです。

外部コマンドの場合は、シェルはそのコマンドが どこに置かれているのかを環境変数PATHに指定されたディレクトリを順に調べて見つけ出します。

コマンドが置かれたディレクトリを環境変数PATH に追加することを「パスを通す」と言います。

パスの通っていない場所に置かれているコマンドやプログラムを実行する場合は、絶対パス(フルパス)もしくは相対パスを指定する必要があります。

絶対パス

絶対パスとは最上位ディレクトリ(/)から表記する方法でシステム内のファイル位置を一意に表します。

相対パス

反対に/から始まらないディレクトリ表記を相対パス表記と呼びカレントディレクトリを起点とした相対位置で表します。

絶対パスと相対パスについて

例えば一般ユーザーが/usr/sbin/useraddコマンドを実行しようとしても一般ユーザーの環境変数PATHには/usr/sbin記載されていないため、コマンドが見つからずエラーになります。

PATH変数に含まれていないディレクトリにあるコマンドでも、絶対パスを指定すれば実行することができます(コマンドを実行する権限が必要です)

$ /usr/sbin/useradd -D

環境変数PATH にパスを追加するには ~/.bash_profileなどの環境設定ファイルのPATH設定を修正するか、次のコマンドを使用します。

PATH=$PATH:追加するディレクトリ名

次の例ではオプト Bin ディレクトリを環境変数PATH の末尾に追加しています。

$ PATH=$PATH:/opt/bin

 シェルは環境変数PATH の先頭から順にディレクトリを検索していきます。

もし同名のプログラムがあった場合は、環境変数PATH の先頭に近い方のディレクトリに置かれているプログラムが実行されます。

次の例を見てください環境変数PATH に追加したいパスだけ指定しています。

$ PATH=/opt/bin

このようにしてしまうとパスが通っているディレクトリーは/opt/sbinだけになってしまい、外部コマンドが使えなくなります(その場合でも絶対パスを指定すれば使うことができます)

通常セキュリティ上の理由から環境変数PATH にはカレントディレクトリを含めませんそのためカレントディレクトリにあるプログラムを実行するにはカレントディレクトリーを意味するを明示します次の例ではカレントディレクトリにあるプログラムを実行しています。

$ ./mycommand

最後に

カレントディレクトリにパスが通っていない場合、カレントディレクトリにあるプログラムを実行するには、プログラム名の前にカレントディレクトリを意味する「./」を明示する必要があります