« Waterfront の傘 | トップページ | 携帯が知らせる電車情報(その5 iNextTrainに変えてみた) »

2009年6月13日 (土)

ジャンクションを使ってみる(その2 実践編)

前回に引き続き、今回はジャンクションの実践編である。(特に指定のない場合は、Windows XP Home Edition を使用している。)

前回の最後に書いたように、Windows では、ジャンクションやハードリンクをまともに使うための手段が標準では用意されていないので、フリーソフトを使ってみることにする。

私が、お薦めするのは、T.Kawasaki氏作成の 「リンク作成シェル拡張 for Windows 2000/2003/XP」 で、以下のページからダウンロードできる。

リンク作成シェル拡張 for Windows 2000/2003/XP 再配布ページ
http://www4.point.ne.jp/~numa/lnhdr/index.html

ダウンロードした msi ファイルをダブルクリックした後、指示に従えばインストールは完了である。

使い方の例として、[Q:\クリップボード] フォルダ以下の実体に、[C:\freesoft\クリップボード] からアクセスできるようにすることを考える。すなわち、[C:\freesoft\クリップボード](リンク側)から [Q:\クリップボード](リンク先=実体側)にリンクを張ってみる。

リンクの張り方は簡単で、エクスプローラ上でリンク先を右クリックしたまま、リンクを作成する場所までドラッグする。そのとき下図のようなメニューが表示されるので、「リンクを作る」を選択する。これで、リンクは完了である。(別のソフトによって表示されている標準以外の項目が多数あるが、気にしないように)

Junction

実際にエクスプローラで
C:\ → freesoft → クリップボード
と順にクリックして展開していくと、[Q:\クリップボード] フォルダ以下にあるファイル群が、あたかも [C:\freesoft\クリップボード] フォルダ以下にあるように見える。(エクスプローラの上部に表示されるパスも "C:\freesoft\クリップボード" となっている。)

Junction0_1

dir コマンドで見てみると("C:\freesoft>"はプロンプト)

C:\freesoft>dir クリップ*
C:\freesoft のディレクトリ

2009/06/01  00:00    <JUNCTION>     クリップボード

といったように、通常のフォルダであれば、<DIR> と表示される箇所に <JUNCTION> と表示される。

また、「リンク作成シェル拡張 for Windows 2000/2003/XP」をインストールした場合は、エクスプローラ上でジャンクションを識別できるように以下の拡張が行われている。

  1. フォルダのアイコンの左下に「ショートカット」に似た矢印が付く
  2. 「リンク先」欄にリンク先が表示される

なお、2の「リンク先」欄をエクスプローラに表示させるためには、 ファイルメニューの[表示]→[詳細]で詳細表示モードにしてから、「名前」などのタイトル部を右クリックして現れる表示項目選択メニューで、「リンク先」にチェックを入れる必要がある。なお、ハードリンクの確認用として、前回の記事でも説明した「リンク数」の表示も可能である。(下図参照)

Junction_2

Junction_3

下図はエクスプローラでの、ジャンクション(1行目)、ボリュームマウント(2行目)、ハードリンク(4行目)の表示例である。

Junction8

 

最後に、Vistaの場合について補足する。

前回と今回の記事に関連した内容での、Vistaの場合の差異をざっと挙げると以下のようになる。

  • 「ホンモノのシンボリックリンク」がサポートされた。(以下、単に「シンボリックリンク」と記す。)
    ジャンクションと比べて、以下のことができるらしい。
     - フォルダだけでなくファイルにも使うことができる
     - ネットワークドライブやUNCパスにも使える
     - 相対パスが使える
  • ジャンクション、シンボリックリンク、ハードリンクを扱える mklink コマンドが新しく実装された。
  • エクスプローラ上で、シンボリックリンクにはショートカットと同じアイコンが表示されるようになった。(ただし、相変わらず操作することはできない。)
  • 「リンク作成シェル拡張 for Windows 2000/2003/XP」は使えない。(ソフト名からの推測であり私は試してはいない。少なくともシンボリックリンクは使えないハズだ。)

