tail -f とかでログの書き込みをモニタリングしていると、grep や sed などを使うことがありますが、このようなコマンドをパイプでつなげてフィルタリングするとログファイルがどんどん追記されてもリアルタイムに結果が表示されなくなります。そんな時は、stdbuf でバッファリングのモードを切り替えることでリアルタイムにログを表示させることができます。
stdbuf とは
UNIX/Linux の stdbuf コマンドは、任意のコマンドのバッファリングのモードを変更して実行するコマンドです。
任意のコマンドのバッファリングを無効にして即座に画面に結果を出力するときに使います。
バッファリングとは
バッファとは、データの一時的な保存場所という意味で使用しています。
バッファリングとは、バッファにデータを一時的に保存しておくことで、処理速度の向上を目的としているという認識です。
使い方
stdbuf コマンドの有無
コマンドの実例です。
本件では、stdbuf コマンドを使ってバッファリングを行単位で処理させるというイメージです。
stdbuf コマンド:無
$ tail -f sample.log | grep ERROR | sed 's/aaa/bbb'
stdbuf コマンド:有
$ tail -f sample.log | stdbuf -oL grep ERROR | sed 's/aaa/bbb'
オプション
自分がよく使う(把握している)オプションです。
- -o0:標準出力をバッファリングなしと
- -oL:標準出力を行バッファリング
- -e0:標準エラー出力をバッファリングなし
- -eL:標準エラー出力を行バッファリング