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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值