Linux では、コマンドを接続し始めると、コマンドラインは信じられないほど強力になります。あるコマンドを実行し、その出力を保存してから別のコマンドを実行するのではなく、パイプラインを作成してデータを直接それらの間で渡すことができます。
パイプ演算子の理解
まず、大量の出力を生成するコマンドから始めましょう。
ls -la /etc
リストは画面に収まりきらず、読みにくい可能性があります。この出力をファイルにリダイレクトすることもできますが、より効率的な方法は、lessのような別のコマンドに直接送信して簡単に表示することです。
ls -la /etc | less
縦棒(|)で表されるパイプ演算子は、このプロセスの鍵となります。これは、左側のコマンドの標準出力(stdout)を取得し、それを右側のコマンドの標準入力(stdin)として使用します。この場合、ls -la /etcの出力をlessコマンドに直接パイプしました。パイプは、常に使用する基本的なツールです。
Tee コマンドによる出力の分割
画面に結果を表示しかつ同時にファイルに保存したい場合はどうでしょうか?ここでteeコマンドが登場します。Linux でのパイプと tee コマンドは、ロギングと監視のための古典的な組み合わせです。
ls | tee peanuts.txt
これを実行した後、ターミナルにlsの出力が表示されます。また、peanuts.txtの内容を確認すると、全く同じ情報が含まれていることがわかります。teeコマンドは、出力ストリームを 2 つの方向(標準出力への 1 つと指定されたファイルへのもう 1 つ)に効果的に分割します。
パイプと Tee の組み合わせ
これらのコマンドを連鎖させることで、さらに高度なワークフローを作成できます。一般的なパターンは、より長いコマンドチェーンの途中でteeにパイプすることです。これにより、データをさらに処理しながら中間結果を保存できます。
例えば、Linux のパイプと tee の組み合わせを使用して、さらにフィルタリングする前に出力を表示して保存できます。
ls -la /etc | tee etc_listing.txt | grep "conf"
このコマンドは 3 つのことを行います。
/etcディレクトリの内容をリストします。- その出力を
teeにパイプし、コピーをetc_listing.txtに保存し、同時にそれを渡します。 teeからの出力はgrepにパイプされ、「conf」を含む行がフィルタリングされます。
これらのコマンドを習得すると、コマンドラインでの効率が大幅に向上します。