• リンクの冒険

WindowsやLinuxのファイルシステムは、階層構造になっているため、異なるパスのファイルに同じ名前をつけることができる。逆にいうと、階層構造なので、どこか別の場所にあるファイル名を意識することなく、適当なファイル名をつけることができる。

しかし、ルートディレクトリを起点とした、「木」というよりも「根」のような構造は、ファイルの置き場所を1か所に限定してしまう。こうした不便を解消するために用意されたのが「リンク」と呼ばれる機能だ。

リンクとは、ファイルやディレクトリを、パス上の別の位置に配置するためのもの。これらを使うことにより、ユーザーは、ファイルを見つけやすくなる。同時に参照するファイルを一か所に集めながら、プログラムが処理する本来の場所にも残すといった使い方ができる。

ファイルシステムのリンクには、大きく、「ハードリンク(Hard link)」と「ソフトリンク(Soft link)」がある。オペレーティングシステムによって呼び方は異なるが、基本的な機能は同じである(表01)。Windowsには、歴史的な経緯から4つのリンクがある(表02)。FATファイルシステムには、ハードリンク機能がなく、Windows 95で「ファイル・ショートカット」に実装された。これは、拡張子が「.lnk」になった純粋なファイルで、内部にリンク先などの情報を記録している。エクスプローラーは、このファイルを特別扱いして、ソフトリンクにしている。また、ウィザード形式でのファイル・ショートカットの作成もいまだに可能だ。

Windows 10あたりから、内部構造が異なるファイル・ショートカットが登場していて、Win+Xメニューなどの利用されている。Windowsには、ユーザーがこの形式のファイル・ショートカットを作成する機能を提供していない。

Windows NTのNTFSには最初からハードリンクがあり、ディレクトリ用に「ジャンション」が作られた。その後、Windows Vistaのタイミングでソフトリンクであるシンボリックリンクが実装された。

ハードリンクとは、ファイルの実体とファイル名を結びつける「ディレクトリ・エントリ」を意味する。全てのファイルは少なくとも1つのハードリンクを持つ。これに対して、別のファイル名(パス)とファイル内容を結びつけるのがハードリンクだ。ハードリンクの実体は、ファイルシステム内にあるファイル実体への参照カウントである。

一回ハードリンクが追加されると、どちらも同じファイルを指し、区別を付けることができない。最初からある方をオリジナルと認識するのはユーザーでしかない。ファイル実体を指し示すため、ファイルシステム(Windowsでいうボリューム)の中でしかリンクを行うことができない。

ディレクトリに対してハードリンクの作成を許すかどうかは、オペレーティングシステムにより異なるが、許さないことが少なくない。ただし、Linuxのディレクトリ自身を表す「.」と親ディレクトリを表す「..」は、ハードリンクとして実行されている。

これに対してソフトリンクは、名前とファイルへのアクセス方法を結びつけるオペレーティングシステムの機能だ。たいていは、リンク先を何らかの方法で記録してディレクトリエントリとする。参照情報であるため、ディレクトリや他のファイルシステム上のファイル、ディレクトリなども参照できる。

一般に、ハードリンクとは異なり、リンク先の参照情報のみを保持するため、リンク先が削除、移動、名前変更されたときに、これに追従できず、リンク先が不明になる。逆にいうと、こうした「緩い」参照関係であるため、存在しないファイルやディレクトリへのリンクも可能になっている。

ソフトリンクの方がリンク先との関係が緩く、融通が利きやすい。たとえば、Windowsのエクスプローラーでは、ディレクトリのシンボリックリンクは、ディレクトリとおなじように扱われるため、ナビゲーションウィンドウでもディレクトリのように表示される。基本的にはソフトリンクを使うことで大抵の用途はカバーできる。

(表03)は、Windows、Linuxでリンクを作成、削除、調査するためのコマンドである。基本的には、ハードリンク、ソフトリンクは、ファイルやディレクトリとおなじように扱える。WindowsのPowerShellでは、補完が効くとはいえ、オプションが長く、覚えにくい。旧来のコマンドであるmklinkは、cmd.exeの内部コマンドなので、PowerShellから直接使えない(cmd.exe /cの引数としてなら実行可能)。利用頻度がもう少し高いなら、functionを定義してもいいのだが、現状、マシンの入れ替えなど、初期設定時には頻度が高いものの、毎日使うほどのコマンドでもない。

今回のタイトルネタは、1987年のファミコンゲーム「リンクの冒険」である。前年に発売された「ゼルダの伝説」の続編として作成された。任天堂のゲームマシンが登場するたびに必ずリリースされる人気シリーズになったが、本作がシリーズ化最初の作品である。