bash linux_linux中bash的奇技淫巧:别名实现“企业垃圾桶”

da9ad1a41ae349b3afce6af1183160fd

在linux中当我们“rm -rf” 误操作删除某个文件之后,再去恢复就是一个很麻烦的事情,如果我们能将“rm -rf ”后的内容能够快速恢复?来我们bash的别名特性构造一个“企业垃圾桶”,让你彻底告别rm删除操作给来的困扰。

1.bash的别名特性

作用一:简化操作

可用bash的别名特性将常用的,且又输入又比较麻烦的命令可定义成别名,简化操作,例如:

[root@node2 ~]# alias net_path="cd /etc/sysconfig/network-scripts/"

将cd /etc/sysconfig/network-scripts/定义成别名net_path,我们就可以运行net_path,来执行cd /etc/sysconfig/network-scripts/。

alias 是bash的特性,依赖bash而存在,当bash退出时,就会失效,要使其永久生效,就需要将其添加到环境变量文件中。

[root@node2 ~]# vim .bashrc[root@node2 ~]# source .bashrc 

作用二:规避命令本身带来的影响

bash的别名另一个用途就是屏蔽命令本身带来的影响,例如我们熟悉的rm,mv等命令本身就是别名:

[root@node2 ~]# mv file1 test1

mv:是否覆盖"test1"?

其实mv就是mv -i 的别名,提示用户“是否覆盖"test1"?”

2.实例:构造企业垃圾桶

实现思路:

创建一个目录,当执行rm命令时,实际是使用mv命令将要删除的文件移动到该目录下,设置定时计划任务,定时将该目录下的文件回滚,永远保持某段时间最新的删除文件。

知识储备:

(1)linux中别名的定义。

(2)linux中文件操作相关命令。

(2)shell脚本基础。

(4)linux下配置定时计划任务。

实现方法:

(1)编写实现该功能的shell脚本:

[root@node2 ~]# cat rm.sh #!/bin/bash#Author:anliu#Blog:https://home.cnblogs.com/u/anttech#Time:2019-09-11 06:00:43#Name:rm.sh#Version:V1.0#Description:The function of this script is to realize "enterprise garbage can". When the files deleted by RM command are saved in a certain directory for a certain period of time, they can be recovered freely in this period of time.​#Defining variablesdir=/dev/my_null/`date "+%Y_%m_%d"`args=""array=(`shift;echo $@`)​find /dev/my_null -name `date "+%Y_%m_%d" -d "-3 day"` -exec rm -rf {} ;#find /dev/my_null -type d -mtime +3 -exec rm {} ;​#一次删除多个文件的测试#for k in ${array[@]}#do#    echo $k#done​[ -d $dir ] || mkdir -p $dir​r_move(){    for i in $@    do        if [ -e $i ]        then            name=$i.`date "+%H%M%S"`            mv $i $dir/$name         else            echo "$i 不是个文件或者目录。。"        fi    done}case "$1" in    -rf|-fr)        echo "直接删除。。"        r_move ${array[@]}        ;;​    -r)        echo "直接删除。。"        r_move $2        ;;    -f)        read -p "确定要删除$2吗?[Y/N]" num        if (($num==N))        then            exit 0        elif (($num==Y))        then            echo "直接删除..."            shift        else            echo "请输入[Y/N]"        fi        ;;    *)        echo "参数不合法..."        ;;esac

将脚本放置在 /usr/local/bin/目录下,并赋予可执行权限:

[root@node2 ~]# mv rm.sh /usr/local/bin/[root@node2 bin]# chmod +x rm.sh 

(2)定义别名

用vim命令打开/etc/bashrc文件,添加别名,并加载文件。

[root@node2 ~]# vim /etc/bashrcalias rm=/usr/local/bin/rm.sh[root@node2 ~]# source /etc/bashrc

(3)定义计划任务,让垃圾桶中永远保存最近7天的文件。

使用“crontab -e”命令,回车,编辑一下内容后“ESC”“:wq”保存退出。

#Define scheduled tasks and delete junk files seven days ago every day.0 0 * * * root ./etc/profile;/usr/local/bin/rm.sh >/dev/null 2>&1

这样就大功告成!测试一下吧~~

[root@node2 ~]# touch test[root@node2 ~]# mkdir test-file[root@node2 ~]# rm -rf test直接删除。。[root@node2 ~]# rm -rf test-file直接删除。。[root@node2 ~]# lsaaa  file2[root@node2 ~]# ll /dev/my_null/2020_05_13/总用量 0-rw-r--r-- 1 root root  0 5月  13 10:51 test.105138drwxr-xr-x 2 root root 40 5月  13 10:51 test-file.105205
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值