这个bash脚本有多危险?

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

在一个公司的笑话电子邮件看到这个。 有人可以向我解释为什么这个bash脚本比正常的“rm -rf”命令更危险吗?

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

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

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

2>&1取stderr(文件句柄2)并重定向到stdout(文件句柄1)。 &本身将rm命令放在后台。 即使启动它的人登出后,nohup仍然可以继续运行。

换句话说,即使用户使用他们的终端/外壳,这个命令也会尽最大努力消除整个文件系统。

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

 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,所以你不会看到任何“访问被拒绝”的进度消息。

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

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

要么

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

否则nohup cd /; 部分被shell视为一个单独的行。 而第二行只是产生了rm -rf *,它递归地rm你的当前目录(少于名字的文件开头)。

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

cd /将用户移动到根目录

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

最后一块将所有输出重定向到任何地方。 它应该基本上将你的驱动器格式化为无。

nohup [..] &使其在后台运行,即使用户已经注销(使其更难停下来,我想)

2>&1将stderr重定向到stdout

> /dev/null丢弃来自标准输出的任何东西

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