web-dev-qa-db-ja.com

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
rookie_senior

別のコマンドの前後にパイプラインにddを挿入できるようにするために、その情報メッセージは標準出力ではなく標準エラーに書き込まれます。

ddのOpenBSDマニュアル はこれについて明示的に言及しています(しかし buntuマニュアル はこの事実を省略しているようですが、より完全なinfoページで言及しています):

終了すると、ddは、標準エラー出力への完全および部分的な入力および出力ブロックと切り捨てられた入力レコードの数を表示します。

コマンドから標準エラーをリダイレクトするには、2>filenameを使用します。標準エラーストリームを切り捨てずに既存のファイルに追加するには、2>>filenameを使用します。

例えば:

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

最初の例(>>を使用)の出力の追加と2番目の例(teeを使用)の出力の切り捨てを混在させていることに注意してください。 teeを含むファイルに追加するには、tee -aを使用します。

3
Kusalananda

dd出力は実際にはstderrではなくstdoutに出力されます

次のようにして、stderrddコマンドのファイルにリダイレクトできます。

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

2
imbuedHope