Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,相关的知识,希望对你有一定的参考价值。

Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时都要做一个备份,然后再删除。

假设有一个大的分区/data/,每次删除文件或者目录前,都要在/data/下面创建一个隐藏目录,以日期/时间命名,比如/data/.201802021054,然后把所有删除的文件同步到该目录下面,可以使用rsync -R把文件路径一同同步


答案:

#!/bin/bash
d=`date +%Y%m%d%H%M`
read -p "Are you sure delete the file or directory $1? y|n:"  c
if [ $c == "y" ] || [ $c == "Y"]
then
      mkdir /data/.$d
      rsync -aR $1/   /data/.$d
      /bin/rm -rf $1
elif [ $c == "n"] || [ $c == "N"]
then
      exit 0
else
     echo "Please input y or n"
fi

解析:首先声明一个变量$d,将日期命令(date +%Y%m%d%H%M)的执行结果赋值给变量d,这里用到了反引号(``),作用就是将反引号中命令的运行结果反馈出来。使用read -p 将输入结果赋值给变量$c。


          使用if进行判断,这里首先说明几个命令的作用,[]中括号里面是判断的条件,两边都要有空格,条件判断符“==”两边也要有空格, ||是或者的意思。那么,整段的含义是:如果$c全等于字符串y或者Y,则执行 mkdir 创建文件夹,执行rsync同步命令,最后执行删除命令。再如果,$c全等于字符串n或者N,则退出,否则(以上两种情况都不包含,输出echo“please input y or n”)。

         

         单独说明 rsync -aR $1/   /data/.$d。其实完整的写法应该是 rsync -aR $1/ /data/.$d/$1,但是这样写,如果$1的值为一个绝对路径,如:/tmp/1.txt,那么代入会发现

rsync -aR /tmp/1.txt  /data/.201802021122//tmp/1.txt。多了一个/会报错,所以省略了/$1,避免这种情况。


-------习题来源阿铭Linux--------

以上仅为个人理解,不正之处请指出,谢谢。

以上是关于Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,的主要内容,如果未能解决你的问题,请参考以下文章

Linux rm危险命令误删除文件如何恢复

linux常用命令rm命令

linux系列:rm命令

linux常用命令:rm 命令

linux每日命令:rm命令

每天一个 Linux 命令:rm 命令