了解 Linux 中的 dd 命令

了解 Linux 中的 dd 命令

有人可以向我解释一下这个命令的作用吗:

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

所以要小心。

相关内容