Linux rm命令詳解

rm常見命令參數

rm: 能夠備份,儘可能不要刪除,比刪除更好的是重命名  -->只刪除文件連接,重啓、從新寫入後回收html

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

-r : 刪除文件夾shell

-f : 強制刪除文件vim

rm命令刪除文件的原理

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

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

注:若是有新的數據存儲或者系統經過相似fsck命令作磁盤檢查的時候,被刪除的數據塊和目錄會被釋放,數據沒法找回htm

文件刪除的條件:blog

i_nlink  文件的硬連接數量,磁盤的引用計數器進程

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

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

相關文章
相關標籤/搜索