13.4.14 シンボリックリンク

一つのファイルに別の名前を設定し、別名でそのファイルにアクセスできるようにする機能をシンボリックリンクといいます.例えば,頻繁に移動するディレクトリには, シンボリックリンクにより,別の名前をつけることにより移動が簡単になることがあります.シンボリックリンクは Finder のエイリアスとほとんど同じ働きをします.多少細かい違いはありますが,あまり意識することはないでしょう.

シンボリックリンクは, ls でみると一見ファイルのように見えますが,実際は別の場所にあるファイルやディレクトリを指しているだけのものです.

シンボリックリンクを張るには, ln コマンドに -s オプションをつけて使います.さらに,リンクの指す先のファイルやディレクトリの名前と,参照するためのリンクの名前を指定します.

promptln -s リンク先 リンクの名前 return2

リンク先というところには,リンクの指し示す実体のファイルやディレクトリの名前を書きます.リンクの名前のところには,そのファイルやディレクトリを参照するときの名前を書きます.このようにシンボリックリンクはファイルにもディレクトリにも作ることができます.シンボリックリンクを作ることを「リンクを張る」と表現することもあります.

例えば ~/www/download/image というディレクトリに向けて photo というシンボリックリンクを張るとするなら, 次のように入力します.

promptln -s ~/www/download/image photo return2

するとカレントディレクトリには photo というシンボリックリンクが作成されます.

シンボリックリンクを張ることで, photo が ~/www/download/image というディレクトリを指すようになります. ~/www/download/image というディレクトリが photo という名前でもアクセスできるようになったのです.

ls コマンドに -F オプションを付けて一覧を見ると, シンボリックリンクファイルにはアットマーク(@)が付いて表示されます.

promptls -F return2 photo@

この状態で, 普通に cd コマンド を実行すれば, 本物の ~/www/download/image ディレクトリに移動することができます.

promptcd photo return2 promptpwd return2 /home01/g999999/www/download/image

もちろん,ファイルにもリンクを張れます. わざわざファイルをコピーするかわりにリンクを張るだけで済ませておける場合もあるでしょう. シンボリックリンクを張ると. 一つのファイルに対して複数の名前でアクセスすることができます. しかし実体は一つなので片方の内容を変更すると, 当然もう片方も変更されます.

シンボリックリンクを消すには, リンクの方を rm します. このとき, リンク先のファイルは消えません. 実体のほうを消すと本当にファイルが消えてしまいます. その場合,シンボリックリンクのあるディレクトリで ls するとファイルがあるのにそのファイルを開こうとすると実体がないために開けないという状態になってしまいます.

シンボリックリンクに対してハードリンクと呼ばれるものもあります. シンボリックリンクと同様に一つのファイルに複数の名前を付けられるものですが,シンボリックリンクと違い,後から付けた名前と元からあった名前とでどちらが元からあったかがわからなくなります. そして,元からあった名前を消してもファイルの実体は消えません. 一方,ディレクトリへのハードリンクは作ることができないなどの制限もあります. 作り方は ln コマンドで -s オプションを付けない以外はシンボリックリンクとほぼ同じですが,詳しくはここでは取り上げません.