您的位置:首页 > 运维架构 > Linux

重定义rm命令并创建几条命令实现linux系统下的回收站功能的一种方法

2019-06-08 10:01 711 查看

linux:重定义rm命令并实现回收站功能

基本原理

linux下的rm命令不像windows,执行了就直接删除,没有后悔药。如果一不小心执行了rm -rf / 那么下次开机怕是都启动不了了,为了避免这种情况,我们需要把rm命令给限制一下,以防止出现误删文件的情况。
原理就是通过.bashrc的alias将rm命令重定义,使rm命令变成调用mv命令将要删除的文件移动到回收站。

重映射rm命令

# 定义回收站目录
trash_path='.trash'

# 判断 $trash_path 定义的文件是否存在,如果不存在,那么就创建 $trash_path.
if [ ! -d $trash_path ]; then
mkdir -p $trash_path
fi

# 定义别名:使用 rm 就调用 trash
alias rm=trash

# 使用 rl 就调用 'ls ~/.trash'
# 如果更改上面的回收站目录这里的目录也需要修改
alias rl='ls ~/.trash'

# 使用 unrm 就调用 restorefile,需要在删除目录的父目录下执行
alias unrm=restorefile

# 使用 rmtrash 就调用 claearteash
alias rmtrash=cleartrash

# 恢复文件的函数
restorefile()
{
mv -i ~/.trash/$@ ./
}

# 删除文件的函数
trash()
{
mv $@ ~/.trash/$@`date +%%%F%%%T`
}

# 清空回收站的函数
cleartrash()
{
read -p "确定要清空回收站吗?[y/n]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}

将上面的脚本内容添加到 ‘home/用户名/’ 目录下的 .bashrc 文件中,下次用户连接时会自动加载其配置,或者直接执行 source .bashrc 立即生效

重映射后,rm 文件名 就变成了将文件移动到回收站 ,同时获得删除文件的时间和日期,这样就算回收站中有同名的文件或者文件夹也没关系。

操作回收站的几个命令

另外还添加了几个命令:

rl
查看回收站的内容

unrm
后悔命令,恢复回收站的文件内容。需要在删除目录的父目录下执行,并且要输入正确的文件名参数,不可以不传入参数,不然会把整个回收站都给搬回来。。。

rmtrash
手动清空回收站的命令,执行后删除回收站文件夹下的所有内容,这回真的没有后悔药了。

因为 重映射了rm命令,所以rm -rf就不再可用了,如果仍需要调用rm命令,需要输入 /bin/rm {参数} 进行绝对调用,仍然想要删库跑路的可以用这种手法。

当然这样删除文件后文件只是会移动到回收站,如果懒得手动清空,可以写一个定时清理脚本,添加到crontab中定时执行

定时清空垃圾箱.trash, 通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本
编辑crontab文件中条目: crontab -e
添加: 0 0 * * * rm -rf ~/.trash/*

参考文章:
https://www.toutiao.com/a6604987457572176388/?tt_from=mobile_qq&utm_campaign=client_share&timestamp=1537847280&app=news_article&utm_source=mobile_qq&iid=26112390770&utm_medium=toutiao_ios&group_id=6604987457572176388

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: