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
答え2
この>
ファイルリダイレクタは標準出力で動作します。 grepも見えないと言われましたが、標準エラーだと思いますか?実際にstderrであることを確認してキャプチャするには、次のようにします。
yourlongcommand 2> error.log
error.logを確認してください。