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行目の「ターゲットパス」は、どちらもフルパスを指定する必要がある。なお、このコマンドであれば、現在は存在しないファイル/フォルダへのリンクを作成できる。
この連載の記事
-
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ - この連載の一覧へ