このdstat出力行はどのioストリームに移動しますか?

このdstat出力行はどのioストリームに移動しますか?

dstatカーネル2.6 CentOS 6 64ビットで実行するとき。次の結果が表示されます。

# sed -n '4p' <(dstat -dl --float --nocolor 1 1) | awk -F '|' '{print $1,$2}' | awk '{print $1,$2,$3}'
Module dstat_disk24old failed to load. (No suitable block devices found to monitor)
0 0.01 0

興味深い点は次の通りです。

Module dstat_disk24old failed to load. (No suitable block devices found to monitor)

| grep -v failedまたはを追加すると、2> /dev/nullこの行はフィルタリングされません。を追加すると、> a.txtこの行もa.txtに移動しません。それでは、この行が画面に印刷されても、どのストリームに行くのか知りたいです。

ベストアンサー1

標準エラーが発生し、デフォルトはファイル記述子 2 です。にある間は、cmd1 | cmd2の標準のみのcmd1標準にリダイレクトされますcmd2

通常、すべてのエラーおよび診断メッセージは標準エラーに移動されます。

以下を使用して確認できますstrace

$ strace -e write dstat -dl --float --nocolor 1 1
write(2, "Module dstat_disk24old failed to"..., 83Module dstat_disk24old failed to load. (No suitable block devices found to monitor)) = 83
write(2, "\n", 1
)                       = 1
write(1, "\33[7l---load-avg---\n 1m   5m  15m"..., 34---load-avg---
 1m   5m  15m 
) = 34
write(1, "   0    0    0\n", 15   0    0    0
)        = 15
write(1, "   0    0    0\n", 15   0    0    0
)        = 15
+++ exited with 0 +++

パイプが標準エラー出力をキャプチャするには、標準エラーを標準出力にリダイレクトする必要があります。

dstat -dl --float --nocolor 1 1 2>&1

おすすめ記事