パイプ・リダイレクト

にメンテナンス済み

Linux コマンドの力が大きく広がるのが、パイプとリダイレクトです。 コマンドの出力を別のコマンドに渡したり、ファイルへ保存したりすることで、複雑な処理を一行で実現できます。

ブラウザでコマンド出力を試す

以下の端末ではコマンドの出力を確認できます。 cat projects/app.log でログファイルの内容を、echo "hello world" でテキスト出力を試してみてください。 実際のターミナルではここで確認した出力をパイプやリダイレクトに渡すことができます。

コマンド出力を確認する

シミュレーター

cat や echo で出力を確認してみましょう。実際のターミナルでは | や > を使ってこの出力をさらに加工できます。cat projects/app.log や echo hello などを入力してください。

ターミナルを読み込み中...

パイプ(|)で出力を次のコマンドへ渡す

|(パイプ)は、左側のコマンドの出力を右側のコマンドの入力として渡します。

ログからエラーだけ抽出する
cat app.log | grep "ERROR"

上のコマンドは cat app.log の出力を grep に渡し、ERROR を含む行だけを表示します。

パイプは何段でもつなげられます。

エラーを絞り込んで件数を数える
cat app.log | grep "ERROR" | wc -l

wc -l は行数を数えるコマンドです。 ログにエラーが何件あるかを一発で確認できます。

よく使うパイプの組み合わせ

組み合わせ用途
cmd | grep "文字列"出力から特定の行を絞り込む
cmd | sort出力を並び替える
cmd | sort | uniq重複を除いて並び替える
cmd | wc -l出力の行数を数える
cmd | head -20先頭 20 行だけ表示する
cmd | tail -20末尾 20 行だけ表示する
cmd | less長い出力をスクロールして読む

リダイレクト(>)で出力をファイルに保存する

> を使うと、コマンドの出力をファイルに書き込めます。

ディレクトリ一覧をファイルに保存
ls -l > filelist.txt

filelist.txt が存在しない場合は新規作成され、存在する場合は上書きされます。

エラーだけ別ファイルに保存
grep "ERROR" app.log > errors.txt

ログを定期的に解析するスクリプトなどでよく使われます。

追記リダイレクト(>>)でファイルに追記する

>> は既存ファイルの末尾に追記します。上書きしたくない場合に使います。

ログに追記する
echo "処理完了: $(date)" >> task.log

スクリプトで処理ごとにログを記録していく場面に便利です。

複数ファイルをまとめる
cat server1.log >> all.log
cat server2.log >> all.log

複数のログを一つのファイルに集約する用途にも使えます。

入力リダイレクト(<)でファイルの内容をコマンドへ渡す

< は、ファイルの内容をコマンドの標準入力として渡します。

ファイルの行数を数える
wc -l < access.log

パイプと似た用途ですが、コマンドによっては引数指定よりも動作が変わる場合があります。

標準エラー出力のリダイレクト(2>)

コマンドの出力には「標準出力(stdout)」と「標準エラー出力(stderr)」の 2 種類があります。 > は標準出力だけを保存し、エラーメッセージは画面に表示されます。 エラーを別ファイルに保存したい場合は 2> を使います。

エラーメッセージをファイルに保存
./script.sh 2> error.log

正常な出力とエラーを別々のファイルに保存するには、次のように書きます。

出力とエラーを別々に保存
./script.sh > output.log 2> error.log

標準出力とエラーを同じファイルに保存したい場合は 2>&1 を使います。

出力とエラーをまとめて保存
./script.sh > all.log 2>&1

2>&1 は「標準エラー出力(2)を標準出力(1)と同じ場所へ向ける」という意味です。

パイプとリダイレクトを組み合わせる

パイプとリダイレクトは一緒に使えます。

エラー行を絞り込んでファイルに保存
grep "ERROR" app.log | sort | uniq > unique_errors.txt

この一行で、ログからエラー行を絞り込み、重複を除いて、ファイルに保存できます。

実行結果をリアルタイムに確認しながら保存する
./long_script.sh | tee output.log

tee は、入力をそのまま画面に表示しつつ、ファイルにも保存する特殊なコマンドです。 長時間かかる処理を画面で見ながら記録したい場面に使えます。

まとめ

  • |: 出力を次のコマンドに渡す(パイプ)
  • >: 出力をファイルに上書き保存する
  • >>: 出力をファイルに追記する
  • <: ファイルをコマンドの入力に使う
  • 2>: エラー出力をファイルに保存する
  • 2>&1: エラー出力を標準出力と同じ先に向ける

パイプとリダイレクトを使いこなすと、個別のコマンドを組み合わせて強力な処理を一行で書けるようになります。 grepsortwcheadtail などと合わせて習得すると、ログ解析や日常の作業が大幅に効率化できます。

#Linux #Bash #pipe #redirect #shell