您实际上可以使用终端机使计算机崩溃吗?


48

那些不了解Terminal的人通常会害怕使用它,因为担心他们会弄乱命令并导致计算机崩溃。那些了解Terminal的人最好知道不是这种情况-通常Terminal只会输出一个错误。但是实际上是否有会使您的计算机崩溃的命令?

警告:如果您键入这些数据或复制粘贴,尤其是sudorm命令,则可能会丢失数据。


有人不小心将同一行中的所有公司计算机擦了擦,几年前我在该站点上看到了它,它是伪造的,但仍然很容易发生。如果可以找到,我会链接。
诺亚·克里斯蒂诺

7
终端只是运行程序的命令行界面。它是图形用户界面的替代方法。您可以从任一程序运行任意程序。因此,您的问题并没有多大意义。您应该问:可以通过运行程序使计算机崩溃吗?
jamesdlin

“崩溃”是什么意思?与大多数Mac OS X GUI命令不同,在终端中运行的命令通常功能强大,并且经常会“按您的意思而不是您的意思”。但是,除非您有意尝试这样做,否则您不太可能使计算机崩溃。(不过,我可以想到一些有意这样做的方法)
Josh

1
在Web上粘贴命令可能非常危险。不管有没有可能悬挂您的机器。键入至少可以理解的命令并不危险。否则,有很多方法可以破坏您的计算机。就像在GUI中单击随机系统配置设置一样,但是在GUI中至少限制了更多可能性。粘贴命令的危险-视觉上看到的复制文本可能与实际复制的文本不同,因此可能包含混杂的恶意命令。
akostadinov

Answers:


51

使计算机崩溃的一种方法是执行所谓的fork-bomb

您可以通过以下方法在unix系统上执行它:

:(){ :|: & };:

这是一个将递归生成进程的命令,直到OS如此繁忙以至于不再响应任何操作为止。


49
@bunyaCloven如果我正确理解了您的命令,那么这是一个不提示删除所有文件夹的命令,如果可行,这将非常危险。希望您为此写了警告通知。
Andrew T.

80
@AndrewT。人们不应该只是随意地键入在互联网上找到的随机命令。(尤其是那些名为“您是否可以通过终端使计算机崩溃”的线程中的线程)
约翰·汉密尔顿

34
OP要求终端崩溃,而不是擦除。
Piersb '17

16
实际上,前叉炸弹在Mac OS X上造成的损害最小,因为它具有进程数的上限。
GDP2

7
@bunyaCloven用替换为;&您可以同时删除所有文件和fork炸弹,看看哪个首先破坏了系统!
Muzer '17

41

不知道您关于“使计算机崩溃”的意思-如果您将其重新表述为“使计算机无法使用”,则可以。当然,只需要一个单一的流浪命令-就在您不清楚自己在做什么的那一刻,就像您不加思考地说话时一样,损害可能是巨大的,几乎是立即的。经典示例:

$ sudo rm -rf /

如果仅让该命令运行一秒钟,则可能会耗尽系统的足够内存,使其无法启动,并可能导致不可逆的数据丢失。不要这样


2
只是分享我为什么要澄清重新措辞..以传统意义上的“崩溃”计算机-使计算机锁定-您需要给CPU足够的工作来做它无法响应适时地进行其他工作..例如,更新图形和移动光标。我敢肯定有一种方法可以从命令行中完成。
哈夫

6
@DonielF -r表示以递归方式删除目录中的文件。-f表示“强制”,因为无论给定文件的权限如何,都不要求确认。/是文件系统的根目录,这意味着它将破坏所有内容,除非某些特殊文件的行为不像典型文件。另外,您将很难找到一条简短的命令,该命令将导致没有root / admin权限的系统崩溃。
GDP2

11
我试rm -rf /了一会儿,rm说如果要删除根,请使用某某标志。没有数据丢失。似乎现在已经有了防止盲目运行的安全保护rm -rf /
alexyorke '17

