4. パイプと tee

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 つのことを行います。

  1. /etcディレクトリの内容をリストします。
  2. その出力をteeにパイプし、コピーをetc_listing.txtに保存し、同時にそれを渡します。
  3. teeからの出力はgrepにパイプされ、「conf」を含む行がフィルタリングされます。

これらのコマンドを習得すると、コマンドラインでの効率が大幅に向上します。

ログインして学習進捗を保存

サインイン

演習

練習あるのみです!入力/出力のリダイレクトとパイプラインの理解を深めるための実践的なラボを次に示します。

  1. Linux における入力と出力のリダイレクト - 演算子(>>>2>など)とteeコマンドを使用して標準出力(stdout)、標準エラー(stderr)、標準入力(stdin)を操作することにより、コマンドからのデータフローを制御する練習をします。
  2. シーケンス制御とパイプライン - コマンド実行シーケンスを制御し、パイプラインを活用し、cutgrepwcsortuniqなどの強力なテキスト処理ツールを利用する方法を学びます。
  3. データストリームのリダイレクト - 標準入力、出力、エラー ストリームの操作、出力の結合、/dev/nullの利用を含む、Linux ストリームリダイレクトの技術を学びます。

これらのラボは、パイプとリダイレクトの概念を実際のシナリオに適用し、コマンドラインでのデータ操作に対する自信を構築するのに役立ちます。

クイズ

Linux コマンドでパイプ演算子を表す単一の文字は何ですか?記号のみで回答してください。