パイプとリダイレクトを理解することで、複数のコマンドを組み合わせた強力な処理が書けるようになります。 Linuxの「小さなツールを組み合わせる」という哲学の核心がここにあります。
リダイレクトで出力をファイルに保存する
コマンドの出力を画面ではなくファイルに書き込むには > を使います。
ls -la > files.txt
ファイルが存在する場合は上書きされます。>> を使うと既存のファイルに追記できます。
echo "new entry" >> diary.txt
標準エラー出力もリダイレクトする
通常の > はエラー出力(stderr)をリダイレクトしません。エラーも含めてファイルに書き込むには 2>&1 を使います。
command > output.txt 2>&1
ファイルを入力として使う
< を使うと、ファイルの内容をコマンドの標準入力として渡せます。
sort < unsorted.txt
パイプでコマンドをつなぐ
|(パイプ)を使うと、あるコマンドの出力を次のコマンドの入力として渡せます。
ls -la | grep ".txt"
複数のコマンドをつなぐ
パイプは何本でも連結できます。データが左から右へ流れるイメージです。
# アクセスログから404エラーの件数を数える
cat access.log | grep "404" | wc -l
# プロセス一覧からnginxを探す
ps aux | grep nginx | grep -v grep
# ディレクトリ内のファイルをサイズ順に並べて上位5件表示
du -sh * | sort -rh | head -5
tee:パイプしながらファイルにも保存
tee コマンドを使うと、出力を画面に表示しながらファイルにも書き込めます。
make 2>&1 | tee build.log