パス(PATH)の設定について考察する

シェルの初期設定ファイルはカレントディレクとドットファイルとして置いてあります。
これには二つの種類があります。
bashの場合、~/.bashrc(シェルを起動する度に読み込まれる)と~/.profile(ユーザーにログインする時に一度だけ読み込まれる)の2種類があります。
これらの設定ファイルには、コマンドパスやaliasの設定内容を記述します。
今回は、パスの設定について書こうと思います。
ホームディレクトリにbinディレクトリを作成して、そこにパスを通し、さらには実行ファイルを中に入れて実行してみます。
#まずは、パスを確認(PATHという変数を$をつけることで展開する)
$ echo $PATH
/home/kappa/bin:/usr/lib/libfm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

#ホームディレクトリにbinディレクトリを作る
$ mkdir ~/bin

#.profileに設定を追加する(リダイレクトを用いて、ファイルの末尾にechoの出力を追加する)
#もともとのPATHは/home/kappa/bin:/home/kappa/bin:/usr/lib/libfm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
#HOMEは、/home/kappa(echo $HOMEで確認可能)
#結局、もともとのPATHの内容の頭に$HOME/bin:すなわち、/home/kappa/bin:という文字列を追記して、PATH自体を上書きしてやればよいのである。
echo 'PATH=$HOME/bin:$PATH' >> .profile

#設定を反映させる。
$ source .profile

#PATHの内容を確認
$ echo $PATH
/home/kappa/bin:/home/kappa/bin:/usr/lib/libfm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

#例えば、perlでhello,worldプログラムを書いて、実行権限を与えて、~/binディレクトリ置いてみる。
$ cat > hello.pl
#/usr/bin/perl
print "Hello, world!!\n";
exit;
(Control + D)

$ chmod +x hello.pl
$ mv hello.pl ~/bin

#~/binのフィルはパスを指定せずに、プログラム名で実行できるようになっている。
$ hello.pl

#このように~/binに様々な言語のhello,worldを置いておいたら、
#hello(tabキー)とするだけで、いろんな言語の挨拶ができる。
#海外旅行には便利かも(?)
ホームディレクトリにパスの通ったディレクトリ(~/bin)を作成することは、プログラムのインストールにおいて極めて便利である。
アプリケーションのインストールにルート権限が必要だという認識は厳密には間違いである。
ソースコードからコンパイルしてソフトウェアをインストールするとき、(./configure, make)でプログラム自体はバイナリファイルとして実行可能な形式で生成します。
ルート権限になるのはmake installとするときに必要だと思います。
これは、ルートユーザしかアクセスのできないディレクトリ(/usr/local/sbin/,/sbin等)にこれらの実行ファイルをコピーするからなのです。
これらのディレクトリは、すべてのユーザーのシェルのコマンドパスが通っているため、みんなが共通して使用可能なプログラムとなります。
だから、ルート権限が必要なのです。
しかし、一個人ユーザーとしてバイナリファイルをパスを通ったディレクトリに置いて実行したいときは、ただ単に自分が作ったディレクトリ(今回ならば、~/binにパスを通し、そこにバイナリファイルを置いておけば良いだけなのです。
ですので、厳密にはプログラムのインストールにはルート権限が必要ではないと言えます。
このことを知っておけば、スパコンを使用するときでも、自分がアクセスできる範囲内でアプリケーションをインストールして使用することができるのです。