1. 程式人生 > >linux硬連結和軟連結以及inode

linux硬連結和軟連結以及inode

1、inode

a、inode是index node,中文為索引節點。

b、inode包含以下內容:
    * 檔案的位元組數
  * 檔案擁有者的User ID
  * 檔案的Group ID
  * 檔案的讀、寫、執行許可權
  * 檔案的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。
  * 連結數,即有多少檔名指向這個inode
  * 檔案資料block的位置</span>

c、通過stat命令檢視檔案的inode資訊

VirtualBox:~$ stat test.file
  File: `test.file'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d      Inode: 264605      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/     lsn)   Gid: ( 1000/     lsn)
Access: 2016-03-11 17:57:11.909803000 +0800
Modify: 2016-03-11 17:57:11.909803000 +0800
Change: 2016-03-11 17:57:11.909803000 +0800
 Birth: -
VirtualBox:~$
</span>

d、inode作用

Unix/Linux系統內部不使用檔名,而使用inode號碼來識別檔案。對於系統來說,檔名只是inode號碼便於識別的別稱或者綽號。
表面上,使用者通過檔名,開啟檔案。實際上,系統內部這個過程分成三步:首先,系統找到這個檔名對應的inode號碼;其次,通過inode號碼,獲取inode資訊;最後,根據inode資訊,找到檔案資料所在的block,讀出資料。

通過ls -i讀取inode號

VirtualBox:~$ ls -i test.file
264605 test.file
e、inode大小

inode會佔用磁碟空間,在分割槽中,作業系統會將磁碟空間分為兩個區域,一個是資料區,一個存放inode區。當inode區佔滿的時候是無法建立新檔案的。

每個inode節點的大小,一般是128位元組或256位元組。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設定一個inode。

通過df -i可檢視inode區的使用情況。

VirtualBox:~$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      475136 155369 319767   33% /
udev            92754    447  92307    1% /dev
tmpfs           95090    360  94730    1% /run
none            95090      3  95087    1% /run/lock
none            95090      1  95089    1% /run/shm
VirtualBox:~$ 
通過sudo dumpe2fs -h /dev/sda1 | grep "Inode size"檢視inode節點的大小
VirtualBox:~$ sudo dumpe2fs -h /dev/sda1 | grep "Inode size"
dumpe2fs 1.42 (29-Nov-2011)
Inode size:               256

2、硬連結

Unix/Linux系統允許,多個檔名指向同一個inode號碼。
這意味著,可以用不同的檔名訪問同樣的內容;對檔案內容進行修改,會影響到所有檔名;但是,刪除一個檔名,不影響另一個檔名的訪問。這種情況就被稱為"硬連結"(hard link)。

使用“ln 原始檔 目標檔案” 建立硬連結

VirtualBox:~/test$ ls -l
total 0
-rw-rw-r-- 1 qqq qqq 0 Mar 11 17:57 test.file
VirtualBox:~/test$ ls -i
264605 test.file
VirtualBox:~/test$ ln test.file test.hl
VirtualBox:~/test$ ls -l
total 0
-rw-rw-r-- 2 qqq qqq 0 Mar 11 17:57 test.file
-rw-rw-r-- 2 qqq qqq 0 Mar 11 17:57 test.hl
VirtualBox:~/test$ ls -i
264605 test.file  264605 test.hl
VirtualBox:~/test$

如上,執行前後的ionde資訊表的檔案數,建立硬連結後,數目增加。另外可以檢視兩個檔案的inode號是一樣的。

硬連結的一些特點:

檔案有相同的 inode 及 data block;
只能對已存在的檔案進行建立;
不能交叉檔案系統進行硬連結的建立;
不能對目錄進行建立,只可對檔案建立;
刪除一個硬連結檔案並不影響其他有相同 inode 號的檔案。

3、軟連結

軟連結與硬連結不同,若檔案使用者資料塊中存放的內容是另一檔案的路徑名的指向,則該檔案就是軟連線。軟連結就是一個普通檔案,只是資料塊內容有點特殊。軟連結有著自己的 inode 號以及使用者資料塊。

如果刪除了原始檔,開啟軟連結就會報錯,"No such file or directory"

使用 "ln -s 原始檔或目錄 目標檔案或目錄"建立軟連結

軟連結的一些特點:

軟連結有自己的檔案屬性及許可權等;
可對不存在的檔案或目錄建立軟連結;
軟連結可交叉檔案系統;
軟連結可對檔案或目錄建立;
建立軟連結時,連結計數 i_nlink 不會增加;
刪除軟連結並不影響被指向的檔案,但若被指向的原檔案被刪除,則相關軟連線被稱為死連結(即 dangling link,若被指向路徑檔案被重新建立,死連結可恢復為正常的軟連結)。