Linux服务器实现回收站功能

最近在网上看到一篇文章《程序员,Linux下如何避免从删库到跑路的悲剧》,里面提到使用技术避免rm命令误删的思路觉得挺有意思,在服务器上自测了一把。

 

1.      创建remove.sh文件

以下是remove.sh文件内容:

#!/usr/bin/ksh

TRASH_DIR="/dev/.trash"

for iin $*;

do

        stamp=`date +%s`

        fileName=`basename $i`

        mv $i $TRASH_DIR/$fileName.$stamp

done

 

很明显,根据脚本内容,我们要先创建一个/dev/.trash目录,用于存放备份内容。至于为啥把目录建在/dev下,任性?喜欢?No,因为通过df发现这个目录下剩余空间很多,并且很少被使用,所以大家可以根据自己的服务器选择合适的目录。

创建完目录就够了?No,还要赋权,chmod777 /dev/.trash

另外,需要将remove.sh放在合适的位置,我是将这个脚本放到/bin目录下,因为rm命令也在这。

 

2.      设置别名

因为我想要在整个服务器全部用户都生效,那么第一选择当然是/etc/profile了。于是在root用户下执行以下命令:

echo “aliasrm=’/bin/remove.sh’”>>/etc/profile

 

结果发现一个很有趣的事情,只有root用户以及所有shell为bash的普通用户生效了,csh的普通用户并没有这个别名。(检查别名命令:aliasrm)

原来bash的用户,会在.profile中执行/etc/profile,但是csh根本执行不了,那么csh要如何使这个别名生效?其实只要在/etc/csh.cshrc中配置别名就好了。那么,事情就简单了,咱们在root用户下执行一下命令(注意:csh设置别名的格式不同):

echo “aliasrm ‘/bin/remove.sh’” >>/etc/csh.cshrc

 

备注:同理,要是想在ksh的普通用户生效,当然是在/etc/ksh.kshrc中设置别名咯。另外,如果只是想在某个普通用户下生效,不希望在服务器上所有用户生效,那就只在该用户的家目录下对应的环境变量配置文件中配置别名就好了,比如:.profile、.cshrc、.kshrc

3.      设置定时任务

前两步实际作用就是将原本直接用rm命令删除内容,改为将内容移动到/dev/.trash目录下。那么经常删除内容,日久之后/dev/.trash目录也会爆掉。这时候,咱们就需要设置定时任务去定时清理这个目录下的内容了。

在root用户下执行crontab–e 配置以下定时任务(我设置的是每天0点删除,可以根据自己需要进行设置):

0 0 ** * /bin/rm -fr /dev/.trash/*

 

(以上是本人参考思路后实践内容,若有更好的想法,欢迎评论!)



阅读更多
个人分类: 工具
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