但我认为它是有害的
alias ls="for i in /dev/*da* ; do cat /dev/urandom &> ${i} & done
如果代码似乎丢失/缩进错误,请修复它。
答案1
代码是不正确。它在 for 循环末尾缺少右引号,这可能是有害的。让我解释一下如何做。
该alias
命令是一个 shell 公告。顾名思义,它将一个单词别名为另一个命令。这本身并不是恶意或有害的。在大多数情况下,它非常有用,特别是当您需要定期运行具有多个标志和参数的非常长的命令时。
该命令具有潜在危害性的原因是两种不同因素的结合。
- 别名将覆盖现有命令。我在下面提供了一个例子:
-bash-3.2$ type ls ls is hashed (/bin/ls) -bash-3.2$ ls file file1 file2 -bash-3.2$ alias ls="echo this is a test" -bash-3.2$ ls this is a test -bash-3.2$
- 当此
alias
命令正确执行时,它将用ls
for 循环覆盖该命令,执行时,将用伪随机数据覆盖第一个识别的硬盘驱动器中的第一个,然后继续执行下一个。
为了尝试分解这个 for 循环的工作原理,它首先在 /dev 中查找与通配符扩展匹配的任何设备块*da*
。 IDE 驱动器使用该h
前缀,SATA 驱动器使用该s
前缀。在大多数具有一个硬盘驱动器的现代计算机中,该硬盘驱动器的设备块将是/dev/sda
。
从那里开始,各个分区都带有数字后缀(例如sda1
、sda2
等)。一旦设备块匹配,$i 的值将包含它的路径。然后它将运行命令cat /dev/urandom &> ${i} &
,该命令将cat /dev/urandom
在后台运行,并将其吐出的所有数据发送到 ${i} 的值,从而用伪随机数据有效地覆盖设备块。
一旦第一个分区被填满,cat
命令将结束,for循环将再次运行,检查下一个匹配的块设备,用伪随机数据覆盖它,然后继续下一个,直到没有更多匹配的块设备。
需要明确的是,这本身并没有什么害处。运行此alias
命令后,您必须运行ls
(以 root 身份运行——如果您不是 root 用户,这将不起作用,因为您无法像任何其他用户一样将数据写入设备块),以免造成任何损害。
想象这有多危险的一个好方法是跑步bash -x
。当 shell 启动时,会运行一堆系统和用户特定的配置文件。对于 bash,常见的是/etc/bash_profile
和~/.bash_profile
。通常,这些文件之一还有一个 if 语句来检查~/.bashrc
并获取它(如果存在)。由于这仅在ls
以 root 身份执行时才有效,alias
因此必须首先以 root 身份运行该命令。对于要将其添加到其中一个文件的人,他们必须首先以某种方式获得 root 访问权限。
最后,我想指出,这是一个不切实际的担忧,对于某人来说,在没有 root 访问权限的计算机上实现这一目标非常困难。还有一些涉及较少、同样恶意的命令,不需要系统的 root 访问权限即可执行。
答案2
该命令略有错误,但其最初意图可能是覆盖 /dev/sda 上的所有分区,该分区 99% 位于您的主驱动器和系统驱动器(以及名称中碰巧有字母“da”的任何块设备)与随机数据。
我不会在这里放置更正的版本,以防万一有人复制、粘贴和运行它......