シンボリックリンクとショートカットの違いは何ですか?

シンボリックリンクとショートカットの違いは何ですか?

シンボリックリンクとショートカットの違いは何ですか?

答え1

重要なのは、ショートカットは単なるファイルだということです。ショートカットにはサイズがあり (小さいサイズで、ショートカットが指す場所を示すだけです)、使用するにはそのファイルタイプをサポートするアプリケーションが必要です。

シンボリックリンクはファイルシステムレベルであり、すべてから見えるとして元のファイル。シンボリック リンクを使用するためにアプリケーションで特別なサポートは必要ありません。

答え2

「シンボリック リンク」は、実際には機能的にディレクトリまたはファイルの代わりとして動作し、Unix/Linux 環境でよく使用されます。Windows でもサポートされているようですが、実際に使用されているのを見たことがありません。

「ショートカット」とは、表示されるアイコンなどの他の情報とともに、宛先ファイルまたはディレクトリへの参照を持つ通常のファイルです。シンボリック リンクとは異なり、DOS では「cd ./shortcut-name」を実行できません (Unix/Linux では「cd ./symlink-name」を実行でき、実際のサブディレクトリと同じように機能します)。

また、ほとんどの Windows アプリケーションでは、[ファイル] -> [開く] GUI ダイアログでショートカットをクリックすると、ファイル名フィールドにそのショートカットのファイル名が入力され、サブディレクトリのように機能しますが、Unix/Linux では、GUI はシンボリック リンクをパスとして扱います (ファイル名フィールドは変更されません)。

答え3

他の人が言及しているように、シンボリックリンクはファイルシステムレベルで利用可能なリンクの一種であり、アプリケーションに対して透過的です。このドキュメント非常に役に立ちます (特に「外部ジャンクション/シンボリック リンクの切り取り/展開/接合」セクション)。また、そこにあるツールも良さそうです。(これと mklink について言及することで、より多くの検索でこのディスカッションが見つかると期待しています。)

ショートカットはファイルであり、実際のリンクではありません。通常、Windows UI (ユーザー インターフェイス) によって解釈された場合にのみ、リンクとして正常に実行されます。たとえば、フォルダー ショートカットをダブルクリックすると、Windows によって別の場所にリダイレクトされます (これには、ほとんどのアプリケーションで呼び出される一般的な [ファイルを開く] および [ファイルを保存] ダイアログが含まれます)。デスクトップには、このフォルダーへのショートカットがあります: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\G

ショートカットのファイル名は C:\Users\user5\Desktop\Games.lnk ですが、Windows では .lnk 拡張子が非表示になり、「既知のファイル タイプの拡張子を非表示にする」のチェックを外しても「Games」のみが表示されます。ただし、コマンド プロンプトを開いて dir を実行すると、次のように表示されます。

C:\Users\user5\Desktop>dir "g*"
 Volume in drive C has no label.
 Volume Serial Number is 900...
 Directory of C:\Users\user5\Desktop
03/08/2014  05:30 PM             1,710 Games.lnk
               1 File(s)          1,710 bytes
               0 Dir(s)  246,818,222,080 bytes free

\D オプション (ディレクトリ用) を使用して、シンボリック リンクで同等のものを作成できます。

C:\Users\user5\Desktop>mklink /D mysymlink  "C:\ProgramData\Microsoft\Windows\S
tart Menu\Programs\G"
symbolic link created for mysymlink <<===>> C:\ProgramData\Microsoft\Windows\Sta
rt Menu\Programs\G

C:\Users\user5\Desktop>cd mysymlink

C:\Users\user5\Desktop\mysymlink>

(これはフォルダー リンクなので、ディレクトリ ジャンクション (\J) もオプションです。) Windows エクスプローラーでは、このコンソールやほとんどのアプリケーションと同様に、(a) 別の場所にリダイレクトしたり (b) 失敗したりするのではなく、この明らかなサブディレクトリを「下へ」参照できます。

ショートカットはサブディレクトリのようには動作しません。 次のコマンドで Windows UI のデフォルトのファイル動作を呼び出すことができます (これにより、Windows エクスプローラーで "G" フォルダーが開きます)。

C:\Users\user5\Desktop>"Games.lnk"

一方、mysymlink は実際のサブディレクトリとしてリストされており (カウントを参照)、その方法で起動することはできません。

