hard link 和 soft link
弟最近想要搞懂 hard link 和 soft link,於是查了 study area 裡面的資料 (包含網頁與討論區部份),接著弟又查了書上的資料和網路上面的資料,發覺網頁的解釋部份有點問題。另外再看到這一個討論串,也發現了一些問題。首先是網頁的部份:
| 引言回覆: |
假如用 hard link 的話﹐檔案系統會再建立一個 inode﹐其指向的磁碟位置和原來的檔案位置一樣﹐而任何指到這個位置的 inode 都會更新其 link 指標﹐hard link 越多﹐指標越多。 ....................... 那 soft link 又是什麼呢﹖和 hard link 不一樣的地方是﹕他並不是以 inode 指向相同的磁碟空間﹐而是單純的指向原來的 inode 而已﹐假如原來的 inode 移除了﹐那這個 link 就變為無主孤魂了﹐也就是所謂的 dead link 是也。就好比宋七力有一個本尊﹐同時也有好些分身﹐但假如一旦本尊毀掉﹐那分身也跟著滅亡﹐道理是一樣的。 |
這邊有關 inode 的部份似乎講反了。
hard link 並沒有另外建立一個 inode,而是增加一個 directory entry,內容為原始檔案的 inode number、這個 hard link 的檔案名稱和其他相關資訊,所以 hard link 的 inode number 跟原始檔案的 inode number 是一樣的。在建立 soft link 的時候才會建立一個新的 inode 指到原始檔案的 inode,所以 soft link 的 inode number 跟原始檔案的 inode number 不一樣。這也是為甚麼 hard link 只能指向同一個檔案系統裡面的檔案,因為每個檔案系統都有他自己一系列的 inode,兩個不同的檔案系統可能有相同的 inode number。而 soft link 具备完整的 pathname,所以他能够跨越不同的檔案系統。範例:
| 代碼: |
octapult@mydebian:~/temp$ ls -li 總計 0 octapult@mydebian:~/temp$ dd if=/dev/zero of=test bs=128 count=1 讀入了 1 0 個區段 輸出了 1 0 個區段 128 bytes transferred in 0.001447 seconds (88456 bytes/sec) octapult@mydebian:~/temp$ df -i 檔案系統 Inode (I)已用 (I)可用 (I)已用% 掛載點 /dev/hda1 904960 127338 777622 15% / octapult@mydebian:~/temp$ ln test 1 octapult@mydebian:~/temp$ df -i 檔案系統 Inode (I)已用 (I)可用 (I)已用% 掛載點 /dev/hda1 904960 127338 777622 15% / octapult@mydebian:~/temp$ ln -s test 2 octapult@mydebian:~/temp$ ls -li 總計 8 517530 -rw-r--r-- 2 octapult octapult 128 2002-11-23 01:36 1 517531 lrwxrwxrwx 1 octapult octapult 4 2002-11-23 01:37 2 -> test 517530 -rw-r--r-- 2 octapult octapult 128 2002-11-23 01:36 test octapult@mydebian:~/temp$ df -i 檔案系統 Inode (I)已用 (I)可用 (I)已用% 掛載點 /dev/hda1 904960 127339 777621 15% / |
文章整理:西部数码--专业提供域名注册、虚拟主机服务
再來是關於這個討論串的部份:
hard link 本來就會佔空間,不包含檔案名稱的話,就要用掉 8 bytes,檔案名稱一個字元一個 byte,所以總長度並不固定。假設一個 block 為 4K bytes、一個 hard link 平均為 16 bytes 的話,建立超過 256 個 hard link 的話,就需要再另外增加一個 data block 來存放新的 hard link 了,所以建立新的 hard link 的時候,du -b 的結果會增加一個 block (4K bytes) 是有可能的。
另外關於
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