mklinkコマンドも悪くはないが、「リンク作成シェル拡張 for Windows 2000/2003/XP」相当のツールが良い人は、Hardlink Shell Extension がお薦めである。(ただし日本語版はないようだ。)

Link Shell Extension
http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html

使い方や詳しい説明も上のページに載っているが英語だ。
日本語では、以下のページの説明が詳しい。

Hardlink Shell Extension - k本的に無料ソフト・フリーソフト
http://www.gigafree.net/system/explorer/hardlinkshellextension.html

使い方は上のページを参照して欲しいが、ジャンクション、シンボリックリンク、ハードリンクのどれでもエクスプローラ上の右クリックメニューから操作することができる。また、エクスプローラ上で、ジャンクションやハードリンクのアイコンに独自の印が表示されたり、フィルダやファイルのプロパティの画面に「Link Properties」というタブが追加されリンクの情報が表示されるようになる。
面白いのは、「HardLink Clone」や「SymbolicLink Clone」と言うおまけ機能で、あるフォルダ以下のフォルダ構造をそのまま別の場所に通常のフォルダとしてコピーして、ファイルだけは元のファイルのハードリンクやシンボリックリンクとして作成することが可能だ。

Vistaでは、初期導入時から、ジャンクションやシンボリックリンクが色々と張られている。
その1例を以下に示す。

以下は dir コマンドのアウトプット(抜粋)である。このように、ジャンクションやシンボリックリンクには、最後に[]でリンク先が表示されるようになっている。(表示幅の関係で、表示上改行されているかも)
また、"C:\>" などはプロンプトである。

なお、dir コマンドで、あるはずのフォルダやファイルが表示されない場合は、dir /a を試して見るか、
[コントロールパネル]→[システム]→[システムの詳細]→[詳細設定]タブ→[環境変数]ボタン→[環境変数]ウィンドウ 
で、システム環境変数 DIRCMD を作成し、「/a」を設定すると幸せになれるかもしれない。

C:\>dir
C:\ のディレクトリ

2006/11/02  22:02    <JUNCTION>     Documents and Settings [c:\Users]

ということで、XP にあった [C:\Documents and Settings] は実フォルダではなく、 [C:\Users] へのジャンクションに変わっている。
また、[C:\Users] を覘いてみると・・・

C:\Users>dir
C:\Users のディレクトリ

2006/11/02  22:02    <SYMLINKD>     All Users [c:\ProgramData]
2006/11/02  22:02    <JUNCTION>     Default User [c:\Users\Default]

All Users や Default User は、それぞれ シンボリックリンクとジャンクションである。

何故に、このようにリンクを張っているのか(互換性の為とも聞くが、そもそもなぜフォルダ構造を変えたのか)、シンボリックリンクとジャンクションはどのように使い分けているか、など、素人の私では検討もつかない奥深さが満載だ。

実は、たいした理由はなかったりして・・・

|

« Waterfront の傘 | トップページ | 携帯が知らせる電車情報(その5 iNextTrainに変えてみた) »

コメント

いまさらですが、簡易「ジャンクション」作成してます
1.ジャンクションにするフォルダを共有にする
2.マイ ネットワークを展開し
  Microsoft Windows Network
   ワークグループ
    自分のコンピュータを表示させ
3.先の共有フォルダを右クリックで
  マイ ネットワークにドロップします
   「ショートカットをここに作成」を選ぶ
4.出来たショートカットを目的のドライブや
  フォルダに移動する
5.出来たフォルダの名称を変更する
6.元のフォルダの共有を解除する

これって熟知されている方法なんでしょうか?
機能的に「ジャンクション」と異なるのでしょうか?

○データが入ったままのフォルダで作成できる
○アイコンは通常のフォルダと区別出来ないから怖い
(元フォルダのアイコンを変更するとコチラも変わる)
○ジャンクションを削除(シフト+DEL)しても
 オリジナルは削除されないから安心
