題 “目錄連接”與“目錄符號鏈接”?


在NTFS的背景下:

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

/D      創建目錄符號鏈接。默認是文件符號鏈接。
/H      創建硬鏈接而不是符號鏈接。
/J      創建目錄連接。
Link    指定新的符號鏈接名稱。
Target  指定新鏈接引用的路徑(相對或絕對)。

  1. 不是 目錄連接 與a完全相同的東西 目錄符號鏈接

    有什麼區別 mklink /D f1 f2 和 mklink /J f1 f2 ?

  2. 因為“目錄”實際上只是一個 文件,目錄符號鏈接和文件符號鏈接之間有什麼區別?


344
2017-10-05 03:28


起源


有關: superuser.com/q/347930/24500 - surfasb


答案:


結點絕對不是目錄符號鏈接,儘管它們的行為類似。主要區別在於,如果您正在查看遠程服務器, 聯結在服務器上處理 和 目錄符號鏈接在客戶端處理。另請參閱Matthew對這一事實的評論,這意味著本地文件系統上的符號鏈接可以指向遠程文件系統。

假設在一台名為Alice的機器上你要放置一個連接點 c:\myjp 和目錄符號鏈接 c:\mysymlink,兩人都指著 c:\targetfolder。當你使用愛麗絲時,你不會發現它們之間有太大的區別。但是如果你正在使用另一台名為Bob的機器,那麼就是連接點

\\Alice\c$\myjp 會指出 \\Alice\c$\targetfolder

但像徵性的聯繫

\\Alice\c$\mysymlink 會指出 \\Bob\c$\targetfolder

(警告:默認情況下,系統不遵循遠程卷上的符號鏈接,因此在大多數情況下,第二個示例實際上會導致 “文件未找到” 要么 “無法遵循符號鏈接,因為其類型已被禁用。”

目錄符號鏈接和文件符號鏈接之間的區別僅在於一個表示目錄,一個表示文件。由於在創建鏈接時不需要存在鏈接的目標,因此文件系統需要知道是否告知應用程序它是否是目錄。

還應注意,創建符號鏈接需要特殊權限(默認情況下,僅適用於提升的進程),而創建聯結只需要訪問文件系統。


325
2017-10-22 19:03



需要明確的是:目錄連接和目錄符號鏈接之間可能存在其他更微妙的功能差異。從用戶(而不是開發人員)的角度來看,遠程與本地事物是最明顯的。 - Harry Johnston
@MatthewSteeples你的意思是,如果我創建一個符號鏈接 C:\testlink (指向 C:\test 在我的電腦上)和某人遠程訪問我的電腦並點擊 C:\testlink,它會解決 C:\test 在HIS計算機上,如果我創建一個目錄連接 C:\testlink (指向 C:\test 在我的電腦上),有人遠程訪問我的電腦並點擊 C:\testlink它會引導他到 C:\test 在我的電腦上?還是我錯了路? - Pacerier
@Pacerier在這種情況下是,但符號鏈接允許您在計算機上有一個指向網絡共享的文件夾(因為它們已被解析為客戶端)。例如C:\ MyNetworkShare實際上可以指向\\ Alice \ Share - Matthew Steeples
@MatthewSteeples但我們無法創建目錄連接 C:\MyNetworkShare 哪個指向 \\Alice\Share 還有? - Pacerier
@Pacerier,不,交界點必須是本地的。 - Harry Johnston


複雜的談話傷害了大腦 - 我喜歡圖表:

假設任何 MyLink 是一個像徵性的鏈接和任何 MyJunc 是一個指向的交界處 Target as created

例如

mklink /D MyLink C:\T_Dir 用於創建目標目錄的符號鏈接

mklink /J MyJunc C:\T_Dir 用於創建目標目錄的目錄連接

語法在哪裡 mklink [/J,/D] [link path] [target path] 在本地機器上輸入


 link path    |   target path   |         When accessed ..
              |                 |  (locally)    |    (remotely)
              |                 |               |
C:\MyLink     |   C:\T_Dir      |  C:\T_Dir     |  [leads back to local]
C:\MyJunc     |   C:\T_Dir      |  C:\T_Dir     |  [leads to remote]
              |                 |
\\Svr\MyLink  |   C:\T_Dir      |   C:\T_Dir    |  [leads back to local]
\\Svr\MyJunc  |   C:\T_Dir      |  *** Must create and point local ***
              |                 |
C:\MyLink     |  \\Sv2\T_Dir    |  \\Sv2\T_Dir  |   Error*1
C:\MyJunc     |  \\Sv2\T_Dir    |  *** Error - Must point local ***
              |                 |
\\Svr\MyLink  |  \\Sv2\T_Dir    |  Error*1
\\Svr\MyJunc  |  \\Sv2\T_Dir    |  *** Must create link using target device ***

錯誤* 1 - 如果您取消阻止訪問本地計算機上的遠程符號鏈接,那麼這將起作用..但僅限於未被阻止的本地計算機上


44
2018-02-02 16:30



那太奇怪了。即使是相對符號鏈接也無法遠程工作。例如。我創建了一個目錄 d:\_tmp\data。像這樣創建鏈接: d:\_tmp>mklink /d data-link data。遠程用戶具有完全訪問權限 d:\_tmp 及其所有子文件夾,但他仍然無法打開 d:\_tmp\data-link。 - Nux
這是因為當客戶端評估符號鏈接時,它將指向客戶端上的d:\ _ tmp \ data,而不是服務器。 - apraetor
我覺得它很奇怪的原因很清楚。但我同意@Nux這很奇怪,至少在相對符號鏈接的情況下。 - Jon Coombs


我的印像是,由於遺留原因,交叉點就在附近,而且符號鏈接總體上更好(事物以這種方式表現為面值)。事實證明,這並不完全正確。使用交叉點而不是符號鏈接有一些很好的理由。 主要區別在於安全性以及遠程與本地路徑。是的,遠程定位使符號鏈接更具功能性,但也會提高其安全性。所以,如果你想要一個本地鏈接並且可以使用絕對路徑,那麼你可能會更好地使用一個交叉點;否則,請考慮添加其功能的符號鏈接。

enter image description here

**速度/複雜性的差異聲明來自於未經證實的聲明 關於NTFS重新分析點的維基百科條目 (好讀)。*


其他NTFS鏈路比較

以下是關於該主題的一些其他比較,但在考慮交叉點時這些可能會產生誤導,因為它們沒有列出我上面列出的好處。

從這裡開始 (一個很好的介紹性閱讀)

enter image description here

MKLink上的SS64頁面

enter image description here


關於術語的評論

交匯點是符號鏈接

連接點和符號鏈接實際上以相同的方式(重新分析點)執行相同的操作,除了上述處理方式的差異。實際上,從技術上講,Junction是一個符號鏈接,有時文檔可能將Junction稱為符號鏈接, 就像這裡的情況一樣。所以,這只是關於術語的一些注意事項。

NTFS

儘管OP指明了這一點,但值得指出的是“符號鏈接”是一個非常通用的術語,並非特定於NTFS。所以,具體來說,這個比較是關於NTFS Junctions和NTFS Symbolic Links。


23



有人測試過Junctions與Symbolic Links的處理速度嗎? - 1000Gbps
利弊圖非常有用,謝謝! - GordonM