Vista のシンボリックリンク コマンドプロンプト

次世代の Windows OS となる、Windows Vista や、
Longhorn Server(コードネーム)では、
いよいよ真のシンボリックリンクが登場する。

シンボリックリンクは、UNIX 系のそれとほぼ同様の機能だ。
Vista では、CreateSymbolicLink API が登場し、
OS で正式にサポートされた機能として実装される。

Vista のエクスプローラは、正式にリンクを採用したため、
昨日説明したような問題が起きないような設計になっている。
マウントポイントやシンボリックリンクを削除しても、
リンク先が削除されるようなことは起こらないのだ。

写真に示すのは、C:\Users フォルダである。
この内部には、2 つのリンクが存在している。
リンクしている「All Users」と「Default User」には、
小さな矢印のアイコンが重ねられており、
これがリンクであることを明確に示している。

これをコマンドプロンプトで表示したものが右の写真だ。

「Default User」はシンボリックリンクであり、
「All Users」は、ディレクトリジャンクションである。
dir コマンドでは表示が更に明確になり、
UNIX 系の ls のように、リンク先を表示する機能も持つ。

Vista では NTFS のバージョン自体は変わっていない。
シンボリックリンクは、リパースポイントの 1 機能として、
IO_REPARSE_TAG_SYMBOLIC_LINK というタグで表現される。

ディレクトリに対して上記のタグを持つ値を設定することで、
ディレクトリを指すシンボリックリンクが作成される。

これはディレクトリジャンクションに似ているが、
シンボリックリンクでは、リンク先の検証が行われないので、
存在しないパスを指し示すことができる。

また、絶対(デバイス)パスだけでなく、
ファイルシステムの相対パスによる指定も可能である。
シンボリックリンクを起点とするパスも使えるのだ。

また、ディレクトリだけでなく、
ファイルのシンボリックリンクも作成することができる。
ファイルの場合は、ファイルに対して設定することで、
ファイルを指すシンボリックリンクが作成される。

UNIX では、シンボリックリンクは常にファイルだが、
Windows Vista では、ファイルを指すリンクはファイル、
ディレクトリを指すリンクはディレクトリとなるようだ。

Vista では、ディレクトリ構成が大幅に変更されている。
例えば「\Documents and Settings」ディレクトリは、
「\Users」という短い名前に変更されており、
「\Documents and Settings\All Users」は、
「\ProgramData」と場所も名前も変更されている。

All Users のパスなどを決めうちにしている
行儀の悪いアプリケーションに対して、
互換性を与えるためなのだろうか、
従来のパスでもアクセス可能なように、
シンボリックリンクやマウントポイントが多数存在する。

NTFS を UNIX 系のファイルシステムに近づけた、
Microsoft の自信の表れなのかもしれないが、
Vista では、ハードリンク、シンボリックリンク、
マウントポイントと、リンクの使用が過剰な気がする。

利用者にとっては便利なのかもしれないが、
プログラムを開発する側にとっては、
今後は、リンクを意識したコーディングが必要になりそうだ。