○プログラム等から実体として参照出来ているのかは
 わかりません
○ネットワークフォルダの場合は内容を表示するのに
 時間がかかる場合があるかもしれません
○XpHomeでは無理かも

会社では様々な業務のネットワークフォルダを全て
マイ ドキュメントに持って来てます
(削除する時は怖いから、
 最初はLANを抜いてた事もありました)

ぶしつけなトラックバックですみません
以上です

投稿: い~さん | 2009年7月19日 (日) 02時52分

い~さん

Toshi です。はじめまして。
コメントいただきありがとうございます。

以下、少し長くなりますが、私が調べた範囲で回答します。

記載された方法を私の自宅(XP Home)で試してみたところ、確かに3を実行すると、「共有名 - コンピュータ名」という名前のショートカットらしきもの(エクスプローラのプロパティでみると「フォルダ」)ができますね。クリックすると、その共有フォルダに移動します。

興味があったので少し調べたところ、これは「ネットワークプレース」という代物で、ジャンクションとは全くの別物です。(「ネットワークプレース」自体は、ググって調べてみてください。一言でいえば、ネットワーク上の共有フォルダに素早く移動するためのショートカットのようなもののようです。私はこれまで使った記憶がありませんでした。)

実際、この「共有名 - コンピュータ名」というフォルダをローカルの適当なフォルダにコピーしてDOS窓で見ると、同名の普通のフォルダとして見え、その下に Desktop.ini と target.lnk という2つのファイルが存在することがわかります。(target.lnk は普通のショートカットファイルです。) 
要は、親フォルダとこの2つのファイルの組合せ(+決められた属性)が存在するときに、エクスプローラが、これらを「ネットワークプレース」として処理するようです。

ちなみに、親フォルダに対し
attrib -r "親フォルダ名"
で読み取り専用属性を解除すると、化けの皮がはがれエクスプローラでもその構造を見ることができるようになります。

結局、ネットワークプレースは共有フォルダに対するショートカットとして動作するので、エクスプローラやデスクトップ上のアイコンから使用する限りは、ジャンクションと同じ効果と言えます。(正確には、ネットワーク上の共有フォルダへのリンクは、ジャンクションではできず、Vistaの「ホンモノのシンボリックリンク」しかできません。)
ただし、ネットワークプレースは、ジャンクションやシンボリックリンクのようにファイルシステム上の実装ではなく、あくまでもWindowsのシェルが認識・処理しているものなのので、それを意識して作成されていない通常のアプリケーションでは動作しません。(多分)

以上です。

なお、今回の情報は以下のサイトを参考にさせてもらいました。

2006-02-09 謎のフォルダショートカットを調べて by seraphyさん
http://d.hatena.ne.jp/seraphy/20060209

2006-07-25 - 明日はもっと幸せに by funatakeさん
http://d.hatena.ne.jp/funatake/20060725/1153835141

投稿: Toshi | 2009年7月19日 (日) 22時09分

Toshiさん
ご挨拶がおくれました。いーさんです、よろしく

お忙しい中、色々とご教授頂きありがとうございました。
また、その1での「ハードリンク」と「ジャンクション」の図解では勉強させて頂きました。

なるほど「ネットワークプレイスの追加」を手作業で行っていた、と言う事ですね。
「意識して作成されていない通常のアプリケーションでは動作しない」というのも微妙ですが妥当な結論ですね。

アイコンが自由に設定出来たり、リンクを削除しても元のフォルダは削除されない等がしっかりと考慮されれば大変便利な機能なはずです。

特にファイルサーバーでの共有フォルダを使っているオフィスでは、どんどん使って頂きたいですね。

お粗末な返信となりましたが、今後とも色々と勉強させていただきます。
本ポータルの益々のご発展を願って、失礼いたします。

投稿: い~さん | 2009年7月23日 (木) 13時19分

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: ジャンクションを使ってみる(その2 実践編):

« Waterfront の傘 | トップページ | 携帯が知らせる電車情報(その5 iNextTrainに変えてみた) »