標簽:
inode
軟鏈接
硬鏈接
一、ionde及inode編號
在計算機中,信息一般以扇區(sectors)的形式存儲在硬盤上,而每個扇區包括512個字節的數據和一些其他信息(即一個扇區包括兩個主要部分:存儲數據地點的標識符和存儲數據的數據段)。操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個塊(blocks)。這種由多個扇區組成的”塊”,是文件存取的最小單位?!眽K”的大小,最常見的是4KB,即連續八個 sectors組成一個 blocks。
如此以來對于操作系統而言,必須采用一種方式來找到這個存儲文件數據的“塊”,為此操作系統便引入了一個非常重要的概念”inode”,中文名為“索引結點” 。既然引進inode的目的是為了找到“塊”,那么inode中必然包括像文件數據block位置這么重要的信息,當然也不僅僅包括這么一個信息等。
inode包含文件的元信息,具體有以下內容:
* 文件的字節數
* 文件擁有者的User ID
* 文件的Group ID
* 文件的讀、寫、執行權限
* 文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。
* 鏈接數,即有多少文件名指向這個inode
* 文件數據block的位置
Linux 在讀取數據的時候,是先查詢 inode table 以得到數據是放在那個 Block 里面,然后再去該 Block 里面讀取真正的數據內容。這個inode編號在一定范圍內(在同一個分區內)是唯一的,類似于我們的身份證。所以對于Linux來說,ionde編號是唯一辨識一個文件的表示符號。
二、硬鏈接
由于inode編號作為Linux內唯一辨識一個文件的表示符號,Linux系統允許,多個文件名指向同一個inode號碼。這意味著,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱為"硬鏈接"(hard link)。
硬鏈接的特性:
1)只能對已存在的文件進行創建,創建硬鏈接會在inode里不添加計數。
2)指向inode相同,與源文件的data block也相同。
3)不能對目錄創建硬鏈接。
4)不能跨文件系統進行硬鏈接的創建。
5)創建硬鏈接會在硬鏈接父目錄添加映射條目:hard link映射源文件inode。
6)刪除一個硬鏈接文件,會在父目錄清除該條映射,inode計數減一,所以不影響其他有相同 inode 號的文件。
示例:
1)只能對已存在的文件創建硬鏈接,源文件不存在則無法創建硬鏈接,創建硬鏈接會對ionde里不添加計數
[root@localhoast testdir]# ls 21.sh dir1 www [root@localhoast testdir]# ln aaa bbb ln: accessing `aaa': No such file or directory [root@localhoast testdir]#
2)不能對目錄創建硬鏈接
[root@localhoast /]# ls -ld testdir/ drwxr-xr-x. 3 root root 4096 Oct 19 19:47 testdir/ [root@localhoast /]# ln testdir aaa ln: `testdir': hard link not allowed for directory
3)不支持跨文件系統建立硬鏈接
[root@localhoast ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_localhoast-lv_root 51475068 2002336 46851292 5% / tmpfs 502068 0 502068 0% /dev/shm /dev/sda1 487652 34526 427526 8% /boot /dev/mapper/vg_localhoast-lv_home 69608928 53032 66013268 1% /home [root@localhoast ~]# touch /home/source [root@localhoast ~]# ln /home/source /boot/aaa ln:
4)創建硬鏈接會在硬鏈接父目錄添加映射條目:hard link映射源文件inode
5)刪除一個硬鏈接文件,會在父目錄清除該條映射,連接數計數減一,ionde數目無變化所以不影響其他有相同 inode 號的文件。
三、軟鏈接
文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B的"軟鏈接"(soft link)或者"符號鏈接(symbolic link)。
這意味著,文件A依賴于文件B而存在,如果刪除了文件B,打開文件A就會報錯:"No such file or directory"。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode"鏈接數"不會因此發生變化。
通俗的來講,軟鏈接就是相當于window操作系統里面的快捷方式。當源文件被刪除之后,快捷方式(軟連接)也就沒有作用了。
軟鏈接的特性:
1)可以指向一個目錄。
2)可以跨文件系統(分區)。
3)是一個指向源文件名稱的指針,是一個獨立的文件。
4)指向的是另一個文件的路徑;其大小為指向的路徑字符串的長度;增加或減少目標文件inode 的引用計數。
特性示例:
1)可以指向一個目錄
[root@localhoast testdir]# ls 21.sh dir1 www [root@localhoast testdir]# ls -ld dir1 drwxr-xr-x. 4 root root 4096 Oct 18 21:05 dir1 [root@localhoast testdir]# ln -s dir1 aaa [root@localhoast testdir]# ll total 8 -rw-r--r--. 1 root root 0 Oct 19 03:09 21.sh lrwxrwxrwx. 1 root root 4 Oct 19 20:42 aaa -> dir1 drwxr-xr-x. 4 root root 4096 Oct 18 21:05 dir1 -rw-r--r--. 1 root root 192 Oct 19 05:43 www
2)可以跨文件系統(分區)
[root@localhoast ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_localhoast-lv_root 51475068 2002328 46851300 5% / tmpfs 502068 0 502068 0% /dev/shm /dev/sda1 487652 34527 427525 8% /boot /dev/mapper/vg_localhoast-lv_home 69608928 53032 66013268 1% /home [root@localhoast ~]# cd /home/ [root@localhoast home]# ls han lost+found source [root@localhoast home]# ln -s han /boot/abc [root@localhoast home]# ll /boot/abc lrwxrwxrwx. 1 root root 3 Oct 19 20:44 /boot/abc -> han [root@localhoast home]#
3)是一個指向源文件名稱的指針,是一個獨立的文件
4)指向的是另一個文件的路徑;其大小為指向的路徑字符串的長度;
會增加和減少inode的計數
原創文章,作者:hanlln1,如若轉載,請注明出處:http://www.www58058.com/53041