假设我在目录 /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 /*
这就是为什么你需要非常在命令行参数中使用 $ 变量时请小心(即首先检查它们的存在)。