这个bash脚本有多危险?

时间:2012-05-28 14:32:37

标签: linux bash delete-file nohup

警告:危险的脚本。不要从命令行运行!

在公司的笑话邮件中看到这一点。有人可以向我解释为什么这个bash脚本比普通的'rm -rf'命令更危险吗?:

nohup cd /; rm -rf * > /dev/null 2>&1 &

特别是,为什么使用nohup以及最后的元素是什么?

警告:危险的脚本。不要从命令行运行!

5 个答案:

答案 0 :(得分:6)

你可以尝试一些不那么“危险”的东西:

nohup cd /; find * >/dev/null 2>&1  &

我得到了这个:

nohup: ignoring input and appending output to `nohup.out'
nohup: cannot run command `cd': No such file or directory
[2] 16668

因此,nohup部分什么都不做,它只会触发错误。第二部分(原始脚本)尝试删除当前目录中的所有内容,并且 Ctrl-C 无法停止,因为它在后台运行。其所有输出都被重定向为void,因此您没有看到任何“拒绝访问”进度消息。

答案 1 :(得分:4)

2>&1接受stderr(文件句柄2)并重定向到stdout(文件句柄1)。 &本身将rm命令放在后台。即使在启动它的人注销后,nohup也允许工作继续运行。

换句话说,即使用户ragequits他们的终端/ shell,这个命令也会尽力消灭整个文件系统。

答案 2 :(得分:3)

这个笑话有点破碎,显然它没有经过测试,他的意思是

 nohup sh -e "cd / ; rm -rf *" > /dev/null 2>&1 &

 nohup rm -rf / > /dev/null 2>&1 &

否则nohup cd /; shell被认为是一个单独的行。第二行只生成rm -rf *,它递归地保存当前目录(减去名称以。开头的文件。)

答案 3 :(得分:2)

nohup [..] &即使在用户退出后也会让它在后台运行(我想它更难停止)

2>&1将stderr重定向到stdout

> /dev/null会丢弃来自stdout的任何内容

该命令基本上似乎什么都不做,因为你的文件系统在后台慢慢被破坏。

答案 4 :(得分:2)

nohup意味着它将忽略挂断信号,这意味着即使用户不再登录它也会继续运行。

cd /将用户移动到根目录

rm -rf *递归删除所有文件(遍历所有目录)并强制删除(不关心文件是否正在使用中)

最后一块将所有输出重定向到无处。它应该基本上将您的驱动器格式化为空。