シンボリックリンクの作成(MKLINK)

MKLINK コマンドを使用するとディレクトリやファイルに対するシンボリックリンクを作成することができます。ここではコマンドプロンプトにおける MKLINK コマンドの使い方について解説します。 MKLINK コマンドではシンボリックリンクの他に、ハードリンクやディレクトリジャンクションを作成することができます。

(Last modified: )

MKLINKコマンドの使い方

MKLINK コマンドを実行するとシンボリックリンクを作成することができます。書式は次の通りです。

MKLINK [[/D] | [/H] | [/J]] リンク ターゲット

オプションとして /D 、 /H 、 /J のいずれか一つを指定します。いずれも指定しなかった場合はファイルへのシンボリックリンクが作成されます。それぞれのオプションの意味は次の通りです。

/D  ディレクトリへのシンボリックリンクを作成します
/H  ハードリンクを作成します
/J  ディレクトリジャンクションを作成します

リンクには作成するシンボリックリンクの名前、ターゲットには元になるファイルやディレクトリを指定します。

実際にシンボリックリンクを試す前に、リンクの対象となるディレクトリとファイルとして、 c:\test ディレクトリの中に data ディレクトリを作成し、その中に hello.txt ファイルを設置しました。

MKLINKコマンドの使い方(1)

hello.txt ファイルには次の 1 行のテキストが記述されています。

MKLINKコマンドの使い方(2)

ファイルへのシンボリックリンクを作成する

ファイルへのシンボリックリンクを作成します。シンボリックリンクの作成はコマンドプロンプトから行いますが、シンボリックリンクの場合は管理者権限でコマンドプロンプトを起動する必要があります。

コマンドプロンプトを起動したら、シンボリックリンクを作成するディレクトリへ移動します。今回は c:\my ディレクトリで行います。

ファイルへのシンボリックリンクを作成する(1)

ターゲットは c:\test\data\hello.txt で、作成するシンボリックリンクは hey.txt とします。コマンドプロンプトから次のように実行してください。

mklink hey.txt c:\test\data\hello.txt

ファイルへのシンボリックリンクを作成する(2)

「シンボリック リンクが作成されました」と画面に表示されて、ファイルへのシンボリックリンクが作成されました。シンボリックリンクを作成すると、現在のディレクトリに hey.txt が作成されます。 DIR コマンドを実行して確認してみると次のように表示されます。

ファイルへのシンボリックリンクを作成する(3)

作成されたファイルにはファイルのシンボリックリンクを表す <SYMLINK> が表示されます。またリンク先として [c:\test\data\hello.txt] が表示されます。

<SYMLINK>  hey.txt [c:\test\data\hello.txt]

ファイルへのシンボリックリンクを作成すると、あたかもリンク先のファイルがあるように扱うことができます。例えば TYPE コマンドを使って hey.txt の内容を表示してみると、 hello.txt の内容が出力されます。

ファイルへのシンボリックリンクを作成する(4)

相対パスと絶対パス

シンボリックファイルを作成するときは、ターゲットのファイルを絶対パスではなく現在のディレクトリからの相対パスで指定することもできます。先ほどと同じターゲットに対して今度は次のように実行してみてください。

mklink greet.txt ..\test\data\hello.txt

ファイルへのシンボリックリンクを作成する(5)

新しいシンボリックリンクが作成されました。 DIR コマンドで作成されたシンボリックリンクを確認すると次のように表示されます。

ファイルへのシンボリックリンクを作成する(6)

最初に作成したシンボリックリンクは絶対パスでリンク先の情報を保持していますが、新しく作ったシンボリックリンクは相対パスでリンク先の情報を保持しています。

<SYMLINK>  greet.txt [..\test\data\hello.txt]
<SYMLINK>  hey.txt [c:\test\data\hello.txt]

相対パスでターゲットを指定して作成したシンボリックリンクを別のディレクトリに移動した場合、移動先のディレクトリからの相対パスが示すファイルへのシンボリックリンクが設定されることになりますのでご注意ください。絶対パスで指定した作成したシンボリックリンクは、別のディレクトリに移動してもターゲットは同じままです。

ターゲットのファイルが削除された場合

シンボリックリンクとターゲットの関係は次のようになっています。

ファイルへのシンボリックリンクを作成する(7)

