Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

Windows Vista/Windows Server 2008でシンボリック・リンクを作成する

解説をスキップして操作方法を読む

デジタルアドバンテージ 打越 浩幸
2008/02/22
2013/01/31更新
対象OS
Windows Vista
Windows Serve 2008
Windows VistaやWindows Server 2008ではシンボリック・リンクを利用できる。
シンボリック・リンクを作成するにはmklinkコマンドを利用する。
エクスプローラでリンク先を表示させるには、[リンク先]という表示項目を追加する。

解説

 TIPS「ファイルへの別名を割り当てるハードリンクを作成する」では、ハードリンクを作成する方法を紹介した。Windows OSのハードリンクは、Windows 2000といった従来のOSで利用できる反面、同一ボリューム上に存在するファイルにしかリンクが張れないという制約があった。フォルダへのリンクは張れないし、ほかのサーバやほかのボリューム上に存在するファイルへリンクを張ることもできない。

 TIPS「ジャンクション機能を使ってディスク・ボリュームをマウントする」では、NTFSのジャンクション(リパース・ポイント)機能を使ってボリュームやフォルダをマウントする機能を紹介したが、やはり別のサーバ上のボリュームや共有フォルダなどへリンクを張ることはできない。

 これらに対し、Windows VistaやWindows Server 2008では、より柔軟性の高い「シンボリック・リンク」機能(「ソフト・リンク」ともいう)がサポートされている。これはUNIXやLinuxなどで使用されているシンボリック・リンクとほぼ同等の機能を持っている。ローカルのファイルやフォルダはもちろん、リモートのサーバ上の共有フォルダやファイルに対してもリンクを張ることができる。ただし、リンクする先がファイルかフォルダかによって、リンクの作成方法に少し異なる。本TIPSでは、Windows VistaやWindows Server 2008におけるシンボリック・リンクの作成方法について解説する。

 なお、シンボリック・リンクの機能をまとめておくと次のようになる。

  • シンボリック・リンクとは、リンク先を指すためのいわばショートカットである。リンク先は、ローカルのファイルやフォルダに限らず、リモートのサーバ(共有フォルダ)中のファイルやフォルダでもよい。ただしジャンクション(リパース・ポイント)のように、ボリュームへリンクすることはできない。

  • ファイルやフォルダにシンボリック・リンクを張ると、通常のファイルやフォルダのように内容を確認したり、移動先として利用できる。ただしコマンドによっては(特に従来のOS上のコマンドなど)、リンクを正しく解釈できないことがあるので注意(例えばlink.txtがシンボリック・リンクの場合、「more < link.txt」は動作するがなぜか「more link.txt」は動作しない)。

  • シンボリック・リンクはWindows VistaやWindows Server 2008で利用できる。ただしNTFSボリュームが必要。

  • 存在しないファイルやフォルダ名へのシンボリック・リンクを作成してもよい。シンボリック・リンクはオープン時(実際に使用されるとき)に解釈されるため、リンクの作成時にリンク先が存在しているかどうかは関係ない。実際にアクセスされるときにリンク先があればよい。

  • リンク先のファイルやフォルダが常に存在している必要はない。リンク先のファイルやフォルダを削除すると、アクセス先が不明なリンクとしてそのまま残り、そのようなリンクを開こうとするとエラーになる(ハードリンクの場合は、最後のリンクがなくなった時点で、ファイルの実体が削除される)。

  • リンク先は絶対パスでなく、相対パスでもよい(例:「..\..\master.doc」へのリンクなど)。ただし相対パスを持つリンクを移動させると、リンク先が不明になることがあるので注意。

操作方法

mklinkコマンドでシンボリック・リンクを作成する

 Windows VistaやWindows Server 2008でシンボリック・リンクを作成するには、まず管理者権限のあるコマンド・プロンプトを開き(TIPS「Windows Vistaでプログラムを管理者モードで実行する」参照)、mklinkコマンドを実行する(これはコマンド・プロンプトの内部コマンド)。

C:\>mklink …使い方を表示させる
シンボリック リンクを作成します。

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

        /D          ディレクトリのシンボリック リンクを作成します。既定では、
                    ファイルのシンボリック リンクが作成されます。
        /H          シンボリック リンクではなく、ハード リンクを作成します。
        /J          ディレクトリ ジャンクションを作成します。
        リンク      新しいシンボリック リンク名を指定します。
        ターゲット  新しいリンクが参照するパス (相対または絶対)
                    を指定します。

 mklinkの引数は、作成するリンク名と、リンク先のファイル/フォルダ名である。作成するリンクの種類によって、/Dや/H、/Jなどのオプションを指定する。オプション指定を省略すると、ファイルへのリンクの作成となる。

 なおシンボリック・リンクを作成するには、Windows Vista以降で新しく導入された「シンボリック リンクの作成」というユーザー権利が必要である(ユーザーの権利は[管理ツール]の[ローカル セキュリティ ポリシー]などで設定/確認できる)。デフォルトではAdministratorsグループにのみ、この権利が割り当てられている。

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

 ファイルに対するシンボリック・リンクを作成するには、mklinkコマンドに作成するリンク名とリンク先のファイル名を指定すればよい。

C:\Data>mklink mycmd.exe c:\Windows\System32\cmd.exe …cmd.exeに対するリンク
mycmd.exe <<===>> c:\Windows\System32\cmd.exe のシンボリック リンクが作成されました

