web-dev-qa-db-ja.com

MKLINK対Junction.exe

SysInternals には、Windowsでジャンクション(別名 再解析ポイント 、別名シンボリックリンク)を作成するプログラム junction.exe があります。

ただし、Windowsにも mklink が付属しており、同じことを行うようです。

大きな違いはありますか?

私は、SysInternalsに独自のプログラムがある場合、標準のMKLinkプログラムに欠陥があると考えがちです。

26
abelenky

比較

Mark Russinovichのjunctionプログラムは、ジャンクションポイントの作成(および削除)という特定の目標を念頭に置いて設計されました。それは何年にもわたって維持されましたが、今のところ新しい機能は追加されていません。最新バージョンは2016年7月4日にリリースされました。

mklinkについては、Windows Vista以降で使用できる組み込みコマンドです。ハードリンク、ジャンクションポイント、シンボリックリンクを作成できます。特定の削除機能は提供されていません。リンクがファイルを指すのかディレクトリを指すのかに応じて、delコマンドまたはrdコマンドを使用するだけです。


ちょっとした歴史

Vistaより前のバージョンでは、Windowsオペレーティングシステムはそのままではジャンクションポイントを作成する方法を提供していませんでした。公式の Resource Kit のコピーを入手する必要がありました。パーティープログラム、または自分で書きます。

2000年

junctionツールの最初のバージョンがリリースされました。公式ウェブサイトの引用:

Windows 2000以降は、ディレクトリシンボリックリンクをサポートしています。ディレクトリは、コンピュータ上の別のディレクトリへのシンボリックリンクとして機能します。 [...]

残念ながら、Windowsにはジャンクションを作成するためのツールがありません。ジャンクションを作成するためのlinkdプログラムに付属しているWin2Kリソースキットを購入する必要があります。そのため、私は独自のJunction作成ツールJunctionを作成することにしました。

出典: Junction

2005-06

mklinkコマンドは、初期のベータ段階でWindows Vistaに導入されました。

これは、2005年7月27日に正式なベータ1が出荷されてから利用可能でした。当初はシンボリックリンクとハードリンクしか作成できませんでした。ジャンクションポイントを作成する機能は、2005年12月19日にリリースされたCommunity Technology Preview(CTP)で後に登場しました。

どうやらコマンドは最初に公開された2006年のしばらく後まで完全に気付かれなかったようです。これが私が見つけた最も古いリファレンスです:

Windows Vistaでシンボリックリンクを作成できるようになりました。

C:\test>ver

Microsoft Windows [Version 6.0.5365]

C:\test>mklink
Creates a symbolic link.

MKLINK [[/D] | [/H] | [/J]] Link Target

[...]

ソース: Windows Vistaのシンボリックリンク

また:

マルコム[MSFT](専門家):
Q:シンボリックリンクを作成する本当に簡単な方法はありますか?
A:CMDを開き、「mklink」と入力します。このツールを使用すると、ジャンクション、ハードリンク、シンボリックリンクを作成できます。

出典: NTFS Beta Chat Transcript(2006年7月12日)


追加情報

ファイルまたはディレクトリには、ユーザー定義データのコレクションである再解析ポイントを含めることができます。このデータの形式は、データを保存するアプリケーションと、データを解釈してファイルを処理するためにインストールするファイルシステムフィルターによって理解されます。

たとえば、再解析ポイントは、NTFSファイルシステムリンクとMicrosoftリモートストレージサーバー(RSS)を実装するために使用されます。

出典: 再解析ポイント

NTFSファイルシステムでサポートされているファイルリンクには、ハードリンク、ジャンクション、シンボリックリンクの3つのタイプがあります。

出典: ハードリンクとジャンクション

ハードリンク

ハードリンクは、ファイルのファイルシステム表現であり、複数のパスが同じボリューム内の1つのファイルを参照します。 [...]そのファイルへの変更は、それを参照するハードリンクを介してアクセスするアプリケーションに即座に表示されます。ただし、ディレクトリエントリのサイズと属性情報は、変更が行われたリンクに対してのみ更新されます。

出典: ハードリンクとジャンクション

ジャンクション

ジャンクション(ソフトリンクとも呼ばれます)がハードリンクと異なる点は、ジャンクションが参照するストレージオブジェクトが個別のディレクトリであり、ジャンクションが同じコンピューター上の異なるローカルボリュームにあるディレクトリをリンクできることです。

出典: ハードリンクとジャンクション

ジャンクションポイントは、ローカルボリューム上のディレクトリにのみリンクできます。リモート共有へのジャンクションポイントはサポートされていません。

ソース: NTFS接合点

シンボリックリンク

シンボリックリンクは、別のファイルシステムオブジェクトを指すファイルシステムオブジェクトです。指し示されているオブジェクトはターゲットと呼ばれます。

シンボリックリンクはユーザーに対して透過的です。リンクは通常のファイルまたはディレクトリとして表示され、ユーザーまたはアプリケーションがまったく同じ方法で操作できます。

出典: シンボリックリンク

[シンボリックリンク]は、 Windows Vista を使用してNTFSファイルシステムに変更を加えたときに導入されましたが、 Windows XP のフィルタードライバーを介して利用できます。

NTFSジャンクションポイント (Windows 2000以降で利用可能)とは異なり、シンボリックリンクはファイルまたはリモート [〜#〜] smb [〜#〜 ] ネットワークパス。 NTFSジャンクションポイントはローカルドライブ上の絶対パスのみをサポートしますが、NTFSシンボリックリンクは相対パスを使用したリンクを許可します。

Windows Vista/ Windows 7 のデフォルトのセキュリティ設定では、昇格していない管理者とすべての非管理者がシンボリックリンクを作成できません。

ソース: NTFSシンボリックリンク

参考文献

40
and31415

コメントですでに述べたように、junction.exemklinkコマンドに付属するVista/Winserver 2008より前にリリースされました。

したがって、Vista以降で使用しても意味がありません。いずれにしても、Vistaより古いバージョンのWindowsはサポートされなくなりました。

また、junction.exeは、Vista/WinServer 2008とmlinkコマンドで導入された NTFSシンボリックリンク (-- NTFSジャンクション のみ)をサポートしていません。

2
paradroid