您好,登錄后才能下訂單哦!
對于rm這個命令相當的邪惡,若沒有備份那是相當難恢復的,但是現在貌似是有一個叫extundelete的工具可以恢復,但是需要卸載分區,若是刪除的根分區,那就不好做了!!但是現在有防止被rm誤刪的方法,方法如下:
有一個recycle.zip包,其實里面就是recycle腳本和rm腳本兩個腳本,兩個腳本我稍微做了下修改,若機器比較多的話,可以搭建saltstack或者puppet工具,我們當時做的是和saltstack結合的,可以在master salt上將命令推送到salt client上,很方便的,前提需要在服務器上搭建salt master和salt client,在搭建salt時需要搭建salt的yum源,安裝此包epel-release-6-8.noarch.rpm ,即可yum install -y salt。
要想使用該recycle程序先手動執行以下兩個命令
mkdir ~/.recycle ### 建立recycle目錄(這步在腳本中已添加)
alias rm='/usr/local/bin/rm' ### /usr/local/rm改為附件中rm存放的路徑 (這個可以使用salt推送)
注:rm這個路徑必須是除/bin/rm和/sbin/rm,因為它會優先調用的還是/bin/rm和/sbin//rm命令,這樣就不生效了。
(mv recycle.zip /usr/loca/bin
cd /usr/local/bin
unzip recycle.zip
chmod +x recycle
chmod +x rm)
附件中有rm和recycle兩個命令
1.rm刪除文件和文件夾,用法與自帶rm命令相似
2.recycle顯示回收站里面的內容:可以按名字排序,也可以按刪除時間排序。
recycle -d可以進入整理回收站的模式: 用法舉例如下
recycle -d -empty清空回收站
recycle -d -t 3清空3天前的文件
recycle -d -s 5清空超過5M的文件
recycle -d -t 3 -s 5清空3天前且大小超過5M的文件
腳本中改的地方:
為了避免在計劃任務中避免交互,將提示yes or no的腳本刪除了,#行表示的是原有的,下面一行是自己更改的
recycle : ###yesOrNo "empty the recycle " && $RM -rfv $RECYCLE_DIR/* && echo.ok recycle emptyed || return 0
$RM -rfv $RECYCLE_DIR/* && echo.ok recycle emptyed
rm:1.判斷~/.recycle目錄是否存在:加在腳本中的:[ -d ~/.recycle ] || mkdir ~/.recycle
2.加了一行溫馨提示去×××回
mv -- "$1" "${RECYCLE_DIR}/${DATE}_${st}_${1}" \
&& echo.ok removed $t \`$1\`;
echo ------------------------------;
echo "如需要恢復請到~/.recycle目錄里找回。"
在salt主服務器上執行,推送過程:
cd /srv/salt/files(rm recycle存放目錄)
salt '*' cp.get_file salt://files/rm /usr/local/bin/rm (*代表salt下的所有client)
salt '*' cp.get_file salt://files/recycle /usr/local/bin/recycle
salt '*' cmd.run 'chmod a+x /usr/local/bin/rm'
salt '*' cmd.run 'chmod a+x /usr/local/bin/recycle'
salt '*' cmd.run 'echo "alias rm='/usr/local/bin/rm'" >> /etc/bashrc'
salt '*' cmd.run 'source /etc/bashrc'
在salt主服務器上添加計劃任務:
crontab -e
* 5 */15 * * /usr/bin/salt '*' cmd.run '/usr/local/bin/recycle -d -empty' &> /dev/null
* 1 */15 * * /usr/bin/salt '*' cmd.run '/bin/mv /home/dev/.recycle/* /root/.recycle/' &> /dev/null
* */1 * * * /usr/bin/salt '*' cmd.run '/usr/local/bin/recycle.sh' &> /dev/null
[root@redmine files]# cat recycle.sh
#!/bin/bash
size=`du /root/.recycle/ | awk '{print $1}'`
date=`date +%F`
if [ $size -gt 10485760 ]; then
recycle -d -empty &> /dev/null
echo "刪除日期:$date" >> /var/log/recycle.log
fi
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。