UNIX入門:8. コマンドのパスと登録:~/binとrehash
8.1. コマンドのパス
コマンド command
がサーバーに備わっているか否かは,次のようにして確認できます。
■コマンドの絶対パス % which command
- 例8.1
% which ls /usr/bin/ls % which sh /bin/sh
この例から分かるように,コマンドは,/usr/bin
とか /bin
内にあります。実際,/bin
内の実行可能ファイルがシェル・コマンドです。
これに対し,自らが使用可能なコマンドがどこのディレクトリなのか,調べることもできます。
■コマンドのパス一覧 % echo $PATH
- 例8.2
% echo $PATH /bin:/sbin:/usr/bin:/usr/sbin
これは,コロン :
で区切って見ます。先ほどの ls
の絶対パスが /usr/bin/ls
でしたが,それは,ここでいうと3つ目の /usr/bin
内にあるコマンドです。
8.2. パス(PATH)の通し方
echo $PATH
にないパス path
にパスを通すには,次のファイルをホームディレクトリ ~/
内に作成しておけば,次のログインからは path
にパスが通ります。
・ログインシェルが tcsh の場合
:ファイル名 .tcshrc
setenv PATH ${PATH}:path
・ログインシェルが
bash
の場合:ファイル名 .profile
PATH=$PATH:path
- 例8.3:ログインシェルが
tcsh
のとき,自らのホームディレクトリ内のディレクトリbin
にパスを通す場合% echo $SHELL /bin/tcsh % cd % mkdir bin % echo $PATH /bin:/sbin:/usr/bin:/usr/sbin % echo "setenv PATH ${PATH}:$HOME/bin" >> .tcshrc
[ノート]$SHELL
や $PATH
,$HOME
の SHELL
,PATH
,HOME
を「環境変数」という。環境変数一覧の出し方は次の通り。
% printenv HOME=/Users/taro # ホームディレクトリ SHELL=/bin/tcsh # ログインシェル USER=taro # ユーザ名 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/Users/taro/bin # パス ...
8.3. コマンドの登録
7 で見たエイリアスは,コマンドの省略であり,コマンドが本来存在するディレクトリにある訳ではありません。サーバーによっては,再起動するとエイリアスが消えたりします。したがって,シェル・スクリプトや C,Perl などで作成したプログラムをコマンドとして登録したいものです。ところが,/usr/bin
や /bin
は,root
が所有者であり,サーバーを利用するすべての人が使用するコマンドが格納されています。そこで,必要となるのが,各ユーザが個別に設定するコマンドです。
例8.3で自らのホーム・ディレクトリ内のディレクトリ ~/bin
にパスを通しました。そこで,~/bin
内に収めた実行可能ファイルをコマンドとして登録してみましょう。
■コマンドの登録方法 (コマンドのパスが,~/bin
に通っている場合)
実行ファイル executable をコマンド command として登録
% cd
% cp executable bin/command
% chmod u+x bin/command
% rehash
上記のコマンドの中で,最後の rehash
以外は既出。3行目は,実行ファイル executable
を自分のホーム内のディレクトリ bin
にコピー。但し,コピーの名称は command
。最後の rehash
は,新しく作成したコマンドを認識させるためのものです。
- 例8.4:シェルのプログラム・ファイル hello.sh を
hello
というコマンドとして登録% cd % cp My_Programs/hello.sh bin/hello % chmod u+x bin/hello % rehash 実行) % hello Hello World! %
[ノート] #!/bin/sh
の意味
シェル・スクリプトの先頭には,「#!/bin/sh
」を入れます。この一行をはずして,上記のようにコマンドとしてシェル・スクリプトを登録すると,どうなるのでしょうか?実は,動かないのです。その一行が,シェル(実行ファイル /bin/sh
)での実行を知らせています。
実行ファイルをコピーする上記の方法では,元の実行ファイルを編集すれば,再びコピーしないと,編集の効果はコマンドにいかされません。そこで,コピーではなく,シンボリック・リンクを使うと良いかもしれません。
■シンボリック・リンクでコマンドを登録 % cd % ln -s executable bin/command % chmod u+x executable % rehash
- 例8.5:例3のコマンドの登録をシンボリック・リンクで行う場合
% cd % ln -s My_Programs/hello.sh bin/hello % chmod u+x My_Programs/hello.sh % rehash 実行) % hello Hello World! %