rm 是Linux中的删除命令,这个命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。

rm 命令有选项参数可供选择,使用时要遵循语法规则;

rm [选项] [参数]

rm -rf * 删除当前目录下的所有文件,这个命令很危险,应避免使用,所删除的文件,一般都不能恢复。

rm -f 其中的 f 参数 f --force ) 忽略不存在的文件,不显示任何信息,不会提示确认信息。

rm 命令删除一个目录中的一个或者多个文件或者目录,只用 rm 命令不会删除目录,通常文件通常可以恢复。

在操作 rm -rf 这个命令时一定要小心,要不然真要跑路了。据说有很多运维都是因为这个命令跑路的。规避这个危险命令可以先从习惯开始,可以尝试先使用mv命令然后在定期清理。

还可以使用-i选项不过会很繁琐,估计一般都不会使用这个选项。如果一定要使用rm -rf 可以尝试用以下规范来使用,尽量避免直接使用如:rm -rm * /home/wwwroot/test 这样直接的命令;

cd /home/wwwroot/test && rm -rf * # 这样的命令格式好处是减少误操作如果前面的cd命令路径错误则不会执行rm -rf * 命令;

下面的这条命令是一个错误的演示,如果手滑打了一个空格这种情况并不少见或者多一个字母导致路径改变了,删除了不是想要删除的路径,后果不用想了。下面的命令执行后会直接删除 / 根目录,就因为多了一个空格,实际执行了 rm -rf * / 这个命令;

rm -rf * / home/wwwroot/test # 这是个错误的演示,如果执行了就会直接删除 / 根目录

如果在shell脚本中使用了一个没有声明的变量,或者是声明了但是没有赋值的变量,当执行该脚本时并不会报错,shell解释器会把前面提到的两种情况的变量值设置为空。

如果恰好在rm命令中调用了该变量,那么会造成不可估计的后果,轻则误删文件,重则导致操作系统故障。

场景1:

#!/bin/bash
file_dir=
rm -rf ${file_dir}/bin

场景2:

#!/bin/bash
rm -rf ${file_dir}/bin

上面两个脚本执行的结果都一样,脚本没有报错,但是/bin目录被删除了,本来是打算删除某个目录下的bin目录,但是却把系统的/bin目录删除了,结果是系统登录不了,还有一种更加致命的情况,rm命令写成:

rm -rf ${file_dir}/

整个/目录被删除,可以考虑买柬埔寨、越南等方向的机票了。

避免方法

用if判断是否为空变量

#!/bin/bash
file_dir=
if [[ -z ${file_dir} ]];then
echo '变量为空'
else
echo '变量不为空'
fi

设置默认值

rm -rf ${file_dir:-/tmp/}/bin

使用rm命令要格外小心。在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。

使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。