正如许多人所知,>>
操作符会将命令的输出附加到您在其后面放置的任何内容。
我知道它可以用于覆盖文件或将数据添加到文件中,但我也知道它可以以恶意方式使用:如果使用驱动器或分区作为输出,则命令的输出将直接写入驱动器,这可能会损坏该驱动器或分区。
例如,根据我的理解,附加>> /dev/sda
到命令会将命令的输出直接附加到/dev/sda
.
出于好奇,我设置了一个 Ubuntu VM,并尝试了这个乐趣。该计算机的虚拟驱动器为/dev/vda
,/dev/vda1
其引导分区为 ,/dev/vda2
根分区为 ,并且没有单独的分区/home
。
现在有趣的部分来了:
echo "Hello world" >> /dev/vda
(以 root 身份)在虚拟机中运行然后重新启动它时,似乎没有任何东西被损坏。重新启动后它启动得很好,之后一切似乎都正常。echo "Hello world" >> /dev/vda1
在同一个虚拟机中运行(也以 root 身份)然后重新启动它时,它无法启动。所以我已经知道为什么写入输出vda1
很糟糕(它损坏了启动分区)。我的问题是:为什么附加输出似乎/dev/vda
没有做任何事情,但附加输出却会/dev/vda1
损害它?是否因为/dev/vda2
位于“之后” /dev/vda1
,因此传递vda
结果会导致命令输出被写入vda2
?
boot ×1