Windowsを始め、多くのOSにはファイルの「リンク」機能がある
Windowsに限らず、多くのOSが持つファイルシステムには「リンク」と呼ばれる機能がある。ファイルは、パスにより一意に特定可能だが、人間がファイルを管理するとき、どうしても同じファイルを別の場所(パス)にも配置したくなることがある。これを実現するのがリンクだ。リンクには、大きく「ハードリンク」と「ソフトリンク」(あるいはシンボリックリンクともいう)の2種類がある。
ファイルシステムには、ファイル名を管理するディレクトリ領域とファイルの中身を記録する領域がある。ハードリンクはこの仕組みを利用して、同じファイルの中を指し示すファイル名を異なるパスに作る。
特徴として、後から作ったハードリンクもオリジナルのファイル名も区別がなく、どちらも同じファイルとして扱える。通常は、ファイルシステム側に「参照カウント」と呼ばれる情報があり、リンクが作られるごとにこれが増えていき、削除されると参照カウントが減っていく。参照カウントが0になると、ファイルそのものが消去される。
これに対して、ソフトリンクはOSがファイルシステム内に置かれた特殊なファイルを処理して、ファイルがあたかもそこにあるかのように振る舞うものだ。APIのレベルでは同等だが、ファイルシステム上はハードリンクと異なり、あくまでもOSのファイルAPI内での処理が必要になる。
このため、異なるファイルシステムやネットワークを使った共有ファイルシステムともリンクが可能になるというメリットがある反面、リンクされている側とリンク側にはお互いに関係がなく、リンク先が削除されると、存在しないものを指し示すリンクになってしまうことがある。
さて、WindowsのNTFSには、以下の表のようなリンクがある。
これまでWindowsのファイルリンクに関しては、きちんと説明していなかったので、ここであらためて解説しておこう。確認事項としては、Windowsのドライブやディレクトリなどの用語があるが、これに関しては、(「Windowsにおける『パス』を改めて考える」)を参照してほしい。
NTFSは、Windows 2000からハードリンクとジャンクションが利用可能になった。その後、Windows Vistaでシンボリックリンクがサポートされている。標準的な意味でのファイルリンクではないが、Windowsは、Windows 95からファイルショートカット(シェルリンク)がある。これは、シェル(エクスプローラー)のレベルで実現されているソフトリンクの1種である。シェルリンクはエクスプローラー上でのみ有効で、エクスプローラーのコンテキストメニューなどで作成する。
実際にWindows上でリンクを作成する
リンクを作成するには、cmd.exeではmklinkコマンドを、PowerShell/Windows PowerShellでは、New-Itemコマンドを使う。
mklinkコマンドはcmd.exeの内部コマンドなので、cmd.exe以外から利用する場合には、「cmd.exe /c mklink 引数」として呼び出す必要がある。しかし、リンクにパスを指定できるため、カレントディレクトリに関わりなく、他のディレクトリにリンクを作成できる。これに対して、PowerShellのNew-Itemコマンドでは、-Nameオプションに指定できるのはリンクの名前だけで、カレントディレクトリ以外にリンクを作成する場合、別途-Pathオプションを使って作成先ディレクトリを指定する必要がある。
なお、シェルリンクに関しては、手動操作による作成が基本だが、コマンドラインから行うことは不可能ではない。具体的には、以下のようにWScript.Shellオブジェクトを使う。リンクパスは、リンク名に必ず拡張子「.lnk」を付ける。
$s=(New-Object -ComObject WScript.Shell).CreateShortcut("リンクパス")
$s.TargetPath="ターゲットパス"
$s.Save()
1行目の「リンクパス」、2行目の「ターゲットパス」は、どちらもフルパスを指定する必要がある。なお、このコマンドであれば、現在は存在しないファイル/フォルダへのリンクを作成できる。
この連載の記事
-
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る - この連載の一覧へ