乙個檔案有檔名和資料,而資料在linux上又被分成了兩個部分,分別是使用者資料和元資料*。
使用者資料:即檔案資料塊(block),是記錄檔案真實內容的地方。
元資料(metadata):記錄檔案的附加屬性(檔案大小,建立時間,所有者資訊等等)。
在檔案中的元資料中,有一項被稱為inode號,在linux系統下,inode號唯一的表示乙個檔案,那麼有人會問,那麼檔名呢?
其實,檔名代表的只是檔案的別名;在linux系統下,作業系統也是通過inode號來找到正確的檔案資料塊的。
為了解決檔案的共享使用問題,另外還考慮了隱藏檔案路徑,增加許可權安全以及節省儲存空間的好處,在linux系統下引入了軟鏈結和硬鏈結這兩個概念。
若乙個inode號對應多個檔案,則這些檔案為硬鏈結,即硬鏈結就是同乙個檔案使用了多個別名,這個是不是和c++的引用計數很類似~
1.檔案有相同的inode和block,並且檔案資訊相同。
上圖我們在建立了硬鏈結後,使用stat命令檢視硬鏈結檔案和原始檔的資訊。
2.檔案資訊要改一起改。
下面我們來進行驗證,我們在原始檔中追加一行,然後檢視硬鏈結檔案。
[root@leap_ awk_test]# echo "hello
leap" >> file
[root@leap_ awk_test]# cat
file_h
producta
:20productb
:50productc
:20productd
:30producte
:99productf
:120
hello,world
hello,world
hello
leap
其實這裡不光是內容發生了改變,相應的檔案狀態也發生了改變,並且同乙個inode對應的硬鏈結檔案資訊都相同。
3.刪除乙個硬鏈結檔案並不影響其他具有相同inode號的檔案。
這個很好理解,因為linux系統下為每個檔案的硬鏈結維護了乙個引用計數,當我們刪除乙個檔案時,如果這個檔案的引用計數是大於1的,那麼我們僅僅是將鏈結清除掉,並不影響原始檔。
若檔案使用者資料塊存放的內容是另一檔案的路徑名的指向,則該檔案就是軟鏈結,軟鏈結就是乙個普通檔案,只是資料塊內容有點特殊,它有著自己的inode號以及使用者資料塊。
軟鏈結與原始檔的關係如下圖:
1.軟鏈結有著自己的檔案屬性和許可權;
2.可對不存在的檔案或者目錄建立軟連線;
3.軟鏈結可交叉檔案系統;
4.建立軟連線時,引用計數不會增加;
5.刪除軟鏈結不影響軟鏈結指向的檔案;
6.刪除軟鏈結指向的原始檔,則相關軟鏈結被稱為死連線,若執行路徑被重新建立,死連線可以恢復為正常的軟鏈結。
7.修改軟鏈結的檔案狀態會影響軟鏈結所指向的檔案的狀態。
1.首先我們驗證軟鏈結有著自己的檔案許可權和屬性;
[root@leap_ awk_test]# ln -s file file_s
[root@leap_ awk_test]# ls -al file file_s
-rw-r--r--. 2 root root 108 apr 23
06:44
file
lrwxrwxrwx. 1 root root 4 apr 23
06:52 file_s -> file
2.下面我們對乙個不存在的檔案進行軟鏈結的建立
只不過此時的軟鏈結是乙個死鏈結,它不指向任何檔案,不信你可以cat它一下。
Linux下的軟鏈結和硬鏈結
1.linux鏈結概念 linux鏈結分兩種,一種被稱為硬鏈結 hard link 另一種被稱為符號鏈結 symbolic link 預設情況下,ln命令產生硬鏈結。硬連線 硬連線指通過索引節點來進行連線。在linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節...
Linux下的軟鏈結和硬鏈結
2 軟鏈結 soft link 3 區別 ln 原檔名 要建立的硬鏈結的檔名 a是b的硬鏈結 a和b都是檔名 則a的目錄項中的inode節點號與b的目錄項中的inode節點號相同,即乙個inode節點對應兩個不同的檔名,兩個檔名指向同乙個檔案,a和b對檔案系統來說是完全平等的。如果刪除了其中乙個,對...
Linux 硬鏈結和軟鏈結
硬鏈結是通過鏈結原始檔的索引節點來進行有效鏈結。linux系統中的每個檔案都有乙個自己的索引節點,如同資料庫中的每條記錄都有自己的唯一索引一樣。自我感覺硬鏈結就像是windows下乙個檔案的拷貝,唯一不同的地方是多個該檔案的拷貝 硬鏈結 通過原始檔的索引節點來共享和更新自己的內容,一旦該節點上的任一...