这个复杂的 tr 命令有什么作用?

这个复杂的 tr 命令有什么作用?
tr '\0' '\071' < /dev/zero | dd of=/dev/sda bs=1M conv=fsync 2>/dev/null

该命令在将磁盘清零的 dd 命令之后立即运行。它改变了十六进制转储输出

0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
7745d6000

0000000 3939 3939 3939 3939 3939 3939 3939 3939
*
7745d6000

但我无法弄清楚该命令到底要完成什么

答案1

让我们把它分开:

tr '\0' '\071' < /dev/zero

从 读取/dev/zero,产生零字节,并将所有零字节 ( '\0') 替换为八进制中包含 71 的字节 ( '\071'),IEASCII 中的数字 9 或十六进制中的 0x39(这就是hexdump显示的内容)。结果是一个永无止境的 0x39 字节流。

dd of=/dev/sda bs=1M conv=fsync 2>/dev/null

获取此输入(全部为 9)并将其写入/dev/sda,一次 1 MB,确保数据在完成之前写出。

dd/dev/sda当到达;的末尾时停止这tr也会导致停止(它无法再写入管道并停止)。

据推测,其目的是掩盖驱动器上先前存在的任何数据;这是否真的有用是另一回事。

答案2

但我无法弄清楚该命令到底要完成什么

它将空字节替换为 071 (0x39 57 00111001) 字节。不知道它有什么用处。

通常,如果您想检查驱动器运行状况,您可以使用其他模式,例如

00000000 0000  0x0
11111111 0377 0xFF
01010101 0125 0x55
10101010 0252 0xAA

所有这些值都被使用,例如badblocks

相关内容