在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 $dirr_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