C:\Data>mklink mytestfile.c \\server1\prj\Development1\test.c …リモートのサーバ上のファイルに対するリンクの作成
mytestfile.c <<===>> \\server1\prj\Development1\test.c のシンボリック リンクが作成されました

C:\Data>dir …作成した内容を確認してみる
ドライブ C のボリューム ラベルは WINDOWSVISTA です
ボリューム シリアル番号は FC73-1DF1 です

C:\Data のディレクトリ

2008/02/20  15:01    <DIR>          .
2008/02/20  15:01    <DIR>          ..
2008/02/20  14:58    <SYMLINK>      mycmd.exe [c:\Windows\System32\cmd.exe]
2008/02/20  15:01    <SYMLINK>      mytestfile.c [\\server1\prj\Development1\test.c]
               2 個のファイル                   0 バイト
               2 個のディレクトリ  11,546,685,440 バイトの空き領域

 ファイルに対するシンボリック・リンクには「<SYMLINK>」という属性が表示されている。また続く[]内に、リンク先のファイルのパスが表示されている(これはWindows Vista以降のコマンド・プロンプトにおける拡張機能)。ローカルのファイルだけでなく、リモートのファイル・サーバ上のファイルに対してもリンクを張ることができる。

フォルダへのシンボリック・リンクを作成する

 フォルダに対するシンボリック・リンクを作成するには、/dオプションを使用する。

C:\Data>mklink /d picfolder2 c:\Users\hiroy-u\Pictures …ローカルのフォルダへのリンク
picfolder2 <<===>> c:\Users\hiroy-u\Pictures のシンボリック リンクが作成されました

C:\Data>mklink /d newprj2  \\server1\prj\Development1 …リモートのフォルダへのリンク
newprj2 <<===>> \\server1\prj\Development1 のシンボリック リンクが作成されました

C:\Data>dir /ad …作成した内容を確認してみる
ドライブ C のボリューム ラベルは WINDOWSVISTA です
ボリューム シリアル番号は FC73-1DF1 です

C:\Data のディレクトリ

2008/02/20  15:10    <DIR>          .
2008/02/20  15:10    <DIR>          ..
2008/02/20  15:10    <SYMLINKD>     newprj2 [\\server1\prj\Development1]
2008/02/20  15:10    <SYMLINKD>     picfolder2 [c:\Users\hiroy-u\Pictures]
               0 個のファイル                   0 バイト
               4 個のディレクトリ  11,546,763,264 バイトの空き領域

 フォルダへのリンクの場合は「<SYMLINKD>」という属性が表示される。フォルダに対し、間違ってファイルのへのリンクを作成すると(/dオプションを付け忘れると)、例えばcdコマンドがエラーになり、カレント・フォルダを変更できない。

シンボリック・リンクの削除

 シンボリック・リンクは通常のファイルやフォルダと同じなので、例えばエクスプローラ上で削除操作を行うと、そのリンクが削除される(リンク先が削除されるわけではない)。コマンド・プロンプト上で作業する場合は、ファイルへのリンクの削除ならdelコマンド、フォルダへのリンクの削除ならrdである(フォルダへのリンクをdelで削除しようとすると、そのフォルダの中のファイルが削除されてしまうので注意)。

エクスプローラにおけるリンク先の表示

 シンボリック・リンクなどのリンク先をエクスプローラで確認するには、[リンク先]という表示項目を新しく追加する必要がある。エクスプローラの項目名のバーを右クリックしてポップアップ・メニューから[その他]を選択するか、[表示]メニューの[詳細表示の設定]を選択し、[詳細表示の設定]ダイアログで[リンク先]というチェック・ボックスをオンにする。すると次のように、リンク先の情報が表示される。

エクスプローラでシンボリック・リンクを作成する
エクスプローラでは、シンボリック・リンクの場合、ファイルやフォルダのアイコンがショートカットのアイコンになる(アイコンの左下に小さな矢印が付いている)。
フォルダへのシンボリック・リンク。
ファイルへのシンボリック・リンク。
リンク先。この項目は、デフォルトでは表示されていない。このバーの部分を右クリックして、表示項目として[リンク先]を追加すること。

SFUによるシンボリック・リンクのサポート

 SFU(Microsoft Windows Services for UNIX)は、Windows OS上でUNIX互換環境を実現するシステムであるが、これに含まれるlnコマンドを使えばシンボリック・リンクを作成できる(SFUについてはTIPS「UNIX互換環境を実現するSFUを利用する」参照)。例えば「ln -s test.c newfile.c」とすれば、既存のtest.cファイルに対して、newfile.cという名前のシンボリック・リンクを作成できる(引数の順番はmklinkコマンドとは逆)。SFUはWindows 2000やWindows XPなどでも動作するため、 これでも十分と思うかもしれない。

 だがSFUのln -sコマンドで作成されるシンボリック・リンクは、SFU環境内でのみ利用可能な独自の機能である(実際には、システム属性が付けられたファイル内に、リンク先の名前文字列をUnicode文字列で書き込んでいるだけ)。エクスプローラやコマンド・プロンプト、SFU以外の通常のWindowsアプリケーションなどからは見えないので、Windows VistaやWindows Server 2008のシンボリック・リンクの代用にはならない。End of Article


更新履歴
【2013/01/31】 mklinkコマンドのことを「mklink.exe」すなわち外部コマンドとして表記していましたが、mklinkはコマンド・プロンプトの内部コマンドでした。そこで「mklink.exe」を「mklink」に修正し、内部コマンドであることを追記しました。以上、お詫びして訂正いたします。

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間