对于rm这个命令相当的邪恶,若没有备份那是相当难恢复的,但是现在貌似是有一个叫extundelete的工具可以恢复,但是需要卸载分区,若是删除的根分区,那就不好做了!!但是现在有防止被rm误删的方法,方法如下:
创新互联长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为铁西企业提供专业的成都网站设计、做网站,铁西网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
有一个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