Windows 中的硬鏈接、目錄聯接(軟鏈接)、符號鏈接、快捷方式

来源:https://www.cnblogs.com/czwy/p/18442267
-Advertisement-
Play Games

本文是筆者研究生期間在閱讀《Linux命令行與shell腳本編程大全》之後總結出來的一些重點知識的記錄,在此重新整理輸出。以便在給上個帖子 涉及到的相關知識點進行一下講解,幫助自己複習 shell腳本的首行規範化應該是 #!/bin/bash # function description 其中第一行 ...


在Linux文件系統中經常提及硬鏈接(Hard Link)和符號鏈接(Symbolic Link),Windows中也可以創建鏈接,但由於豐富的圖形界面操作,很少提及鏈接。Windows 的 NTFS 文件系統支持三種鏈接:硬鏈接(Hard Link)、符號鏈接(Symbolic Link)和目錄鏈接(junction point),此外還有一個大家非常熟悉鏈接機制:快捷方式。

創建鏈接

創建鏈接可以通過 dos 命令 mklink 或者 powershell 中的New-Item 創建。
mklink命令的使用說明如下圖所示。預設是創建文件符號鏈接,使用/D 參數則是創建目錄的符號鏈接,使用 /H 是創建硬鏈接,使用/J是創建目錄聯結,也稱為軟鏈接(soft link)。
image

使用 powershell 創建鏈接的方式如下:

New-Item <鏈接路徑> -ItemType <鏈接類型> -Target <鏈接目標>

其中 ItemType 的取值可選:HardLink、SymbolicLink、Junction

幾種鏈接的區別

與 Linux 的文件系統中的 inode 與 block 類似,在 NTFS 文件系統中數據對象也賦予了獨一無二的文件 ID 以及與之對應的文件路徑,文件路徑和文件 ID 對應,文件 ID 和數據對象綁定,最終才呈現為可供用戶打開、編輯的文件。

快捷方式(shortcut)

快捷方式以.lnk文件方式存在,文件大小僅有幾百位元組,與原始文件大小無關。適用於 Explorer 等應用程式,並非 NTFS 內置機制,從Win95開始得到支持。FAT32也支持。適用於文件、目錄,只能使用絕對路徑。可以跨盤符,可以跨主機,可以使用UNC路徑、網路驅動器。

符號鏈接

符號鏈接是將自己鏈接到一個目標文件或目錄的路徑上。當系統識別到符號鏈接時,它會跳轉到符號鏈接所指向的目標中去,而不改變此時的文件路徑。
image

符號鏈接從Vista開始得到支持,NTFS內置機制。適用於文件,目錄。可以理解為另一種形式的快捷方式(shortcut),文件大小為0位元組和不占用空間。可以使用相對/絕對路徑,可以跨盤符,跨主機,可以使用UNC路徑和網路驅動器。

硬鏈接

硬鏈接和符號鏈接的原理完全不同,符號鏈接是指向目標路徑的鏈接,而硬鏈接則是指向目標數據對象的鏈接。因為一個捲中的數據對象都有一個獨一無二文件 ID,也可以說硬鏈接是指向目標文件 ID 的鏈接。
image

硬鏈接從Windows NT4開始得到支持,是NTFS內置機制,FAT32不支持。只適用於文件,只能使用絕對路徑。本身無文件,不占用額外空間。hardlink與targetfile必須位於同一捲,可以簡單理解成不能跨盤符。

目錄聯接

目錄聯接從Windows2000/XP開始得到支持,是NTFS內置機制。只適用於目錄。只能使用絕對路徑。目錄鏈接通過重分析點實現,目錄鏈接可以跨捲,但是不能跨主機。

詳細對比

幾種鏈接方式詳細比較如下表所示

