UNIX ファイルシステムでは,既存のファイルに別の名前を付けて利用すること ができます。この仕組みがリンク(link) です22。UNIX ファイルシステムには,ハードリンク (hard link) とシンボリックリンク (symbolic link) がありますが,ここではシンボ リックリンクのみを取り上げます23。
シンボリックリンクを作成するには,コマンド ln をオプション -s
を
付けて実行します。基本的な実行の書式は
ln -s リンク先のファイル名 作成するリンク名
です。
第 2.5 節の問題 14 で作成した誕生月カレンダー を表示するコマンドが,ホームディレクトリに mybirth という名前のファイル として存在するとします。以下では,このファイルへのシンボリックリンクを作 成して,その性質を見てみます。
ファイルが確認できたら,次項以降の mybirth を実際のファイル名(ま たはパス名)に読み替えて実行してください。または,mv コマンドを使っ てファイル名を mybirth に変更したり,ファイルをホームディレクトリ に移動して,以下をそのまま実行しても構いません。
cd
ln -s mybirth symlink
シンボリックリンクであることを表す印はわかりましたか。ls
ls -F
ls -l
シンボリックリンクでは,ファイルの種類の表示(左端)が l になって
いますね24。また,
ファイル名の表示欄からはリンク先もわかります。なお,シンボリック
リンクのアクセス権は,リンク先のものが引き継がれます。
cat symlink
cat mybirth
./symlink
./mybirth
cat コマンドで,symlink とリンク先のファイル mybirth の内容を比較 してください。
シンボリックリンクを作ることで,カレントディレクトリとは異なるディ レクトリのファイルを,パス名に代えファイル名で扱うことが可能になり ます。
cat symnow
を実行してみましょう。
しかられますね。リンク先の名前が変わるとシンボリックリンクは無効 になります。
cd
ln -s /bin mybin
ls -l
cd mybin
pwd
ls
cd
pwd
ls
ls mybin
ls -l mybin/pwd
mybin/pwd
mybin/echo now using symbolic link for /bin
rm mybin
ls /bin