Windowsのリンク
2018/05/27
Windowsにもリンクはあります
  • 前回Linuxのリンク(*1)について書きましたが、今回はWindowsのリンクを扱います。そうです。WindowsもLinuxと同様のリンク機能を持っています。(*2)

  • Windowsには3種類のリンク方式があります。 Linuxと同様なハードリンクシンボリックリンク、そしてWindows独自のジャンクションです。Figure 1にそれぞれのリンク機能がサポートする範囲を示します。ハードリンクはローカルのファイル本体のみ。シンボリックリンクはディレクトリとファイルの両方を扱えるのはLinuxと同様です。

    Figure 1: Windowsリンク機能のサポート範囲

  • ですがLinuxに比べると、使用に際して少し注意することがあります。以降のセクションで説明します。
Windowsのリンク mklink には管理者権限が絡む
  • Windowsリンクのコマンドは mklink です。シンボリック/ハードリンク及びジャンクションも全て mklink コマンドを使用し、使い分けはオプションの設定で行います。しかし、mklink でシンボリック/ハードリンクを設定するには管理者権限が必要です。mklinkコマンドのオプションと管理者権限との関係をTable 1に示します。

    Table 1: mklinkコマンドのオプションと権限の関係

  • ここで具体例を見てみましょう。C:\Tmp ディレクトリの下が下記構造になっていたとします。
      C:\Tmp
       +--dir_00\
           |  file_00.txt
           +--dir_00_01\
                  file_00_01.txt
    C:\Tmp で dir_00\file_00.txt へのシンボリックリンク sl_file_00.txt を作成するには下記のコマンドを実行します。
      mklink sl_file_00.txt dir_00\file_00.txt
  • 成功すると
     sl_file_00.txt <<===>> dir_00\file_00.txt のシンボリック リンクが作成されました
    というメッセージが表示されます。管理者権限設定を忘れて通常のユーザで実行すると
     この操作を実行するのに十分な特権がありません。
    のメッセージになります。

  • シンボリックリンク作成後のディレクトリを DIR コマンドで見ると下記のようになります。シンボリックリンクであることが明示的に表示されます。
      2018/05/27  09:41    <DIR>          .
      2018/05/27  09:41    <DIR>          ..
      2018/05/27  09:32    <DIR>          dir_00
      2018/05/27  09:41    <SYMLINK>      sl_file_00.txt [dir_00\file_00.txt]

シンボリックリンクとジャンクションの違い
  • ディレクトリへのリンクを作成する場合、シンボリックリンクとジャンクションの両方が使用できます。ジャンクションがシンボリックリンクと異なるのは以下の2点です。
    • 通常ユーザ権限でも作成できる
    • エクスプローラで切り取り等のジャンクション操作がジャンクション先のファイル群に影響する

  • この2番目の特徴は、ジャンクションがリンクではなく、文字通りジャンクションであることを意味しています。まさにディレクトリの別名として結合しています。従ってジャンクションを切り取りして他のディレクトリに移した場合、下のファイル群も一緒に移動(*3)してしまいます。

  • ユーザ権限でも使えるところは良いと思いますが、作成したポイントは移動しない想定なのだと思います。やはりリンクとは違うということで、私はジャンクションの使用をお勧めしません。

まとめ
  • 管理者権限が必要になりますが、Windowsではシンボリックリンクとハードリンクを使用する方が、Linuxでリンクを使用するときとイメージが合います。
  • シンボリックリンクはリモートCPUの共有ディレクトリやSambaで公開されているLinux上のディレクトリも対象にすることができます。こちらの方が応用範囲も広いです。
Notes
  • リンク機能そのものの説明は、前回レポートを参照して下さい。
  • 厳密にはWindows Vista以降ですが、現時点でサポートされているOSはVista以上なので。
  • 削除の場合、素直にジャンクションだけが消えて、実体は残ります。
Copyright(C) 2018 Altmo
本HPについて