Linuxコマンド.NETLinuxコマンド.NETLinuxコマンドを中心にIT技術関係の情報を発信します。Linuxコマンドについてはできるだけ実行例と実行結果を紹介したいと思います。LinuxコマンドstdbufコマンドはI/Oストリームのバッファリングを修正してコマンドを実行することができます。-f'等のプログラムが終了せずに内容を表示し続けるコマンドをパイプを通してフィルタして、さらにパイプを通すとき内容がバッファリングされてなかなか端末に表示がされない場合があります。そのようなときにstdbufコマンドでバッファリングを調整することで、すぐに端末に表示できるようにできます。参考I/Oストリームのバッファリングについてバッファリングには3つのタイプがあります。buffered)出力のストリームがバッファをしない場合は、ファイルや端末に内容がすぐに書き込まれます。ブロックバッファの場合は、ある程度の内容が蓄えてから、ファイルや端末に内容が書き込まれます。ラインバッファの場合は、改行コードまでの内容を蓄えてから、または標準入力から入力を読み込むまで、ファイルや端末に内容が書き込まれます。基本的に、全てのファイルはブロックバッファを利用して、バッファリングが行われます。(通常の標準出力のような)端末を参照したストリームの場合はラインバッファになります。stderrはデフォルトではバッファをしません。等)stdbufコマンドはdd、cat、teeコマンドのI/Oストリームのバッファリングを調整できません。出力ストリームを調整(-oオプション)-oオプションを指定して、stdbufコマンドを利用すると出力ストリームのバッファリングを調整することができます。-f'等でログを表示し、パイプを通してcutやuniq等のフィルタコマンドを利用する場合に使用できます。下のコマンド例はstdbufコマンドのmanページの例にあるコマンドになります。これはアクセス解析などの結果がすぐに表示される例になります。-fのコマンドはバッファをすぐに書き出します。このコマンドでstdbufコマンドを利用している理由は、cutコマンドの出力をパイプに通すとき、元々のパイプへの出力がブロックバッファですぐにcutコマンドの出力がuniqコマンドに渡されず、ボトルネックのような状態だったためです。これをラインバッファに切り替えるとcutコマンドの出力が一行ごとにuniqコマンドへ渡されるようになります。そのあとのuniqコマンドへの出力は、端末でラインバッファになるので、上のコマンド例は結果がすぐに表示されるようになります。入力ストリームを調整(-iオプション)入力ストリームの調整は、コマンドへの入力をどのくらいとるかを調整することができます。sedコマンドを複合コマンドとして利用する場合に分かりやすいです。以下のコマンドの出力は3行になります。'aaa\nbbb\nccc\n'aaabbbcccこれに以下の複合コマンドを利用すると出力が一行になります。)aaaこれは、最初のsedコマンドで全ての内容が入力のブロックバッファとして利用され、そのあとのsedコマンドに対して、入力が残っていないためになります。最初のsedコマンドに対してstdbufコマンドを利用すると、入力のバッファリングをしないように調整すると2行目が表示されます。)aaabbb同様に2つ目のsedコマンドに対して、入力のバッファリングを調整すると3行目が表示されます。)aaabbbcccsedコマンドには入力のバッファリングを調整するオプションとして-uオプションがあります。)aaabbbcccバッファは4096バイトに設定されていることが多いです。これを意識すると下のコマンド例でもう少し入力のバッファリングを意識できるかもしれません。8バイトを繰り返し入力するためにyesコマンドを使用し、何回繰り返すかをheadコマンドを用いてみます。)abcdefg1行が表示されます。yesコマンドで繰り返している8バイトは改行コードを含めて、8バイトになるため、7文字で設定されています。)abcdefgabcdefg2行目が表示されます。)abcdefgabcdefgabcdefg3行目が表示されます。Linuxコマンドでバッファリングについて意識することはあまりないかもしれませんが、覚えておくとよいかもしれません。コメントをキャンセルメールアドレスが公開されることはありません。*次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。Linuxコマンド.NET.。