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