linux (rm指令) 及誤刪除解決


今天在群里看見這一幕:

 

看到這兒,我們學習一下 這個RM指令

 

rm命令可以刪除一個目錄中的一個或多個文件或目錄,也可以將某個目錄及其下屬的所有文件及其子目錄均刪除掉。對於鏈接文件,只是刪除整個鏈接文件,而原有文件保持不變。

 

注意:使用rm命令要格外小心。因為一旦刪除了一個文件,就無法再恢復它。所以,在刪除文件之前,最好再看一下文件的內容,確定是否真要刪除。rm命令可以用-i選項,這個選項在使用文件擴展名字符刪除多個文件時特別有用。使用這個選項,系統會要求你逐一確定是否要刪除。這時,必須輸入y並按Enter鍵,才能刪除文件。如果僅按Enter鍵或其他字符,文件不會被刪除。

 

語法

rm (選項)(參數)

選項

-d:直接把欲刪除的目錄的硬連接數據刪除成0,刪除該目錄;
-f:強制刪除文件或目錄;
-i:刪除已有文件或目錄之前先詢問用戶;
-r或-R:遞歸處理,將指定目錄下的所有文件與子目錄一並處理;
--preserve-root:不對根目錄進行遞歸操作;
-v:顯示指令的詳細執行過程。

參數

文件:指定被刪除的文件列表,如果參數中含有目錄,則必須加上-r或者-R選項。

實例

交互式刪除當前目錄下的文件test和example

rm -i test example
Remove test ?n(不刪除文件test)
Remove example ?y(刪除文件example)

刪除當前目錄下除隱含文件外的所有文件和子目錄

# rm -r *


即:rm -rf /* (是強制刪除根目錄及全部的子文件)


解決辦法(解決誤刪除的辦法集合):

  為了避免誤刪根目錄,或者重要的文件,整理了以下方法:

1、safe-rm

  safe-rm 是一個開源軟件用來替代不太安全的rm,可以在/etc/safe-rm.conf中配置路徑黑名單,定義哪些不能被safe-rm刪除。

可以將 safe-rm 更名為 rm 並放在 $PATH 中比 原rm 程序靠前的位置。一些腳本中使用完全路徑/bin/rm則不會受此影響。 

$ rm -rf /etc/
safe-rm: skipping /etc/

官方地址:http://freecode.com/projects/safe-rm,ubuntu可以直接apt-get安裝,centos要下載源碼安裝。

 

2、建立回收站機制

  它並不真正執行刪除操作,而是將文件移動到一個特定目錄,可以設置定時清楚回收站,或者在回收站里面的文件大小達到一定容量時(或者用時間做判斷)執行刪除操作以騰出空間。

可以寫個shell腳本替換rm命令,或者在需要刪除文件的時候使用mv命令將文件移動到回收站。  

1) 在/home/username/ 目錄下新建一個目錄,命名為:.trash

2)在/home/username/tools/目錄下,新建一個shell文件,命名為: remove.sh

TRASH_DIR="/home/username/.trash"  
  
for i in $*; do  
    STAMP=`date +%s`  
    fileName=`basename $i`  
    mv $i $TRASH_DIR/$fileName.$STAMP  
done  

3)修改~/.bashrc, 增加一行

alias rm="sh /home/username/tools/remove.sh"

用我們自建的remove.sh替代rm命令

4)設置crontab,定期清空垃圾箱,如:

0 0 * * * rm -rf /home/username/.trash/*

每天0點清空垃圾箱

5)source ~/.bashrc 使替換立即生效

 

3、注意腳本中rm -rf 變量的使用

  在腳本盡量不要使用 rm -rf $FOO/, 請使用 rm -rf $FOO;另外刪除盡量不要寫相對路徑,不要帶變量。

 

4、根文件系統設置只讀掛載

noauto,ro

 

5、各種備份

  可以異地遠程備份重要的數據,采用dump的增量備份機制,LVM快照,虛擬化環境中的快照、raid5等等。

 

附錄:How do I prevent accidental rm -rf /*?

 

 

關注博客,每天進步一小點! 嘿嘿~~~





免責聲明!

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



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