Windows にはシンボリックリンクとハードリンクの機能がありますが、違いや特徴が解りづらく、あまり利用されていないのではないかと思います。
その違いと特徴について考察します。
シンボリックリンク
エクスプローラでショートカットファイルを作るのに似ています。
仕組みは概ね Linux と同様ですが、作成方法には違いがあります。
特徴
- シンボリックリンクは、元のファイルの(実体そのものではなく)パスを指す。
- パスを指す為、他のドライブや、ネットワーク越しでもリンクできる。
- シンボリックリンクを削除しても、元のファイルには何も影響しない(そのまま残る)。
- 元のファイルを削除した場合、そのファイルへのシンボリックリンクは残るが、既に存在しないパスを指しておりアクセスできなくなる。
- ショートカットファイルのように「作業フォルダ」の情報は無い為、実行ファイルはリンク先のフォルダではなく、実行したフォルダ側で起動する。
dir
コマンドやエクスプローラで symlink であることが確認できる。- 作成には管理者権限が必要。
作成と削除
シンボリックリンクを作成・削除するときは、リンク先がフォルダかファイルかで方法が異なります。
ファイルは mklink
で作成、del
で削除。
フォルダは mklink /d
で作成、rmdir
で削除します。
ハードリンク
ハードリンクは Linux のそれと同様の動作をします。
つまり同一のドライブ内で、元のファイル名と同様にファイルを直接指す別名を付けます。
特徴
- ハードリンクで付けた名前は、元のファイルの名前と全く同じように扱える。
- 1つのファイル内容に対して、複数の名前でリンクを張ると解釈できる。
- 元のファイルを削除しても、ハードリンクが 1つでも残っていればファイル内容(への参照)は残り、やはり元のファイルと同じようにアクセスできる。
- 言い換えれば、ハードリンクによる参照が 1つでも残っている限りファイルは削除されない。
- Windows10 に Linux サブシステムを入れて
ls -l
してみると、Linux と同様にファイルの参照数が増えることが確認できる。 - 作成は一般ユーザ権限で可能。
作成と削除
mklink /h
で作成、del
で削除します。
リンク先はファイルのみで、フォルダのハードリンクは作れません。
対応環境
ハードリンクは Windows 2000 以降、シンボリックリンクは Vista 以降で利用できます。
対応ファイルシステムは NTFS です。
PowerShell で実行する際はコマンド名を cmd /c mklink
にする必要があります。
コマンドプロンプト(cmd.exe)からは直接実行できます。