C:\Users\user5\Desktop>dir "my*"
 Volume in drive C has no label.
 Volume Serial Number is 900...

 Directory of C:\Users\user5\Desktop

03/29/2014  06:08 PM    <DIR>          mysubdir
03/29/2014  05:40 PM    <SYMLINKD>     mysymlink [C:\ProgramData\Microsoft\Windo
ws\Start Menu\Programs\G]
               0 File(s)              0 bytes
               2 Dir(s)  246,816,153,600 bytes free

C:\Users\user57\Desktop>mysubdir
'mysubdir' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\user57\Desktop>mysymlink
'mysymlink' is not recognized as an internal or external command,
operable program or batch file.

逆に、ショートカットにディレクトリを変更することはできません。

C:\Users\user5\Desktop>cd "Games.lnk"
The directory name is invalid.

Windows UI では、右クリックしてショートカットのプロパティを編集できます。または、次の図は .lnk ファイルに実際に保存されている内容 (バイナリ データ) を正確に示していますが、16 進エディターの方がわかりやすく表示されます。

C:\Users\user5\Desktop>notepad.exe "Games.lnk"

一方、実際のサブフォルダーでメモ帳を実行しようとすると、「アクセスが拒否されました」というエラー メッセージが表示され、空のメモ帳が表示されます。

逆に、ファイルのシンボリックリンク (フォルダーのシンボリックリンクではない) を作成すると、メモ帳で起動できます。次の notepad.exe 呼び出しのうち、最初の 2 つは機能しますが、3 番目は失敗します (バイナリの意味不明な .LNK ファイルが開きます)。

C:\Users\user5\Desktop>mklink symplain.txt plain.txt
symbolic link created for symplain.txt <<===>> plain.txt

C:\Users\user5\Desktop>notepad.exe "symplain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt.lnk"

これはコンソールだけの問題ではありません。メモ帳へのショートカットをデスクトップにコピーし、3 つをそれぞれそこにドラッグ アンド ドロップしてみると、まったく同じ動作が見られます。(ドラッグ アンド ドロップはダブルクリックとは異なり、アプリケーションがショートカットを解釈するためです。)

ディレクトリシンボリックリンクとジャンクションの違いについては、この議論、そしてここに非常に役に立つ説明:

「Windows がシンボリック リンクとディレクトリ ジャンクションを解決する方法の主な違いは、処理が行われる場所です。Windows は、シンボリック リンクがリモート ファイル サーバー上の場所を参照している場合でも、ローカル システム上でシンボリック リンクを処理します。Windows は、リモート ファイル サーバーを参照するディレクトリ ジャンクションをサーバー自体上で処理します。したがって、サーバー上のシンボリック リンクは、他のクライアント ボリュームのように、クライアントからのみアクセス可能な場所を参照できますが、ディレクトリ ジャンクションは参照できません。この問題に対処するために、Windows Vista は、ファイルとディレクトリの両方に対して新しいシンボリック リンク タイプをサポートしています。

「多くのファイル システム コマンドは、シンボリック リンクの意味を理解するように更新されました。たとえば、Delete コマンドは、ターゲットの削除につながるリンクをたどらず、代わりにリンクを削除します。ただし、すべてのアプリケーションがシンボリック リンクを正しく処理できるわけではないため、シンボリック リンクを作成するには、管理者のみがデフォルトで持つ新しいシンボリック リンクの作成権限が必要です。」

答え4

時々機能的な例があると便利なので、この機能の使い方を説明します。

私は Google ドライブを使用してファイルをバックアップしていますが、特定のフォルダー内のファイルをバックアップしたい場合があります (../google ドライブに移動することはできません)。特に、Windows 10 ユニバーサル アプリでは、構成ファイルなどが appdata に保存され、ほとんどの場合、この場所を変更できません。

私は Windows ネイティブの stikynot アプリを使用しており、メモをバックアップしたかったので、ここでシンボリックリンクを使用しました。Google ドライブはリンクを実際のファイルとして認識し、ファイルを正常に同期しますが、実際のファイルは appdata フォルダーに残っています。

プロジェクト フォルダーなどのファイルをローカルに保存していて、クラウドに同期したくない場合は、ショートカット (コピー、貼り付け -> 貼り付けのショートカット) を使用します。

関連情報