rm: 能夠備份,儘可能不要刪除,比刪除更好的是重命名 -->只刪除文件連接,重啓、從新寫入後回收html
刪除文件時,使用絕對路徑或者進入到目標路徑下後使用刪除命令 –> 禁止使用rm –rf ./XXX文件【少個點就是根目錄了】node
-r : 刪除文件夾shell
-f : 強制刪除文件vim
文件刪除原理: 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裏面的文件名
問題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總體傳遞、