シンボリックリンクの作成(MKLINK)
MKLINK コマンドを使用するとディレクトリやファイルに対するシンボリックリンクを作成することができます。ここではコマンドプロンプトにおける MKLINK コマンドの使い方について解説します。 MKLINK コマンドではシンボリックリンクの他に、ハードリンクやディレクトリジャンクションを作成することができます。
(Last modified: )
MKLINKコマンドの使い方
MKLINK コマンドを実行するとシンボリックリンクを作成することができます。書式は次の通りです。
MKLINK [[/D] | [/H] | [/J]] リンク ターゲット
オプションとして /D 、 /H 、 /J のいずれか一つを指定します。いずれも指定しなかった場合はファイルへのシンボリックリンクが作成されます。それぞれのオプションの意味は次の通りです。
/D ディレクトリへのシンボリックリンクを作成します /H ハードリンクを作成します /J ディレクトリジャンクションを作成します
リンクには作成するシンボリックリンクの名前、ターゲットには元になるファイルやディレクトリを指定します。
実際にシンボリックリンクを試す前に、リンクの対象となるディレクトリとファイルとして、 c:\test ディレクトリの中に data ディレクトリを作成し、その中に hello.txt ファイルを設置しました。
hello.txt ファイルには次の 1 行のテキストが記述されています。
ファイルへのシンボリックリンクを作成する
ファイルへのシンボリックリンクを作成します。シンボリックリンクの作成はコマンドプロンプトから行いますが、シンボリックリンクの場合は管理者権限でコマンドプロンプトを起動する必要があります。
コマンドプロンプトを起動したら、シンボリックリンクを作成するディレクトリへ移動します。今回は c:\my ディレクトリで行います。
ターゲットは c:\test\data\hello.txt で、作成するシンボリックリンクは hey.txt とします。コマンドプロンプトから次のように実行してください。
mklink hey.txt c:\test\data\hello.txt
「シンボリック リンクが作成されました」と画面に表示されて、ファイルへのシンボリックリンクが作成されました。シンボリックリンクを作成すると、現在のディレクトリに hey.txt が作成されます。 DIR コマンドを実行して確認してみると次のように表示されます。
作成されたファイルにはファイルのシンボリックリンクを表す <SYMLINK> が表示されます。またリンク先として [c:\test\data\hello.txt] が表示されます。
<SYMLINK> hey.txt [c:\test\data\hello.txt]
ファイルへのシンボリックリンクを作成すると、あたかもリンク先のファイルがあるように扱うことができます。例えば TYPE コマンドを使って hey.txt の内容を表示してみると、 hello.txt の内容が出力されます。
相対パスと絶対パス
シンボリックファイルを作成するときは、ターゲットのファイルを絶対パスではなく現在のディレクトリからの相対パスで指定することもできます。先ほどと同じターゲットに対して今度は次のように実行してみてください。
mklink greet.txt ..\test\data\hello.txt
新しいシンボリックリンクが作成されました。 DIR コマンドで作成されたシンボリックリンクを確認すると次のように表示されます。
最初に作成したシンボリックリンクは絶対パスでリンク先の情報を保持していますが、新しく作ったシンボリックリンクは相対パスでリンク先の情報を保持しています。
<SYMLINK> greet.txt [..\test\data\hello.txt] <SYMLINK> hey.txt [c:\test\data\hello.txt]
相対パスでターゲットを指定して作成したシンボリックリンクを別のディレクトリに移動した場合、移動先のディレクトリからの相対パスが示すファイルへのシンボリックリンクが設定されることになりますのでご注意ください。絶対パスで指定した作成したシンボリックリンクは、別のディレクトリに移動してもターゲットは同じままです。
ターゲットのファイルが削除された場合
シンボリックリンクとターゲットの関係は次のようになっています。
シンボリックリンクのターゲットのファイルが削除された場合、シンボリックリンクが削除されてしまうことはありませんが、シンボリックリンクは実際のデータへアクセスすることができなくなります。
実際にターゲットである c:\test\data\hello.txt ファイルを削除してみます。
ターゲットが削除されても、作成済みのシンボリックリンクは削除されません。
ただシンボリックリンクに対して TYPE コマンドを実行すると「指定されたファイルが見つかりません」と表示されます。
ディレクトリへのシンボリックリンクを作成する
ディレクトリのシンボリックリンクを作成します。管理者権限でコマンドプロンプトを起動したら、シンボリックリンクを作成するディレクトリへ移動します。今回は c:\my ディレクトリで行います。
ターゲットは c:\test\data で、作成するシンボリックリンクは box とします。コマンドプロンプトから次のように実行してください。
mklink /D box c:\test\data
ディレクトリへのシンボリックリンクが作成されました。シンボリックリンクを作成すると、現在のディレクトリに box が作成されます。 DIR コマンドを実行して確認してみると次のように表示されます。
作成されたディレクトリにはディレクトリのシンボリックリンクを表す <SYMLINKD> が表示されます。またリンク先として [c:\test\data] が表示されます。
&t;SYMLINKD> box [c:\test\data]
ディレクトリへのシンボリックリンクを作成すると、あたかもリンク先のディレクトリがあるように扱うことができます。例えば CD コマンドを使って box ディレクトリへ移動してみます。
cd box
box ディレクトリはターゲットである c:\test\data ディレクトリへ移動したのと同じ扱いになります。 DIR コマンドを実行してみると c:\test\data ディレクトリに含まれているファイルの一覧が表示されます。
相対パスと絶対パス
ディレクトリへのシンボリックファイルを作成するときも、ターゲットのファイルを絶対パスではなく現在のディレクトリからの相対パスで指定することもできます。先ほどと同じターゲットに対して今度は次のように実行してみてください。
mklink /D space ..\test\data
新しいシンボリックリンクが作成されました。 DIR コマンドで作成されたシンボリックリンクを確認すると次のように表示されます。
最初に作成したシンボリックリンクは絶対パスでリンク先の情報を保持していますが、新しく作ったシンボリックリンクは相対パスでリンク先の情報を保持しています。
&t;SYMLINKD> box [c:\test\data] &t;SYMLINKD> space [..\test\data]
相対パスでターゲットを指定して作成したシンボリックリンクを別のディレクトリに移動した場合、移動先のディレクトリからの相対パスが示すディレクトリへのシンボリックリンクが設定されることになりますのでご注意ください。絶対パスで指定した作成したシンボリックリンクは、別のディレクトリに移動してもターゲットは同じままです。
ディレクトリジャンクションを作成する
ディレクトリジャンクションを作成します。ディレクトリジャンクションはディレクトリへのリンクのみ作成できます。シンボリックリンクの作成には管理者権限が必要でしたが、ディレクトリジャンクションの作成には管理者権限は不要です。通常のコマンドプロンプトを起動したら、ディレクトリジャンクションを作成するディレクトリへ移動します。今回は c:\my ディレクトリで行います。
ターゲットは c:\test\data で、作成するシンボリックリンクは box とします。コマンドプロンプトから次のように実行してください。
mklink /J box c:\test\data
ディレクトリジャンクションが作成されました。ディレクトリジャンクションを作成すると、現在のディレクトリに box が作成されます。 DIR コマンドを実行して確認してみると次のように表示されます。
作成されたディレクトリにはディレクトリジャンクションを表す <JUNCTION> が表示されます。またリンク先として [c:\test\data] が表示されます。
<JUNCTION> box [c:\test\data]
ディレクトリジャンクションを作成すると、あたかもリンク先のディレクトリがあるように扱うことができます。例えば CD コマンドを使って box ディレクトリへ移動してみます。
box ディレクトリはターゲットである c:\test\data ディレクトリへ移動したのと同じ扱いになります。 DIR コマンドを実行してみると c:\test\data ディレクトリに含まれているファイルの一覧が表示されます。またファイルに対して TYPE コマンドを実行して内容を確認することもできます。
相対パスと絶対パス
ディレクトリジャンクションを作成するときも、ターゲットのファイルを絶対パスではなく現在のディレクトリからの相対パスで指定することもできます。ただシンボリックリンクとは異なり、相対パスが絶対パスに変換された上でディレクトリジャンクションが作成されます。先ほどと同じターゲットに対して今度は次のように実行してみてください。
mklink /J space ..\test\data
新しいディレクトリジャンクションが作成されました。 DIR コマンドで作成されたディレクトリジャンクションを確認すると次のように表示されます。
相対パスを指定して作成したディレクトリジャンクションも、絶対パスで指定したのと同じように絶対パスでリンク先の情報を保持しています。
ハードリンクを作成する
ハードリンクを作成します。ハードリンクはファイルへのリンクのみ作成できます。シンボリックリンクの作成には管理者権限が必要でしたが、ハードリンクの作成には管理者権限は不要です。通常のコマンドプロンプトを起動したら、ハードリンクを作成するディレクトリへ移動します。今回は c:\my ディレクトリで行います。
ターゲットは c:\test\data\hello.txt で、作成するハードリンクは hey.txt とします。コマンドプロンプトから次のように実行してください。
mklink /H hey.txt c:\test\data\hello.txt
ファイルへのハードリンクが作成されました。ハードリンクを作成すると、現在のディレクトリに hey.txt が作成されます。 DIR コマンドを実行して確認してみると次のように表示されます。
作成されたファイルにはシンボリックリンクやディレクトリジャンクションのように識別子のようなものは表示されていません。通常のファイルと同じように表示されています。リンク先も表示されていません。
hey.txt
ファイルへのハードリンクを作成すると、リンク先のファイルの実際のデータに直接リンクされます。
そのため、ハードリンクで作成されたファイルは、リンク先のファイルと同じデータを共有する通常のファイルとして作成されます。例えば TYPE コマンドを使って hey.txt の内容を表示してみると、 hey.txt が保持しているデータが出力されます。
type hey.txt
相対パスと絶対パス
ハードリンクを作成するときは、ターゲットのファイルを絶対パスではなく現在のディレクトリからの相対パスで指定することもできます。先ほどと同じターゲットに対して今度は次のように実行してみてください。
mklink /H greet.txt ..\test\data\hello.txt
新しいハードリンクが作成されました。 DIR コマンドで作成されたハードリンクを確認すると次のように表示されます。
ハードリンクの場合は絶対パスか相対パスかによって違いはありません。
ターゲットのファイルが削除された場合
ハードリンクの場合、ターゲットファイルに対してリンクされているのではなく、ターゲットファイルの実際のデータに直接リンクされているため、ターゲットのファイルが削除された場合でも引き続きデータへアクセスすることができます。
実際にターゲットである c:\test\data\hello.txt ファイルを削除してみます。
ターゲットが削除されても、作成済みのハードリンクは削除されません。
ハードリンクに対して TYPE コマンドを実行すると問題なくデータを表示します。
-- --
MKLINK コマンドを使ってシンボリックリンクを作成する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。