2026年4月20日月曜日

Windowsのショートカットとリンクの違い

 前の投稿で、Windowsのショートカットとリンクは違うようだと書いたが、その違いを実際に試してみた。

まず、実際に同一フォルダ(E:\CAR)のショートカットとリンクを作成してみた。リンクの作成は管理者権限のcmdで次のコマンドを実行した。

C:\work>mklink /D .\CAR-ln E:\CAR
.\CAR-ln <<===>> E:\CAR のシンボリック リンクが作成されました 

リンクの実体はシンボリックリンク、それならショートカットと同じはずだと考えたがエクスプローラの表示は異なっている。

 明らかな違いは、ショートカットには1KBと表示される実体(ファイル)が見えているがリンクにはそれが無く、あたかもそこにリンク先の実体(フォルダ)があるように表示されており、見かけ上UNIX(Linux)のリンクのように機能している。UNIXのシンボリックリンクならショートカットと同じく実体がある筈だが、Windowsではそれは隠されているか別のカラクリで実装されているのだろう。

各々のプロパティを見てみると、

となっている。やはり上で述べたようにリンクはシンボリックリンクではなくUNIXのリンクのように見えている。

リンクではリンク先のファイルが読み取り専用のように見えるがこれは変更できた。

 Windowsでショートカットとリンクは同じように見えてシステム上の扱いは別物だという事がわかった。Windowsには別のカラクリとしてジャンクションもあるようだしショートカットとリンクの細かい話もあるが、それらはCopilotにでも相談して欲しい。

 

〔参考〕UNIX(Linux)の リンクとシンボリックリンク

UNIXのファイルの実体は i-nodeというデータに1:1で紐づけられている。 i-nodeは i-node番号というユニークな番号を持っている。UNIXのディレクトリはファイル名と i-node番号の対応表にすぎない。従って1つの i-nodeに対応したファイル名を複数作ることができ、これがリンクである。各i-nodeにはこの実体がいくつの名前と紐づけられているかを表すリンク数というパラメータがあり、これが0になるとその実体は消去される。

UNIXのファイルはファイルシステムという単位で管理されている。UNIXのファイルシステムは、ストレージ内の管理構造という意味ではWindowsのドライブに相当するものと考えられるが、UNIXにドライブの概念は無く、UNIXのファイル全体は1本の木構造をしている。複数のファイルシステムを扱う場合、根元(root)から立ち上がった木の何処かの枝に他の木を接ぎ木(mount)する。

i-nodeはファイルシステム毎に独立しているため、ファイルシステムが異なるとリンクは出来ない。これを可能にするのがUNIXのシンボリックリンクであり、Windowsのショートカットと同様にパスを示してファイルやディレクトリ(フォルダ)を指定する。

 一方、私はWindowsのファイルについてFat32とかNTFSという名前は知っているが 内部構造は全く理解していない。

0 件のコメント:

コメントを投稿