Linux rm命令詳解


rm常見命令參數

rm: 可以備份,盡量不要刪除,比刪除更好的是重命名  -->只刪除文件鏈接,重啟、重新寫入后回收

刪除文件時,使用絕對路徑或者進入到目標路徑下后使用刪除命令 –> 禁止使用rm –rf ./XXX文件【少個點就是根目錄了】

-r : 刪除文件夾

-f : 強制刪除文件

rm命令刪除文件的原理

文件刪除原理: Linux通過文件link的數量控制文件的刪除,只有當一個文件不存在任何link的時候且沒有程序調用的時候,文件才會被真正刪除。

就rm命令而言,就是減少磁盤引用計數i_link(文件到inode的鏈接數量);inode節點指向存儲數據的block,刪除文件並不是清除inode和block,而是將文件的硬鏈接為0,引用計數為0 才能刪除文件

注:如果有新的數據存儲或者系統通過類似fsck命令做磁盤檢查的時候,被刪除的數據塊和目錄會被釋放,數據無法找回

文件刪除的條件:

i_nlink  文件的硬鏈接數量,磁盤的引用計數器

i_count 內存引用計數(一個文件被幾個程序調用,有一個程序使用i_count + 1 )

i_link = 0 && i_count =0

刪除一個文件,也是刪除上一級目錄的block里面的文件名

 

rm相關的問題答疑

問題1:當執行了刪除操作后,ls 無法查找到這個文件,但是調用這個刪除文件的進程卻正常執行,依然能夠讀取和寫入文件內容?

答案: 因為rm只是減少了i_nlink,如果沒有其他的鏈接了[即i_link=0】,但由於文件依然被進程使用,所以即時執行了rm命令,系統並未真正的刪除。

只有當i_link和i_count==0時候,系統才會整正刪除這個文件,也就是刪除文件還需要解除進程對該文件的調用才行。

問題2:當文件沒有被調用,但是執行了rm命令,刪除后的文件還能找回來么?

答案:rm只是減少了i_link的數量,實際就是將文件的inode的鏈接刪除了,但是並沒有刪除文件實體(block數據塊),如果停止機器工作,還是可以找回數據的。如果此時繼續有數據寫入,當新數據就可能會被分配到被刪除的數據的block數據塊,此時文件就會被真正的回收。

問題3:被進程占用的文件能否被刪除?

答案: 能

問題4:如何找回沒有鏈接指向但被進程占用的文件?

答案:lsof -c 'vim'   根據后台占用文件的命令查找

[root@localhost omc]# touch hhh.txt
[root@localhost omc]# vim hhh.txt &
[root@localhost omc]# rm hhh.txt
[root@localhost omc]# lsof -c 'vim' | grep hhh.txt
vim     3385 root    4u   REG    8,2     4096 271298 /home/omc/.hhh.txt.swp

 

 

常用的命令展示:

刪除某個文件夾: -r

rm -rf /home/omc/last.txt

自定義回收站功能: 定義一個函數,將文件移動到指定目錄;同時別命名rm命令即可

myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
alias rm='myrm'
# $@: 這個程序的所有參數,作為一個i整體傳遞、

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM