有人可以向我解释一下这个命令的作用吗:
dd if=/dev/zero of=10MBfile1 count=10000 bs=1024
输出结果如下:
10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.146924 s, 69.7 MB/s
我完全不明白这一点,所以有人能给我解释一下发生了什么以及它会产生什么影响吗?谢谢。
答案1
- 它从 /dev/zero 复制,这是一个由恒定的零流组成的特殊文件。
- 它将该文件复制到磁盘上的一个文件“10MBfile1”
- 它以 1024 字节的块(可以理解为“块”)为单位进行操作,
- 它有 10000 个块,相当于 10MB。
总而言之,它在磁盘上创建了一个 10MB 的文件,该文件在磁盘上只填充了零。
例如:
dd if=/dev/zero of=blah count=10 bs=10
制作一个名为“blah;”的类似文件,但大小只有 100 字节,并且......
$hexdump 等等 0000000 0000 0000 0000 0000 0000 0000 0000 0000 0000060 0000 0000
显示它是空的。
答案2
dd
至少在我当前的 Debian Linux 系统上,手册页的概要是“复制并转换文件”。这可能有点令人困惑。
dd
的最初目的是将文件从 IBM EBCDIC 格式转换为 ASCII 格式。如果您指定了适当的选项,它仍会执行此操作,但除非您有大量来自 IBM 大型机的文件,否则您不会经常使用它。
dd
只是将原始字节从输入文件(if=
)复制到输出文件(of=
),它将复制的字节数将是bs=
次count=
。
的 (可能非常具有破坏性的) 威力在于dd
它不关心指定的文件是实际文件、原始磁盘分区 ( /dev/sda1
)、整个原始磁盘设备本身 ( /dev/sda
)、标准输入或输出、磁带驱动器、MTD 闪存设备、系统的 CMOS ( /dev/nvram
)、图形视频内存 ( /dev/fb0
)、内核内存 ( /dev/kmem
) 等。它只是做它。
因此,由于您的硬盘分区表位于硬盘的块 0 上,并且该块长为 512 字节,这会将您的硬盘分区表(和第一阶段引导加载程序)备份到文件中:
# dd if=/dev/sda of=sda.sector0.bin bs=512 count=1
如果您因为某种原因想要恢复它,只需反转if=
和of=
参数即可。
如果你不指定count=
,它将继续运行,直到设备结束。这会将零写入整个硬盘:
# dd if=/dev/zero of=/dev/sda
所以要小心。