Linux中文件執(zhí)行中的鎖定怪現(xiàn)象解釋
瀏覽量: 次 發(fā)布日期:2017-11-18 12:51:31
本來今天不準備開電腦了,太困了,想睡覺,然而一哥們兒短信都發(fā)過來了,要問個問題,于是還是打開了電腦,沒想到是一個很有代表性的問題,順便也牽扯了前些天我的工作中的一個bug,值得記錄下來。問題如下:
linux下,一個可執(zhí)行文件exe1正在執(zhí)行中,rm –f可以將其刪除,mv可以將其移除,mv $other exe1也可以將其替換,但是cp $other exe1則顯示文件忙,求解。
這實際上并不是一個真正的問題,因為只要你的基礎(chǔ)知識扎實,這個問題顯然很簡單,原因只有一個,那就是linux文件基于引用計數(shù)。現(xiàn)在問題是這些個命令如何來操作一個文件的引用計數(shù)。下面的討論都是基于獨占打開的模式。
如果一個文件已經(jīng)被打開,那么它的引用計數(shù)會增加1,如果調(diào)用了rm,實際上底層只是unlink了一下,也就是說將它的引用計數(shù)減少1,這樣雖然你在界面上(命令行或者GUI)看不到它了,但是它被打開時的計數(shù)還在,只有當它被關(guān)閉的時候,引用計數(shù)變?yōu)?,才徹底刪除它。
再說mv命令,它實際上只是一個源文件的rename而已,如果mv的目標本來就存在,那么在目標上執(zhí)行一個類似rm的效果,也就是unlink一下,結(jié)合引用計數(shù)的理論,目標文件如果已經(jīng)被打開,那么當關(guān)閉的時候?qū)⒉粡痛嬖冢绻緛砭蜎]有被打開,那么mv的時候,目標直接被刪除,因為unlink之后,它的引用計數(shù)變成了0。
最后看一下cp命令,cp的話并不觸動源文件和目標文件元數(shù)據(jù)本身(時間戳除外),它只是打開源文件和目標文件,在源文件上執(zhí)行read,然后將結(jié)果write到目標文件,實質(zhì)上是一個IO操作,對于可執(zhí)行文件,是獨占打開的,并不允許寫入,因此會出錯。
. 硬盤檢測維修,硬盤檢測維修全攻略:從故障現(xiàn)象到維修步驟
. 服務(wù)器硬盤壞了是什么現(xiàn)象,服務(wù)器硬盤壞了的現(xiàn)象
. 硬盤摔壞維修,硬盤摔壞維修全攻略:從故障現(xiàn)象到預(yù)防措施
. 硬盤壞了電腦自己重啟,硬盤壞了電腦自己重啟:原因、現(xiàn)象與應(yīng)對
. 出現(xiàn)這幾種現(xiàn)象要小心,趕急備份數(shù)據(jù)吧,可能SSD硬盤已經(jīng)損壞了
. 揚州數(shù)據(jù)恢復:電腦開機報smart錯誤,常見的BIOS短句的解釋大全
. 圓潤精致的性能怪獸:鎧俠XD10移動固態(tài)硬盤使用體驗評測
. 大白話解釋到底什么是硬盤分割和格式化,初學者應(yīng)加強理解
. linux磁盤陣列解釋數(shù)據(jù)丟失哪家能找回