为什么rm命令的行为与此类似,以及我将造成什么样的损害


0

假设在目录/ home / userA中

有一个环境变量$ XML FILES指向/ u / xml / xml文件。 $ XML FILES环境变量位于userA的环境/配置文件中

我以userA身份登录,然后'su'登录到userB,我登录到/ home / userB / testdata。

我没有意识到我是userB所以我发出了命令

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]。我认为因为$ XMLFILES是null因为我以userB身份登录了实际发出的命令

rm *

现在我不明白为什么它尝试删除根文件夹中的所有内容?因为我在/ home / userB,它应该只是试图删除'顶级'/ home / userB'中的所有内容吗? rm命令甚至不是递归删除。

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

Answers:


6

不,从那以后 $XMLFILES 它是空的,它试图删除 /*。所有可以做的就是从根目录中删除文件,普通用户不应该首先创建这些文件。


但是当我发出命令时没有/当。它不应该转换为rm *而不是rm / *
ziggy

/ 就在那里,介于两者之间 $XMLFILES*
Ignacio Vazquez-Abrams

好的,我明白了。它在*之前/之前。愚蠢的我。
ziggy

即使我没有以root身份登录,你认为这会造成任何损害吗?
ziggy

1
不,因为没有普通用户可以拥有写访问权限 / 而不管。
Ignacio Vazquez-Abrams

2

$ XMLFILES本来就是一个空字符串,所以你实际发布的就是

R M ””/*

这将被评估为

R M /*

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


我想这不会造成任何损害,因为我没有以root身份登录。
ziggy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.