shortcut hard link junction point symbolic link
創建方式 右鍵 -> 創建快捷方式 mklink /H Link Target mklink /J Link Target mklink /D Link Target
存在方式 以.lnk文件方式存在,適用於Explorer等應用程式。非NTFS內置機制,從Win95開始得到支持。FAT32支持。 NTFS內置機制,從Windows NT4開始得到支持。FAT32不支持。 NTFS內置機制,從Windows2000/XP開始得到支持。是 NTFS 3.0 及以上文件系統(Windows 2000 及以上系統)的特性,它是鏈接本地目錄(可跨捲)的訪問點,通過交接點的操作都會被系統映射到實際的目錄上。通過建立交接點,可以在保證一個目錄實例(目錄的一致性)的前提下,允許用戶或程式從本地文件系統中的多個位置訪問此目錄。 NTFS內置機制,從Vista開始得到支持。文件類型是.SYMLINK
適用範圍 同時適用於文件、目錄,只能使用絕對路徑。 只適用於文件,只能使用絕對路徑。 只適用於目錄。只能使用絕對路徑。即使創建junction point時使用了相對路徑,保存到NTFS中時將隱式轉換成絕對路徑。 同時適用於文件、目錄。這是一種超級shortcut,文件大小為0位元組和不占用空間。
使用限制 可以跨盤符,可以跨主機,可以使用UNC路徑、網路驅動器。 hard link與targetfile必須位於同一volume,可以簡單理解成不能跨盤符。 junction point必須與target directory位於同一local computer,可以簡單理解成不能跨主機, 在local computer範圍內,可以跨盤符。不能使用UNC路徑;假設Z是通過網路映射生成的盤符,同樣不適用於Z。 可以使用相對、絕對路徑。假設創建symbolic link時使用了相對路徑,保存到NTFS中的就是相對路徑,不會隱式轉換成絕對路徑。可以跨盤符,可以跨主機,可以使用UNC路徑、網路驅動器。
移動能力 本身有文件,可以複製,移動等操作。 / / /
文件 文件大小僅有幾百位元組, 跟原文件大小無關,文件類型是.lnk。 本身無文件,為文件創建多入口。由於不同的文件指向的是同樣的數據,所以無論給同一個文件創建多少個硬鏈接,他們占整個捲的數據大小都是一樣的。 對交接點內文件和子目錄的“建立、刪除、修改”等操作都被映射到對應的目錄中的文件和子目錄上,對交接點的“複製、粘貼、剪切、配置 ACL”,只會影響此交接點,在同一捲內移動交接點,只會影響此交接點,但在不同捲間移動交接點,會將此交接點轉換為正常目錄,並且交接點對應目錄下的所有內容都會被移動。 符號鏈接(Symlink,Softlink)是對文件或目錄的引用,實際上符號鏈接本身是一個“記錄著所引用文件或目錄的絕對或相對路徑”的特殊文件,通過符號鏈接的操作都會被重定向到目標文件或目錄。對符號鏈接和快捷方式的“讀、寫、遍歷”等操作都會被重定向到目標文件或目錄,但對它們的“複製、刪除、移動、配置 ACL”等操作只針對自身。
關聯 刪除shortcut,不影響target。 在Explorer中刪除hard link,不影響targetfile。刪除target file,不影響hardlink。事實上由於hard link的語義,此時剩下的hardlink就是原始數據的唯一訪問點。只有當一個文件 ID 對應的所有硬鏈接被刪除時,數據才真正被標記為刪除。 刪除target directory,junction point仍將存在,但失效了,變得不可用。這個很好理解,因為此時junction point指向不存在的目錄。 在Explorer中刪除symboliclink,不影響target。刪除target,symboliclink仍將存在,但失效了,變得不可用。它們可以像普通文件一樣操作,但所有對符號鏈接的操作都實際作用於目標對象。符號鏈接對用戶而言是透明的,符號鏈接看上去和普通的文件和文件夾沒有區別,操作方法也一模一樣(更類似於 Linux 的軟鏈接)。

鏈接的應用

  • 硬鏈接:可以在不複製文件的情況下,實現文件的快速訪問以及文件的備份,還可以防止重要文件誤刪,因為刪除的是文件的鏈接,而非文件數據本身。
  • 符號鏈接:可以把一個路徑映射到另一個路徑,或者指向遠程文件或目錄,甚至可以通過網路連接到其他電腦上的文件。
  • 目錄聯接:實現路徑重定向,當訪問鏈接目錄時,系統會自動重定向到實際目錄,例如:Vista的"C:\Documents and Settings"是指向"C:\Users"的junctionpoint,這樣一些使用了硬編碼"C:\Documents and Settings"的老程式可以在Vista上正常工作。此外,還可以解決Windows文件路徑長度限制帶來的問題(從 Windows 10 版本 1607 開始,可以通過設置註冊表以及應用程式清單啟用長路徑)。

參考

  1. https://learn.microsoft.com/zh-cn/windows/win32/fileio/hard-links-and-junctions
  2. https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-item?view=powershell-7.4
  3. https://learn.microsoft.com/zh-cn/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-version-1607-and-later

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...