シンボリックリンクのターゲットのファイルが削除された場合、シンボリックリンクが削除されてしまうことはありませんが、シンボリックリンクは実際のデータへアクセスすることができなくなります。

実際にターゲットである c:\test\data\hello.txt ファイルを削除してみます。

ファイルへのシンボリックリンクを作成する(8)

ターゲットが削除されても、作成済みのシンボリックリンクは削除されません。

ファイルへのシンボリックリンクを作成する(9)

ただシンボリックリンクに対して TYPE コマンドを実行すると「指定されたファイルが見つかりません」と表示されます。

ファイルへのシンボリックリンクを作成する(10)

ディレクトリへのシンボリックリンクを作成する

ディレクトリのシンボリックリンクを作成します。管理者権限でコマンドプロンプトを起動したら、シンボリックリンクを作成するディレクトリへ移動します。今回は c:\my ディレクトリで行います。

ディレクトリへのシンボリックリンクを作成する(1)

ターゲットは c:\test\data で、作成するシンボリックリンクは box とします。コマンドプロンプトから次のように実行してください。

mklink /D box c:\test\data

ディレクトリへのシンボリックリンクを作成する(2)

ディレクトリへのシンボリックリンクが作成されました。シンボリックリンクを作成すると、現在のディレクトリに box が作成されます。 DIR コマンドを実行して確認してみると次のように表示されます。

ディレクトリへのシンボリックリンクを作成する(3)

作成されたディレクトリにはディレクトリのシンボリックリンクを表す <SYMLINKD> が表示されます。またリンク先として [c:\test\data] が表示されます。

&t;SYMLINKD>  box [c:\test\data]

ディレクトリへのシンボリックリンクを作成すると、あたかもリンク先のディレクトリがあるように扱うことができます。例えば CD コマンドを使って box ディレクトリへ移動してみます。

cd box

ディレクトリへのシンボリックリンクを作成する(4)

box ディレクトリはターゲットである c:\test\data ディレクトリへ移動したのと同じ扱いになります。 DIR コマンドを実行してみると c:\test\data ディレクトリに含まれているファイルの一覧が表示されます。

ディレクトリへのシンボリックリンクを作成する(5)

相対パスと絶対パス

ディレクトリへのシンボリックファイルを作成するときも、ターゲットのファイルを絶対パスではなく現在のディレクトリからの相対パスで指定することもできます。先ほどと同じターゲットに対して今度は次のように実行してみてください。

mklink /D space ..\test\data

ディレクトリへのシンボリックリンクを作成する(5)

新しいシンボリックリンクが作成されました。 DIR コマンドで作成されたシンボリックリンクを確認すると次のように表示されます。

ディレクトリへのシンボリックリンクを作成する(6)

最初に作成したシンボリックリンクは絶対パスでリンク先の情報を保持していますが、新しく作ったシンボリックリンクは相対パスでリンク先の情報を保持しています。

&t;SYMLINKD>  box [c:\test\data]
&t;SYMLINKD>  space [..\test\data]

相対パスでターゲットを指定して作成したシンボリックリンクを別のディレクトリに移動した場合、移動先のディレクトリからの相対パスが示すディレクトリへのシンボリックリンクが設定されることになりますのでご注意ください。絶対パスで指定した作成したシンボリックリンクは、別のディレクトリに移動してもターゲットは同じままです。

ディレクトリジャンクションを作成する

ディレクトリジャンクションを作成します。ディレクトリジャンクションはディレクトリへのリンクのみ作成できます。シンボリックリンクの作成には管理者権限が必要でしたが、ディレクトリジャンクションの作成には管理者権限は不要です。通常のコマンドプロンプトを起動したら、ディレクトリジャンクションを作成するディレクトリへ移動します。今回は c:\my ディレクトリで行います。

ディレクトリジャンクションを作成する(1)

ターゲットは c:\test\data で、作成するシンボリックリンクは box とします。コマンドプロンプトから次のように実行してください。

mklink /J box c:\test\data

ディレクトリジャンクションを作成する(2)

ディレクトリジャンクションが作成されました。ディレクトリジャンクションを作成すると、現在のディレクトリに box が作成されます。 DIR コマンドを実行して確認してみると次のように表示されます。

ディレクトリジャンクションを作成する(3)

