このページの本文へ

前へ 1 2 次へ

Windows Info 第389回

Windowsにおけるファイルリンクについてあらためて説明する

2023年07月23日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

Windowsを始め、多くのOSにはファイルの「リンク」機能がある

 Windowsに限らず、多くのOSが持つファイルシステムには「リンク」と呼ばれる機能がある。ファイルは、パスにより一意に特定可能だが、人間がファイルを管理するとき、どうしても同じファイルを別の場所(パス)にも配置したくなることがある。これを実現するのがリンクだ。リンクには、大きく「ハードリンク」と「ソフトリンク」(あるいはシンボリックリンクともいう)の2種類がある。

 ファイルシステムには、ファイル名を管理するディレクトリ領域とファイルの中身を記録する領域がある。ハードリンクはこの仕組みを利用して、同じファイルの中を指し示すファイル名を異なるパスに作る。

 特徴として、後から作ったハードリンクもオリジナルのファイル名も区別がなく、どちらも同じファイルとして扱える。通常は、ファイルシステム側に「参照カウント」と呼ばれる情報があり、リンクが作られるごとにこれが増えていき、削除されると参照カウントが減っていく。参照カウントが0になると、ファイルそのものが消去される。

 これに対して、ソフトリンクはOSがファイルシステム内に置かれた特殊なファイルを処理して、ファイルがあたかもそこにあるかのように振る舞うものだ。APIのレベルでは同等だが、ファイルシステム上はハードリンクと異なり、あくまでもOSのファイルAPI内での処理が必要になる。

 このため、異なるファイルシステムやネットワークを使った共有ファイルシステムともリンクが可能になるというメリットがある反面、リンクされている側とリンク側にはお互いに関係がなく、リンク先が削除されると、存在しないものを指し示すリンクになってしまうことがある。

 さて、WindowsのNTFSには、以下の表のようなリンクがある。

Windowsにおけるファイルリンクについてあらためて説明する

 これまでWindowsのファイルリンクに関しては、きちんと説明していなかったので、ここであらためて解説しておこう。確認事項としては、Windowsのドライブやディレクトリなどの用語があるが、これに関しては、(「Windowsにおける『パス』を改めて考える」)を参照してほしい。

 NTFSは、Windows 2000からハードリンクとジャンクションが利用可能になった。その後、Windows Vistaでシンボリックリンクがサポートされている。標準的な意味でのファイルリンクではないが、Windowsは、Windows 95からファイルショートカット(シェルリンク)がある。これは、シェル(エクスプローラー)のレベルで実現されているソフトリンクの1種である。シェルリンクはエクスプローラー上でのみ有効で、エクスプローラーのコンテキストメニューなどで作成する。

実際にWindows上でリンクを作成する

 リンクを作成するには、cmd.exeではmklinkコマンドを、PowerShell/Windows PowerShellでは、New-Itemコマンドを使う。

Windowsにおけるファイルリンクについてあらためて説明する

 mklinkコマンドはcmd.exeの内部コマンドなので、cmd.exe以外から利用する場合には、「cmd.exe /c mklink 引数」として呼び出す必要がある。しかし、リンクにパスを指定できるため、カレントディレクトリに関わりなく、他のディレクトリにリンクを作成できる。これに対して、PowerShellのNew-Itemコマンドでは、-Nameオプションに指定できるのはリンクの名前だけで、カレントディレクトリ以外にリンクを作成する場合、別途-Pathオプションを使って作成先ディレクトリを指定する必要がある。

 なお、シェルリンクに関しては、手動操作による作成が基本だが、コマンドラインから行うことは不可能ではない。具体的には、以下のようにWScript.Shellオブジェクトを使う。リンクパスは、リンク名に必ず拡張子「.lnk」を付ける。

$s=(New-Object -ComObject WScript.Shell).CreateShortcut("リンクパス")
$s.TargetPath="ターゲットパス"
$s.Save()

Windowsにおけるファイルリンクについてあらためて説明する

WScript.Shellオブジェクトを使うことで、PowerShellからシェルリンク(ファイル・ショートカット)を作成できる。シェルリンクは、エクスプローラー上ではリンクとなるが、コマンドラインなど、エクスプローラー外からは単なるファイルにしか見えない

 1行目の「リンクパス」、2行目の「ターゲットパス」は、どちらもフルパスを指定する必要がある。なお、このコマンドであれば、現在は存在しないファイル/フォルダへのリンクを作成できる。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン