符號連結和快捷方式有什麼區別?

符號連結和快捷方式有什麼區別?

符號連結和快捷方式有什麼區別?

答案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 副檔名並僅顯示“遊戲”,即使您取消選取“隱藏已知檔案類型的副檔名”也是如此。但是如果您打開命令提示字元並執行 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 檔案中實際儲存的內容(二進位資料),儘管十六進位編輯器顯示得更好:

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

而嘗試在實際子資料夾上執行記事本會跳出「存取被拒絕」錯誤訊息和一個空記事本。

相反,如果我創建文件符號連結(而不是資料夾符號連結),我可以使用記事本啟動它。在以下 notepad.exe 呼叫中,前兩個有效,第三個失敗(它打開 .LNK 文件,二進位 gobbledegook)。

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"

這不僅僅是控制台的事情。將記事本的快捷方式複製到我的桌面並嘗試將這三個快捷方式拖放到其上,它表現出完全相同的行為。 (因為與雙擊不同,拖放可以讓應用程式解釋捷徑。)

關於目錄符號連結和連接之間的差異,請參見這次討論,這是一個非常有用的描述:

「Windows 解析符號連結和目錄連接的方式的一個主要區別在於處理發生的位置。Windows 處理本機系統上的符號鏈接,即使它們引用遠端檔案伺服器上的位置。Windows 處理引用遠端檔案伺服器的目錄連接。因此,伺服器上的符號連結可以引用只能從客戶端存取的位置(如其他客戶端磁碟區),而目錄聯結則無法解決此問題,Windows Vista 支援這兩個檔案的新符號連結類型。

「許多檔案系統命令已經更新,以了解符號鏈接的含義。例如,刪除命令知道不跟隨鏈接,這會導致目標的刪除,而是刪除鏈接。但是,因為並非所有應用程式可以正確處理符號鏈接,創建符號連結需要新的建立符號連結權限,預設只有管理員擁有該權限。

答案4

有時有一個函數範例很好,所以我會解釋一下我如何使用這個函數。

我使用谷歌驅動器來備份文件,但有時我想備份特定文件夾中的文件(我無法將它們移動到../谷歌驅動器)。特別是對於 Windows 10 通用應用程序,設定檔等儲存在應用程式資料中,大多數時候我無法更改此位置。

我使用 Windows 原生 stikynot 應用程序,我想備份我的筆記,所以我在這裡使用了符號連結。 Google Drive 將該連結識別為實際文件並很好地同步文件,而實際文件仍在 appdata 資料夾中。

當我本地有項目資料夾之類的文件時,我不想同步到雲,我會使用快捷方式(複製、貼上->貼上快捷方式)。

相關內容