? ? ? ? ? ? ? ? ? ? ? ? ?>>轉(zhuǎn)載請(qǐng)注明來(lái)源:
飄零的代碼 piao2010 ’s blog
,謝謝!^_^
>>本文鏈接地址:
Linux cp mv rm ln 命令對(duì)于 inode 和 dentry 的影響
在看《unix環(huán)境高級(jí)編程》文件系統(tǒng)一節(jié)的時(shí)候,發(fā)現(xiàn)自己對(duì)文件系統(tǒng)相關(guān)的概念不是很清晰。
首先介紹兩個(gè)基本概念:
第一個(gè)重要概念
inode (中文名:索引節(jié)點(diǎn))
,包含文件的大部分信息:
* 文件的字節(jié)數(shù)
* 文件擁有者的User ID
* 文件的Group ID
* 文件的讀、寫、執(zhí)行權(quán)限
* 文件的時(shí)間戳,共有三個(gè):ctime指inode上一次變動(dòng)的時(shí)間,mtime指文件內(nèi)容上一次變動(dòng)的時(shí)間,atime指文件上一次打開(kāi)的時(shí)間。
* 鏈接數(shù),
即有多少目錄項(xiàng)指向這個(gè)inode
* 文件數(shù)據(jù)block的位置
通過(guò)stat命令可以很方便地查看文件inode。
第二個(gè)重要概念 dentry (中文名:目錄項(xiàng)) ,它包含文件名和指向inode的指針等信息,也就是說(shuō) 通過(guò)dentry可以找到對(duì)應(yīng)的inode,再通過(guò)inode找到文件存儲(chǔ)的block位置 。
如果要更加深入學(xué)習(xí)文件系統(tǒng),可以參考 這篇文章
接下來(lái)步入正題:分析 Linux cp mv rm ln 命令對(duì)于 inode 和 dentry 的影響。
實(shí)驗(yàn)方法也很簡(jiǎn)單,只要有一臺(tái)linux主機(jī)就行,分別用cp mv rm ln 命令對(duì)文件操作,然后利用 ls -il 查看文件inode號(hào),stat查看inode信息。
我直接給出測(cè)試結(jié)論:
cp命令:
1)分配一個(gè)未使用的inode號(hào),在inode 表中添加一個(gè)新項(xiàng)目;(注意:如果是cp到一個(gè)
已經(jīng)存在的文件,則inode號(hào)采用被覆蓋之前的目標(biāo)文件的inode號(hào)
,如果你對(duì)運(yùn)行中的apache 共享模塊so文件進(jìn)行這種操作,就會(huì)出現(xiàn)
Segmentation fault
)
2)在目錄中新建一個(gè)目錄項(xiàng),并指向步驟1)中的inode;
3)把數(shù)據(jù)復(fù)制到block中。
mv命令:
a. 如果mv命令的目標(biāo)和源文件所在的文件系統(tǒng)相同:
1)使用新文件名建立目錄項(xiàng);
2)刪除帶有原來(lái)文件名的目錄項(xiàng);
備注:該操作對(duì)inode表沒(méi)有影響(除時(shí)間戳),對(duì)數(shù)據(jù)的位置也沒(méi)有影響,不移動(dòng)任何數(shù)據(jù)。(即使是mv到一個(gè)
已經(jīng)存在的
目標(biāo)文件,新目錄項(xiàng)指源文件inode,會(huì)先刪除目標(biāo)文件的目錄項(xiàng),所以如果你對(duì)運(yùn)行中的apache的共享模塊so文件進(jìn)行這種操作的話不會(huì)有問(wèn)題,新的so文件
inode號(hào)變了
)
b. 如果目標(biāo)和源文件所在文件系統(tǒng)不相同,就是cp和rm;
rm命令:
1)減少鏈接數(shù)量,如果鏈接數(shù)為0釋放inode(inode號(hào)碼可以被重新使用);
2)如果inode被釋放,則數(shù)據(jù)塊放到可用空間列表中;
3)刪除目錄中的目錄項(xiàng)
ln命令:
a. 硬鏈接 ln 文件名 鏈接名
多個(gè)目錄項(xiàng)指向同一個(gè)inode號(hào);
用rm來(lái)刪除硬鏈接文件:
1)僅僅是減少鏈接數(shù)量;
2)只要有一個(gè)鏈接存在文件就存在;
3)當(dāng)鏈接數(shù)為零,文件就被刪除了。
b. 軟鏈接(符號(hào)鏈接) ln -s 文件名 鏈接名
符號(hào)鏈接的內(nèi)容就是它所指向的文件名;
符號(hào)鏈接文件有自己的inode;
rm刪除的話只是刪除這個(gè)鏈接文件。
參考資料:
http://blog.csdn.net/rstevens/article/details/1824785
http://iminmin.blog.51cto.com/689308/402660
《unix環(huán)境高級(jí)編程》
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