作成されたディレクトリにはディレクトリジャンクションを表す <JUNCTION> が表示されます。またリンク先として [c:\test\data] が表示されます。

<JUNCTION>   box [c:\test\data]

ディレクトリジャンクションを作成すると、あたかもリンク先のディレクトリがあるように扱うことができます。例えば CD コマンドを使って box ディレクトリへ移動してみます。

ディレクトリジャンクションを作成する(4)

box ディレクトリはターゲットである c:\test\data ディレクトリへ移動したのと同じ扱いになります。 DIR コマンドを実行してみると c:\test\data ディレクトリに含まれているファイルの一覧が表示されます。またファイルに対して TYPE コマンドを実行して内容を確認することもできます。

ディレクトリジャンクションを作成する(4)

相対パスと絶対パス

ディレクトリジャンクションを作成するときも、ターゲットのファイルを絶対パスではなく現在のディレクトリからの相対パスで指定することもできます。ただシンボリックリンクとは異なり、相対パスが絶対パスに変換された上でディレクトリジャンクションが作成されます。先ほどと同じターゲットに対して今度は次のように実行してみてください。

mklink /J space ..\test\data

ディレクトリジャンクションを作成する(5)

新しいディレクトリジャンクションが作成されました。 DIR コマンドで作成されたディレクトリジャンクションを確認すると次のように表示されます。

ディレクトリジャンクションを作成する(6)

相対パスを指定して作成したディレクトリジャンクションも、絶対パスで指定したのと同じように絶対パスでリンク先の情報を保持しています。

ハードリンクを作成する

ハードリンクを作成します。ハードリンクはファイルへのリンクのみ作成できます。シンボリックリンクの作成には管理者権限が必要でしたが、ハードリンクの作成には管理者権限は不要です。通常のコマンドプロンプトを起動したら、ハードリンクを作成するディレクトリへ移動します。今回は c:\my ディレクトリで行います。

ハードリンクを作成する(1)

ターゲットは c:\test\data\hello.txt で、作成するハードリンクは hey.txt とします。コマンドプロンプトから次のように実行してください。

mklink /H hey.txt c:\test\data\hello.txt

ハードリンクを作成する(2)

ファイルへのハードリンクが作成されました。ハードリンクを作成すると、現在のディレクトリに hey.txt が作成されます。 DIR コマンドを実行して確認してみると次のように表示されます。

ハードリンクを作成する(3)

作成されたファイルにはシンボリックリンクやディレクトリジャンクションのように識別子のようなものは表示されていません。通常のファイルと同じように表示されています。リンク先も表示されていません。

hey.txt

ファイルへのハードリンクを作成すると、リンク先のファイルの実際のデータに直接リンクされます。

ハードリンクを作成する(4)

そのため、ハードリンクで作成されたファイルは、リンク先のファイルと同じデータを共有する通常のファイルとして作成されます。例えば TYPE コマンドを使って hey.txt の内容を表示してみると、 hey.txt が保持しているデータが出力されます。

type hey.txt

ハードリンクを作成する(5)

相対パスと絶対パス

ハードリンクを作成するときは、ターゲットのファイルを絶対パスではなく現在のディレクトリからの相対パスで指定することもできます。先ほどと同じターゲットに対して今度は次のように実行してみてください。

mklink /H greet.txt ..\test\data\hello.txt

ハードリンクを作成する(6)

新しいハードリンクが作成されました。 DIR コマンドで作成されたハードリンクを確認すると次のように表示されます。

ハードリンクを作成する(7)

ハードリンクの場合は絶対パスか相対パスかによって違いはありません。

ターゲットのファイルが削除された場合

ハードリンクの場合、ターゲットファイルに対してリンクされているのではなく、ターゲットファイルの実際のデータに直接リンクされているため、ターゲットのファイルが削除された場合でも引き続きデータへアクセスすることができます。

実際にターゲットである c:\test\data\hello.txt ファイルを削除してみます。

ハードリンクを作成する(8)

ターゲットが削除されても、作成済みのハードリンクは削除されません。

ハードリンクを作成する(9)

ハードリンクに対して TYPE コマンドを実行すると問題なくデータを表示します。

ハードリンクを作成する(10)

-- --

MKLINK コマンドを使ってシンボリックリンクを作成する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。