Vistaのシンボリックリンク
Vistaのシンボリックリンクを調べたくて、今更ながらRC1をVirtual PCにインストールしました。
インストールの所要時間は1時間程度でした。
Vistaのシンボリックリンクを作成するには、mklinkというコマンドを使います。
このコマンドはAdministrator権限を必要とするため、「コマンド プロンプト」を起動する際に、ショートカット上で右クリックして、コンテキストメニューから「管理者として実行(A)...」を選んで起動する必要があります。
使用例はこんな感じになります。
C:\Users\hamigaki\Documents>mkdir dir C:\Users\hamigaki\Documents>mklink /D link dir link <<==>> dir のシンボリック リンクが作成されました C:\Users\hamigaki\Documents>type CON > abc.txt abc ^Z C:\Users\hamigaki\Documents>mklink link.txt abc.txt link.txt <<==>> abc.txt のシンボリック リンクが作成されました C:\Users\hamigaki\Documents>dir ドライブ C のボリュームラベルがありません。 ボリューム シリアル番号は 1C47-04C0 です C:\Users\hamigaki\Documents のディレクトリ 2006/11/10 18:33 <DIR> . 2006/11/10 18:33 <DIR> .. 2006/11/10 18:32 5 abc.txt 2006/11/10 18:32 <DIR> dir 2006/11/10 18:33 <SYMLINKD> link [dir] 2006/11/10 18:33 <SYMLINK> link.txt [abc.txt] 2 個のファイル 5 バイト 4 個のディレクトリ 9,620,389,888 バイトの空き領域
Vistaのシンボリックリンクは、ディレクトリに対するシンボリックリンク(SYMLINKD)と、ファイルに対するシンボリックリンク(SYMLINK)が明確に区別されています。
そのため、SYMLINKDを作成する場合はmklinkに/Dオプションを指定する必要があります。
削除するのもSYMLINKDはrmdirを使います。
エクスプローラ上では、
- アイコンにショートカットのような矢印が付く
- 「更新日時」、「サイズ」はシンボリックリンク自身のものになる(つまり、サイズ=0)
- 「種類」はSYMLINKDならディレクトリ、それ以外はシンボリックリンクの拡張子に従う
のように見えます。
どうも、Vistaのシンボリックリンクは、ファイル属性にシンボリックリンク(リパースポイント)が付いただけのただのファイル/ディレクトリで、中身だけ別のところにあるといった感じのもののようです。
実際、タイムスタンプだけでなく、「読み取り専用」や「隠しファイル」といった属性やACLまでターゲットとは別に設定可能です。(ただし、シンボリックリンクの「読み取り専用」やACLはファイルの読み書きの際は無視されるようです。)
POSIXのシンボリックリンクが、ターゲットと同じファイル/ディレクトリが存在するかのように見せかけるのに対し、Vistaのそれはターゲットと同じ内容を共有する別ファイル/ディレクトリといった印象です。
また、SYMLINKDのターゲットをファイルにしたり、SYMLINKのターゲットをディレクトリにすることもできますが、オープンできないシンボリックリンクになります。
ちなみに、ファイルに対するSYMLINKDを作って、それに対するSYMLINKも作ってみましたが開けませんでした。
ディレクトリとファイルの不一致はファイルシステムレベルで弾かれているようです。
ちょっと面白いのは、シンボリックリンクにターゲットと別の拡張子をつけると起動するアプリケーションを切り替えることができる点です。
XMLファイルなんかを編集用と閲覧用で別拡張子にしておくと便利かもしれません。
拡張子の付いていないC++標準ヘッダに.hppとかのシンボリックリンクを作るのもよさそうです。