Linux系统:软链接与硬链接的原理分析
1、相關概念
1、索引節點inode(index node):inode就是索引節點,它用來存放檔案及目錄的基本信息,包含時間、檔名、使用者及群組等。 inode 是 UNIX/Linux 操作系統中的一種數據結構,其本質是結構體它包含了與文件系統中各個文件相關的一些重要信息。每一個索引節點都是一個表項,包含有關文件的信息(元數據):文件類型,權限,UID,GID 鏈接數(指向這個文件名路徑名稱個數) 該文件的大小和不同的時間戳 指向磁盤上文件的數據塊指針 有關文件的其他數據 2、Linux 的文件與目錄:現代操作系統為解決信息能獨立于進程之外被長期存儲引入了文件,文件作為進程創建信息的邏輯單元可被多個進程并發使用。在 UNIX 系統中,操作系統為磁盤上的文本與圖像、鼠標與鍵盤等輸入設備及網絡交互等 I/O 操作設計了一組通用 API,使他們被處理時均可統一使用字節流方式。換言之,UNIX 系統中除進程之外的一切皆是文件,而 Linux 保持了這一特性。為了便于文件的管理,Linux 還引入了目錄(有時亦被稱為文件夾)這一概念。目錄使文件可被分類管理,且目錄的引入使 Linux 的文件系統形成一個層級結構的目錄樹。清單 1.所示的是普通 Linux 系統的頂層目錄結構,其中 /dev 是存放了設備相關文件的目錄。清單 1. Linux 系統的頂層目錄結構/ 根目錄 ├── bin 存放用戶二進制文件 ├── boot 存放內核引導配置文件 ├── dev 存放設備文件 ├── etc 存放系統配置文件 ├── home 用戶主目錄 ├── lib 動態共享庫 ├── lost+found 文件系統恢復時的恢復文件 ├── media 可卸載存儲介質掛載點 ├── mnt 文件系統臨時掛載點 ├── opt 附加的應用程序包 ├── proc 系統內存的映射目錄,提供內核與進程信息 ├── root root 用戶主目錄 ├── sbin 存放系統二進制文件 ├── srv 存放服務相關數據 ├── sys sys 虛擬文件系統掛載點 ├── tmp 存放臨時文件 ├── usr 存放用戶應用程序 └── var 存放郵件、系統日志等變化文件 Linux 與其他類 UNIX 系統一樣并不區分文件與目錄:目錄是記錄了其他文件名的文件。使用命令 mkdir 創建目錄時,若期望創建 的目錄的名稱與現有的文件名(或目錄名)重復,則會創建失敗。3、硬鏈接與軟鏈接的聯系與區別 我們知道文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即 文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信 息。在 Linux 中,元數據中的 inode 號(inode 是文件元數據的一部分但其并不包含文件名,inode 號即索引節點號)才是文件 的唯一標識而非文件名。文件名僅是為了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。 在 Linux 系統中查看 inode 號可使用命令 stat 或 ls -i , 使用命令 mv 移動并重命名文件 ,其結果不影響文件的用戶數據 及 inode 號.為解決文件的共享使用,Linux 系統引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。鏈接為 Linux 系統解決了文件的共享使用,還帶來了隱藏文件路徑、增加權限安全及節省存儲等好處。若一個 inode 號對應多個文件名,則稱這些文件為硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名(見 圖 2.hard link 就是 file 的一個別名,他們有共同的 inode)。硬鏈接可由命令 link 或 ln 創建。如下是對文件 oldfile 創建硬鏈接。link oldfile newfile
ln oldfile newfile
軟鏈接特性展示
# ls -li
total 0
// 可對不存在的文件創建軟鏈接
# ln -s old.file soft.link
# ls -liF
total 0
789467 lrwxrwxrwx 1 root root 8 Sep 1 18:00 soft.link -> old.file
// 由于被指向的文件不存在,此時的軟鏈接 soft.link 就是死鏈接
# cat soft.link
cat: soft.link: No such file or directory
// 創建被指向的文件 old.file,soft.link 恢復成正常的軟鏈接
# echo “This is an original file_A” >> old.file
# cat soft.link
This is an original file_A
// 對不存在的目錄創建軟鏈接
# ln -s old.dir soft.link.dir
# mkdir -p old.dir/test
# tree . -F –inodes
.
├── [ 789497] old.dir/
│ └── [ 789498] test/
├── [ 789495] old.file
├── [ 789495] soft.link -> old.file
└── [ 789497] soft.link.dir -> old.dir/
“`
當然軟鏈接的用戶數據也可以是另一個軟鏈接的路徑,其解析過程是遞歸的。但需注意:軟鏈接創建時原文件的路徑指向使用絕對路徑較
好。使用相對路徑創建的軟鏈接被移動后該軟鏈接文件將成為一個死鏈接(如下所示的軟鏈接 a 使用了相對路徑,因此不宜被移動)
,因為鏈接數據塊中記錄的亦是相對路徑指向。
總結
以上是生活随笔為你收集整理的Linux系统:软链接与硬链接的原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tabular Editor学习笔记_1
- 下一篇: AI语音外呼机器人是如何帮助电销行业获客