27
-从2006年起,
无需使用no

6
是一个实际发生的情况,它确实发生了- 与法律上的情况rm -rf 非常相似,但确实出错了:/
mgarciaisaia

30

假设您不知道自己在做什么以及尝试备份某些硬盘驱动器

dd if=/dev/disk1 of=/dev/disk2 

好吧,如果您将它们混合在一起(切换if和of),它将用旧数据覆盖新数据,而不会出现任何问题。

存档工具可能发生类似的混淆。坦率地说,大多数命令行实用程序都是如此。

如果您希望一个字符混用的示例使系统崩溃,请看一下这种情况:您要将当前目录中的所有文件移动到另一个:

 mv -f ./* /path/to/other/dir

让我们接受一个事实,您已经学会了使用它./来表示当前目录。(我知道)如果您省略点,它将开始移动所有文件。包括您的系统文件。您很幸运,您没有对此感到不高兴。但是,如果您在某处读到“ sudo -i”,则不必再键入sudo,您现在已经以root用户身份登录。现在,您的系统正在自己的面前吃光。

但是我再次认为,诸如用垃圾覆盖宝贵的代码文件之类的事情比较麻烦,因为我弄乱了一个字符或因为我弄混了参数的顺序。

假设我想检查一下gcc生成的汇编代码:

gcc -S program.c > program.s

假设我已经有一个program.s,并且我使用TAB完成。我很着急,忘了两次TAB:

gcc -S program.c > program.c

现在,我的program.c中有了汇编代码,现在不再有c代码了。对于某些人来说,这至少是一个真正的挫折,但对另一些人来说,这是从头开始的。

我认为这些将导致真正的“伤害”。我不在乎系统是否崩溃。我会担心我的数据丢失。

不幸的是,在您以适当的预防措施学习使用终端之前,这些都是必须犯的错误。


16
您的最后一点是每个人都应使用版本控制的众多原因之一
Darren H

4
gcc program.c -o program.c正是由于制表符的完成,我曾经破坏了我正在使用的程序。之后,我学会了认真使用版本控制。
nneonneo

2
到目前为止最好的答案是发布看起来合理的命令,这些命令可能是简单的拼写错误,但可能会造成重大损失。
gaazkam

1
“现在我的程序中有汇编代码。c”不。你什么都没有 重定向在GCC甚至打开文件之前就将其截断了。
muru

1
哦,老兄,我真的很高兴他们在GCC中增加了用户界面。自从我上次失误以来已经有一段时间了,但是很高兴看到我下次会有一点保护。
nneonneo

28

到目前为止,引起内核恐慌的原因更类似于崩溃:

sudo dtrace -w -n "BEGIN{ panic();}"

(代码取自此处也可在Apple自己的文档中找到

您也可以尝试:

sudo killall kernel_task

我尚未验证那里的第二个项目是否确实有效(并且我不打算这样做,因为我现在确实有一些工作要做)。


2
刚刚在10.12.3 VM中尝试了第二个,它只是说:No matching processes were found
Alexander O'Mara

3
此外,至少在启用SIP的情况下,第一个似乎无效,dtrace: system integrity protection is on, some features will not be available dtrace: description 'BEGIN' matched 1 probe dtrace: could not enable tracing: Permission denied
Alexander O'Mara

@ AlexanderO'Mara对第二条命令的结果并不感到惊讶;我发现Mac OS X不允许您以这种方式删除内核进程。由于dtraceSIP已有效地将其清除
GDP2

1
kernel_task这不是正常的过程。这是不朽的;它只能通过自身的错误(这将被称为KP并使整个计算机瘫痪)而被杀死。kernel_task的PID名义上为0,但是如果您将其提供给kill(pid, sig)syscall,则手册页会显示“ 如果pid等于0”,则将sig其发送到调用进程的进程组中的每个进程。。因此,您根本无法发送kernel_task信号。
Iwillnotexist Idonotexist

@IwillnotexistIdonotexist是的,我认为情况会如此;谢谢你的信息。要记住的好东西。
GDP2

19

现代化的macOS使得以非特权用户身份使您的计算机真正崩溃(即,不使用sudo),因为UNIX系统旨在处理成千上万的用户,而不会让任何用户破坏整个系统。因此,值得庆幸的是,通常在执行破坏计算机的操作之前,必须先提示您。

不幸的是,这种保护仅适用于系统本身。正如xkcd所示,关心的很多内容不受系统完整性保护,root用户特权或密码提示的保护:

XKCD 1200

因此,如果您不注意的话,您可以输入大量内容,这只会破坏您的用户帐户和所有文件。一些例子:

  • rm -rf ${TEMPDIR}/*。直到您意识到环境变量是拼写的,这似乎是完全合理的TMPDIRTEMPDIR通常是未定义的,因此这是rm -rf /。即使没有sudo,这也会很高兴地删除您具有删除权限的所有内容,通常包括您的整个主文件夹。如果让它运行足够长的时间,它也将破坏连接到计算机的任何驱动器,因为您通常对此具有写权限。
  • find ~ -name "TEMP*" -o -print | xargs rmfind通常会找到符合特定条件的文件并打印出来。如果没有,-o这将达到您的期望,并删除所有以TEMP*()开头的文件(只要路径中没有空格)。但是,其-o意思是“或”(不是许多其他命令那样的“输出”!),导致该命令实际上删除了所有文件。笨蛋
  • ln -sf link_name /some/important/file。我偶尔会弄错此命令的语法,它会很乐意用无用的符号链接覆盖您的重要文件。
  • kill -9 -1 会杀死您的每个程序,导致您很快退出系统并可能导致数据丢失。

3
仅供参考(对于其他阅读本文的人),find有一个-delete论点比传递给xargs rm
乔什(Josh)

现代MacOS真的更防撞吗?这些系统大多数是针对单个用户的。他们真的有健全的maxprocs / cpulimits吗?你能提供参考吗?
user2497

1
您,所有人,都非常了解这种损害ln -sf会产生... 以及如何从中恢复:-)
Iwillnotexist Idonotexist

1
@Josh:感谢您指出这一点。而且,在一般情况下,应该使用它find -print0 | xargs -0来安全地处理文件名中的奇怪字符。
nneonneo

1
同意 更有用的xargs建议:<whatever> | xargs echo <something>首先使用,预览xargs将实际运行的命令。xargs是CLI如此强大的一个很好的例子:CLI如此强大:您可以一次处理很多项目,而无需烦人的确认和手工操作……只要确保您告诉它做自己想做的事情即可。
乔什(Josh)

16

您可以执行的另一项操作(我之前曾经犯过错误)是:

sudo chmod 0 /

这将导致整个文件系统(意味着所有命令和程序)无法访问...除了root用户之外。这意味着您将需要以root用户身份直接登录并还原文件系统,但是您将无法访问该sudo命令(或其他任何命令)。您可以通过引导进入单用户模式,并使用挂载和还原文件系统来恢复对命令和文件的访问chmod 755 /

如果使用递归方式进行操作,chmod -R 0 /则将导致系统无法使用。正确的解决方法是使用恢复分区中的“磁盘工具”来修复磁盘权限。如果以递归方式运行快照或文件系统备份,则最好这样做。


8
“您可以通过... chmod 755 /来修复它 - 不,您不能。为了安全起见或要完全正常工作,许多文件都需要不同于755的权限。chmod 755 /将使您的系统不安全,并且会以细微的方式损坏。唯一的完整恢复chmod 0 /是通过快照还原,备份还原和/或重新安装。
marcelm '17年

2
@marcelm好点。我的建议只是恢复对命令的访问,而不是作为永久性修复。我已经更新了答案以反映这一点。据我所知,除非您使用该-R标志,否则chmod不会递归-因此我认为子目录的权限不会受到影响?
musicman523

5
@marcelm,您是对的,但是显示的命令不是递归的,因此仅/会受到影响。
安德里亚·拉扎罗托

我曾经sudo chmod -R 700 /有一台新计算机,如果这样做的话,它会更加安全。令人惊讶的是,它启动了,最后出现了空白的菜单栏和空白的桌面。没有其他任何工作,但是恢复分区的“磁盘工具还原权限”实际上设法将几乎所有内容都设置正确!
nneonneo

2
@marcelm Disk实用程序具有“修复权限”选项,该选项应在没有完全系统还原的情况下更正此问题
Josh

10

该呼叫的答案sudo应被视为无效。这些已经承担了对系统的管理访问。

尝试perl -e 'exit if fork;for(;;){fork;}'。OSX现在可以对此采取一些保护措施。如果显示苹果气泡,询问您是否要终止Terminal应用程序和子流程,则您(几乎)很好。

while true ; do cat /dev/zero > /dev/null & done特别方便。如果你没有perl

for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & done只会做一个有趣的CPU负载测试。非常适合检查散热器和风扇是否达到标准。


这被称为前叉炸弹,可能会使系统无法使用(可以视为“崩溃”),但不会造成任何永久性损害。但这很讨厌!
乔什(Josh)

@Josh“但不会造成任何永久性损害”,除非当前打开的任何未保存的工作。
reirab

@reirab Josh在他的声明中“可能”添加了所有内容。但是MacOS现在主要用于编辑照片和视频。Adobe程序不具有自动自动保存功能吗?
user2497

1
同样,未保存的工作在保存之前总是有风险的。如果您的计算机无法使用,那么您将无法保存所有打开的内容:)
Josh

@Josh MacOS非常容易保存内容。它始终是🍎-S。你不应该写“可能”👋🏾
user2497

7

当然,请确保您已备份并保存您关心的所有文件,然后键入 halt

假设您后来sudo成为root用户,Mac将会崩溃。

命令行最大的风险是数据丢失。macOS界面经过数十年的设计,不会让人感到惊讶,也不会粉碎他们的数据,设置或应用。macOS图形界面还可以消除学习曲线(陡峭的曲线),使其变得安全并掌握Shell脚本。

您失去了这些保护,这就是为什么我提醒人们从终端应用程序或ssh开始的原因。如果您有备份,那么您知道自己可以工作,并且有时间和信心/技能来执行还原,那么您应该深入研究并学习甚至打破问题。


3
您说:“ ...甚至破坏事物。”这是在虚拟机中处理有风险的工作的好用例。:)
user3439894

1
这将如何崩溃?它只是立即关闭系统。它甚至刷新内核缓冲区,因此不会(保存)数据丢失。developer.apple.com/legacy/library/documentation/Darwin/…–
Josh

7
sudo kill -9 -1  

我不小心kill -9 -1在以root身份运行的perl脚本中执行了a。那就像拉电源线一样快。重启后,服务器进行了文件系统检查,并继续正常运行。

我从未sudo kill -9 -1在命令行上尝试过该命令。它可能不起作用,因为进程ID“ -1”的意思是“杀死所有属于调用者进程组的进程”。

不知道,如果使用sudo,这还意味着init和所有内核内容...但是,如果您是root用户,kill -9 -1肯定会立即停止-就像拉电源线一样。顺便说一句-日志文件中什么也不会出现,因为该命令是西方最快的杀手!

实际上,为了恢复,我去了系统管理员,告诉他们我做了什么。他们进行了硬重启,因为无法登录到该服务器(RHEL6)。

一个kill -9 -1为根杀死每一道工序,即以root身份运行。那就是sshd。那立即使我注销,并阻止任何人再次登录。由init启动的任何进程-包括init都已被杀死,除非它们更改了UID或GID。甚至无法通过串行控制台登录。ps -eaf | grep root显示了一些奇特的过程,如果这些过程以默认方式对SIGKILL做出反应,则即使基本写入HD也几乎会停止。

我现在不会在笔记本电脑上尝试:-)我kill -9 165不足为奇地想知道([ext4-rsv-conver])是否真的停止向高清硬盘写入。


您不能“杀死”内核,这也不应引起文件系统的检查。您如何从这种情况中恢复过来的?您是否进行了硬重启?因为那可能是导致文件系统检查的原因:)
Josh

您编辑的答案很有意义。您实际上无法init正常终止,但是您可以终止所有getty和SSH会话并使计算机无法使用。一个有Magic SysRq应该让一个干净的重新启动,但它往往容易只是动力循环,并依靠FS杂志:)
约什-

5

是的,您可以完全破坏您的系统。偶然地使用sudo特权进行操作是已经发布的一个示例,它是否忘记了一些指示终端执行与您预期完全不同的操作的字符。rm荷兰国际集团/,而不是/tmp/\*仅仅是一个5个字符的区别。在错误的位置放置空格也可能会完全不同。在其他时候,看似含义良好的指令可能会将恶意代码混入其中。互联网上的某些人非常擅长混淆代码。

还有一些使用html的命令可以将字体大小设置为零,因此,当看上去完全无害的外观复制到剪贴板时,实际上可能是安装某人的git repo作为可信任的源并下载了恶意软件。

您可以运行一些命令来利用这些命令,也可以很好地使用它们,但是会删除重要的文件或程序,或者损坏了磁盘。实际上,错误地使用工具可能会做一些基本的事情,例如意外地覆盖启动扇区,磁盘头或许多其他问题。

尚未发布的破坏性较小的示例是在中打开二进制文件vi。如果您曾经尝试过,它将使您的终端弄糟,直到无法使用为止reset

另外,有些命令会使您的计算机陷入瘫痪,例如:

yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & 

您可以尝试使用它,它不会造成损害,但是会使您的处理器陷入瘫痪,并且您必须杀死所产生的每个进程。

话虽这么说,但在计算中通常要注意的是,如果不弄破几个鸡蛋,就不能制作煎蛋卷。您应该在终端上保持谨慎,但是要使自己更好地使用OS,唯一的方法就是学习和实践。


您的第一个示例几乎没有害处。在编辑二进制文件时,Vim实际上非常理智。在最坏的情况下,您可以关闭窗口。第二个示例为“ yes”是令人讨厌的,它将占用相当一部分用户CPU,但是系统将保持响应状态,您可以轻松杀死父终端窗口。
nneonneo

1
我不同意“将终端弄乱,直到重新启动后才可用” – try reset,这应该清除已经打印了二进制输出的终端。或者,只是生成一个新的TTY
约什-

1
太好了,nw @JFA。实际上,我花了很长时间才学会了这个reset技巧!有关更多信息:unix.stackexchange.com/questions/79684
Josh

1
@Josh对此表示感谢,这是一个很大的帮助。对我来说确实是很多年了:P
JFA

1
@Josh然后'stty sane ^ M'和'tput reset'对您来说也应该很令人兴奋。
user2497

4

我只是一个初学者,但您可以设置True。做命令; 完成 大多数人会尝试使用Ctrl + C来停止命令,而不是外部进程(ctrl + Z,然后需要将其杀死)。我想如果命令是一些繁重的操作,例如将大量数字乘以自己的力量,那可能会干扰您的资源。但是确实,现代操作系统通常可以防止此类混乱。


2
它运行得非常快,不会崩溃。您只需要进行一些密集的计算即可,这样内核maxprocs不会让您感到难过。试试while true do cat /dev/zero > /dev/null & done
user2497 '17

谢谢。我本来希望处理大量数据以使计算机运行缓慢,但有时发生在用于机器学习的非常简单的java / python程序中。
安藤·朱莱

1
从零到空的位至少在I / O中是大数运算。我在CPU的每个内核中使用其中一个进行热测试。
user2497

1
并且^C 也会杀死while循环,但是它重复的速度太快而无法捕获中断。按住^C可能会跳出循环。关闭终端也将:)
乔什(Josh)

2
@Josh在执行CPU密集型任务后,如果有一个小暂停(例如sleep 0.1),则更容易捕获INT。
user2497

3

当然,使用在Terminal中输入的命令仍然可以导致系统崩溃。

多年来,由于各种限制和保护措施的应用,这种情况变得越来越难,但正如墨菲法则所言:“没有什么能对一个有足够能力的傻瓜提供万无一失。”

“叉子炸弹”和所有rm -rf脚本小子都是UNIX古老的东西。使用Mac OS X,您可以使用它的GUI子系统部分(WindowServer更不用说)或类似OpenBSD防火墙(又名PFApple工程师带来但自2008年以来从未进行过更新)的游戏,带来更多乐趣。PF它可以在内核中运行,因此当它出现异常时,是时候苹果告诉您“ 由于紧急原因重新启动了计算机”或类似的东西。

最糟糕的是,您永远无法知道为什么会恐慌–因为苹果公司没有提供任何有意义的堆栈跟踪信息。您只能使用十六进制数的堆栈帧返回地址。


很好的答案,和优点。我想在您的最佳方法列表中添加一些使我最喜欢的OS X在舞池中惊慌的好方法,但没有明确的术语来避免脚本小子的愚蠢。我卸载了与NFC相关的内核扩展。每次都能立即工作。通过将其调度为大约5分钟的整数倍,可以轻松地将其武器化为DOS。因此它将启动然后潜水。这就需要考虑到大多数管理员,甚至科技股的操作系统重新安装会错过这个....
弗朗西斯从ResponseBase的

3

您所说的“使计算机崩溃”的含义有点模棱两可……虽然没有其他确切的答案,但也没有确切的正确答案。由于您的问题较为歧义和笼统,我想着重于问题的性质,并给出更笼统的答案。

不了解Terminal的人通常会害怕使用它,因为担心他们会弄乱命令并使其计算机崩溃

我认为命令行是一把双刃剑,通常是非常锋利的剑。它的最大优点也是对新用户的最大缺点:CLI程序可以执行您所说的操作,而无需询问它是否真的是您的意思。他们通常不要求确认,他们不提供手动或交互式帮助,并且它们的选项简短,经常简短,有时会混淆基于文本的字符串。请注意,它们通常都有很好的文档记录,仅需阅读手册(几乎始终是man <command you are about to run>),并花点时间了解他们将要运行的命令行将执行的操作。

这种操作模式功能强大 -意味着经验丰富的CLI用户可以制作长命令“管道”,这些命令可以用单个命令完成复杂的任务。这是因为任务不会询问“您确定吗?” 在此过程的每一步中,它都会执行所告诉的内容。但是对于不熟悉此模式并且习惯于单击了在线帮助的GUI的用户而言,它并不熟悉且令人恐惧。

但是实际上是否有会使您的计算机崩溃的命令?

您可以使用CLI“崩溃”计算机吗?也许。如果不正确地使用破坏性命令,肯定会导致数据丢失。例如,这里提到的许多答案rm都是删除文件的命令。显然,使用该命令可能会导致数据丢失,这是该命令设计的目的。

正如其他答案所指出的那样,您可以使用命令行在一段时间内使计算机几乎不可用:您可以不经确认就关闭计算机,使流程不经确认就使用100%的可用资源,终止所有程序或破坏您的文件系统。如果确实需要,您可以使用CLI编写内核扩展,该扩展会导致内核崩溃(这是我能想到的最接近“崩溃”的崩溃)。

命令行(通过终端访问)是功能强大的工具。通常,使用终端解决问题要比使用GUI更快。某些解决方案仅可通过终端命令使用。但是,CLI的关键是了解。不要执行您在网上看到的随机命令。阅读手册页并了解命令的作用。如果不确定,请在运行命令之前咨询某人或进一步了解该命令。

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.