如何将 dd 状态/结果消息写入文件?

如何将 dd 状态/结果消息写入文件?

我使用此dd命令来检查磁盘速度:

dd if=/dev/zero of=/path/file bs=1G count=1 oflag=direct

它返回这样的内容:

1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 8,52315 s, 126 MB/s

现在我想通过管道传输此输出,而不是dd正在写入的文件,而是传输到一个单独的文件。

我尝试添加

>> /tmp/foo

或者

| sudo tee /tmp/foo

命令dd,但这只是创建一个空文件。

答案1

为了能够dd在另一个命令之前或之后插入管道,其信息性消息将写入标准错误而不是标准输出。

OpenBSD 手册dd明确提到这一点(但是Ubuntu 手册似乎忽略了这一事实,但在更完整的info页面中提到了它):

完成后,dd显示完整和部分输入和输出块以及截断的输入记录的数量标准错误输出

要从命令重定向标准错误,请使用2>filename.要将标准错误流附加到现有文件而不截断它,请使用2>>filename.

例如:

dd if=/dev/zero of=/path/file bs=1G count=1 oflag=direct 2>dd.txt

请注意,您将第一个示例中的附加输出(使用>>)与第二个示例中的截断输出(使用tee)混合在一起。要使用 附加到文件tee,请使用tee -a.

答案2

dd输出实际上打印stderrstdout

您可以重定向stderr到命令的文件,dd如下所示:

$ dd if=/dev/zero of=/path/file bs=1G count=1 oflag=direct 2>> /path/to/file

相关内容