我使用此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
输出实际上打印stderr
不stdout
您可以重定向stderr
到命令的文件,dd
如下所示:
$ dd if=/dev/zero of=/path/file bs=1G count=1 oflag=direct 2>> /path/to/file