【Windows File System】Windowsでハードリンクやシンボリックリンクを作る

1 ファイルやフォルダ名へのリンク

Windowsでは、ファイルやフォルダー名への参照(リンク)を行う機能として、
次のものがあります。

ハードリンク
ジャンクション
シンボリックリンク

これらは同じような機能を提供していますが、
例えば「フォルダーへのリンク」と「ファイルへのリンク」の扱いが異なるなど、
いくらか違いがあります。

本記事は、下に示すWeb記事を参考に作成しました。
公開を副目的に、自分の備忘録として作成したものです。

Windowsのシンボリックリンクとジャンクションとハードリンクの違い

1.1 ハードリンク、ジャンクション、シンボリックリンクとは?

本節では、
ハードリンクジャンクションシンボリックリンクがどんなものであるかを
概説します。

1.1.1 ハードリンク

ハードリンクは、1つのファイル実体を指し示す、複数のパスのことを指します。

あるファイルに対して新しいハードリンクを作成すると、
オリジナルのファイル名から見ても、新しいリンク名から見ても、
まったく同じように1つのファイルへアクセスできるようになります。

ハードリンクを作成すると、ファイルの実体は1つのまま、
リファレンス・カウント(いくつのエントリから指されているかを表す回数で、通常のファイルは1)が
1つ増えるようになっています。

この状態で元のファイル・エントリを削除しても
ファイルの実体は残っているので(リファレンス・カウントは1つ減る)、
新しいリンクの方からはそのまま継続してアクセスできます。

ジャンクションシンボリックリンクの方法と比較すると、ハードリンクは一番透過的です。
さまざまなアプリケーションからほとんど問題なく利用できますが、
同じボリューム上のファイルしかリンクできないという制限があります。

存在しないファイルへのリンクをあらかじめ作成しておくといったこともできないし、
ほかのボリュームやほかのサーバー上の共有ファイルを指すこともできません。

1.1.2 ジャンクション

ハードリンクに対して、
ジャンクションシンボリックリンクは「ソフトリンク」と呼ばれます。

NTFSの「リパース・ポイント(ファイル・パスの解釈を独自に行う機能)」を
使って実装されたリンク機能であり、
ショートカットのように別の場所にあるフォルダーへリダイレクトするために使われます。

ハードリンクと違って、リンク先の実体が削除されるとリンク先は不明となります。

古くから使われている機能なのでほとんどのアプリケーションで問題なく利用できますが、
フォルダーにしかリンクできない、
ローカルのPC以外の場所(共有フォルダーなど)へはリンクできない、
などの制限があります。

1.1.3 シンボリックリンク

シンボリックリンクとは、ジャンクションよりも汎用性の高いリンク機能です。
UNIXLinuxシンボリックリンクとほぼ同じです。

リンク先はファイルでもフォルダーでもよいし、
相対パスでも指定できるし
(リンクを移動させると相対パスでアクセスできなくなる可能性がある)、
ローカルのPC以外の場所(リモートの共有フォルダーやその中にあるオブジェクト)へも
リンクできます。

1.2 それぞれのリンクの違い

本節では、
ハードリンクジャンクションシンボリックリンクそれぞれの違いを整理します。

1.2.1 コマンドプロンプト「dir」コマンドでの表示

図1.2-1は、コマンドプロンプトdir」コマンドで、
Windows 10ジャンクションシンボリックリンクを含むフォルダー/ファイルの一覧を表示したものです。

<JUNCTION>」と表示されているのが、ジャンクション名とそのリンク先です。
<SYM_LINKD>」も同様に、シンボリックリンク名とそのリンク先が表示されます。

1.2.2 ハードリンク、ジャンクション、シンボリックリンクの違い

表1.2-1に、 ハードリンクジャンクションシンボリックリンクの違いを整理しました。

2 リンクの操作

ハードリンクジャンクションシンボリックリンクの作成と解除は、
基本はいずれもコマンドプロンプトからのコマンド打ち込みとなります。

リンク作成シェル拡張 」などのツールを使えば、エクスプローラーからの操作も可能となります。

2.1 リンクの作成と解除

2.1.1 ハードリンク

【ハードリンクの作成】

mklink /h <リンク先> <リンク元>

または

fsutil hardlink create <リンク先> <リンク元>

【ハードリンクの解除】
del <ファイル・パス>

2.1.2 ジャンクション

【ジャンクションの作成】

mklink /j <ジャンクション名> <ジャンクションターゲット・パス>

または

junction <ジャンクション名> <ジャンクションターゲット・パス>

【ジャンクションの解除】

rmdir <ジャンクション名>

または

junction -d <ジャンクション名>

2.1.3 シンボリックリンク

【シンボリックリンクの作成】
mklink /d <シンボリックリンク名> <シンボリックリンク・パス>
【シンボリックリンクの解除】

フォルダーの時
rmdir <シンボリックリンク・フォルダー名>

ファイルの時
del <シンボリックリンク・ファイル名>

2.2 リンク作成シェル拡張

リンク作成シェル拡張」というツールを使えば、
エクスプローラーから簡単に、ハードリンクジャンクションシンボリックリンクの作成が
行えるようになります。

リンク作成シェル拡張 | 窓の杜

コマンドの文字数は多くはないとはいえ、そうそう使うものではありませんから、
けっこう忘れてしまいます。

このツールは、エクスプローラーに統合されますので、
ファイルやフォルダーのコピー感覚で、
ハードリンクジャンクションシンボリックリンクを作成することができます。

図2.2-1に 「 リンク作成シェル拡張」による、リンクの作成例を示します。

なお、 「リンクの解除」をエクスプローラーから行うと、
<リンク名>とともに<リンク元>のフォルダーやファイルも削除されてしまいますので
注意してください。

コマンドプロンプトからリンクを解除するか、
リンク元の名前を一時的に変更してからエクスプローラーで削除するなど、工夫が必要です。

以上

本文中の記述に誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでお知らせいただければ幸いです。

お問い合わせ