为什么 rm 命令会出现这样的行为以及这会造成什么损害

为什么 rm 命令会出现这样的行为以及这会造成什么损害

假设我在目录 /home/userA

有一个环境变量 $XMLFILES 指向 /u/xml/xmlfiles。$XMLFILES 环境变量位于用户 A 的环境/配置文件中

我以用户 A 的身份登录,然后“su”进入用户 B,再 cd 进入 /home/userB/testdata。

我没有意识到我是用户 B,所以我发出了命令

rm $XMLFILES/*

突然我看到了这个

bash-3.00$ rm $XMLFILES/*
rm: /bin not removed: Permission denied
rm: /boot is a directory
rm: /cdrom is a directory
rm: /dev is a directory
rm: /devices is a directory
rm: /etc is a directory
rm: /export is a directory
rm: /home is a directory
rm: /kernel is a directory
rm: /lib is a directory
rm: /lost+found is a directory
rm: /mnt is a directory
rm: /net is a directory
rm: /noffprotect: override protection 644 (yes/no)? ^C

我一看到覆盖保护消息就按下了 [CTRL+C]。我认为由于我以用户 B 身份登录,因此 $XMLFILES 为空,因此发出的命令实际上是

rm *

现在我不明白的是为什么它尝试从根文件夹中删除所有内容?由于我在 /home/userB,它是否应该尝试删除“/home/userB”顶层中的所有内容?rm 命令甚至不是递归删除。

鉴于我登录的用户不是 root 用户,这会造成任何损害吗?

答案1

不,因为$XMLFILES是空的,所以它试图删除/*。它所能做的就是从根目录中删除文件,而普通用户本来就不应该能够创建根目录。

答案2

$XMLFILES 本来应该是一个空字符串,所以你实际发出的内容应该是

R M ””/*

其估值将下降至

R M /*

这就是为什么你需要非常在命令行参数中使用 $ 变量时请小心(即首先检查它们的存在)。

相关内容