警告:危险脚本。不要从命令行运行!
在公司的笑话电子邮件中看到了这一点。有人可以向我解释为什么这个 bash 脚本比普通的 'rm -rf' 命令更危险吗?:
nohup cd /; rm -rf * > /dev/null 2>&1 &
特别是,为什么使用 nohup 以及最后的元素是什么?
警告:危险脚本。不要从命令行运行!
警告:危险脚本。不要从命令行运行!
在公司的笑话电子邮件中看到了这一点。有人可以向我解释为什么这个 bash 脚本比普通的 'rm -rf' 命令更危险吗?:
nohup cd /; rm -rf * > /dev/null 2>&1 &
特别是,为什么使用 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
part 什么都不做,它只会触发一个错误。第二部分(原始脚本)尝试删除当前目录中的所有内容,并且不能被 停止Ctrl-C,因为它在后台运行。它的所有输出都被重定向到 void,因此您看不到任何“访问被拒绝”的进度消息。
2>&1
接受 stderr(文件句柄 2)并重定向到 stdout(文件句柄 1)。&
单独将 rm 命令置于后台。nohup 允许作业在启动它的人注销后继续运行。
换句话说,这个命令会尽最大努力清除整个文件系统,即使用户退出他们的终端/shell。
笑话有点破,显然没有经过测试,他的意思是
nohup sh -e "cd / ; rm -rf *" > /dev/null 2>&1 &
或者
nohup rm -rf / > /dev/null 2>&1 &
否则 nohup cd /; part 被 shell 认为是一个单独的行。第二行只是产生 rm -rf * 递归地 rm 你的当前目录(减去名称以 . 开头的文件)
nohup [..] &
即使在用户注销后,它也会在后台运行(我想更难停止)
2>&1
将标准错误重定向到标准输出
> /dev/null
丢弃来自标准输出的任何内容
该命令基本上似乎什么都不做,因为您的文件系统在后台慢慢被破坏。
nohup 意味着它将忽略挂断信号,这意味着即使用户不再登录,它也会继续运行。
cd / 将用户移动到根目录
rm -rf * 递归删除所有文件(遍历所有目录)并强制删除(不关心文件是否正在使用)
最后的部分将所有输出重定向到无处。它应该基本上将您的驱动器格式化为空。