Linuxのパイプとリダイレクト入門|コマンドをつなげて処理を効率化する方法をWSL2・VPSで解説

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > Linuxのパイプとリダイレクト入門|コマンドをつなげて処理を効率化する方法をWSL2・VPSで解説
「コマンドの実行結果を次のコマンドに渡せないか」「ログをそのままファイルに保存しておきたい」と思ったことはありませんか?
Linuxにはパイプ(|)とリダイレクト(>・>>)という仕組みが備わっており、複数のコマンドをつなげたり、結果をファイルへ書き出したりを自在に組み合わせられます。

この記事では、WSL2(Ubuntu 24.04)とVPS環境で動作確認した手順をもとに、パイプとリダイレクトの基本から実務でよく使う組み合わせまでを初心者向けに解説します。

この記事のポイント

・パイプ(|)で出力を次のコマンドへ渡せる
・>で上書き保存、>>でファイルに追記できる
・2>でエラー出力だけ別ファイルに保存できる
・grep・sort・wcとの連携で実務力がつく


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

パイプとリダイレクトが必要な理由

Linuxのコマンドは「1つのことをうまくやる」という設計になっています。例えば、lsはファイル一覧を表示するだけ、grepは文字列を検索するだけです。でも現場では「ファイル一覧から特定の名前だけ絞り込みたい」「エラーログだけ別のファイルに保存したい」という場面が山ほど出てきます。

そこで登場するのがパイプとリダイレクトです。シンプルなコマンドをつなぎ合わせることで、複雑な処理を実現できます。

動作確認環境:
・Ubuntu 24.04 LTS(WSL2 / VPS 共通)
・bash 5.2.21

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

1. パイプの基本的な使い方

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

# 書式 コマンドA | コマンドB # /etc配下のファイル一覧からpasswdを検索する $ ls /etc | grep passwd passwd passwd- shadow shadow-

ls /etcの出力がそのままgrep passwdの入力になります。ターミナルには「passwd」を含む行だけが表示されます。

2. パイプを複数つなげる

パイプはいくつでもつなげられます。左から右へ順番に処理が流れていくイメージです。

# /var/logにある.logファイルの数を数える $ ls /var/log | grep '\.log$' | wc -l 18

手順は以下の通りです。
ls /var/log:ファイル一覧を出力
grep '\.log$':.logで終わる行だけ絞り込む
wc -l:残った行数を数える

3. ログを絞り込んで確認する(実務の定番)

Webサーバーのエラーログから重大なエラーだけ取り出す例です。

# Nginxのエラーログからcritを含む行だけ取り出す $ sudo cat /var/log/nginx/error.log | grep crit 2026/09/01 09:15:32 [crit] 1234#1234: *5678 connect() to 127.0.0.1:8080 failed (111: Connection refused) while connecting to upstream, client: 203.0.113.5, server: example.com # 件数も確認する $ sudo cat /var/log/nginx/error.log | grep crit | wc -l 3

tail -fと組み合わせれば、リアルタイムでログを追いながら特定キーワードだけ表示できます。

# tail -fとgrepでエラーログをリアルタイム監視 $ sudo tail -f /var/log/nginx/error.log | grep crit

リダイレクト(>・>>・<):結果をファイルに保存する

1. 標準出力をファイルに書き出す(>)

コマンドの結果をファイルに保存するには > を使います。ファイルが存在すれば上書き、なければ新規作成されます。

# システム情報をファイルに書き出す $ uname -a > sysinfo.txt # 内容を確認 $ cat sysinfo.txt Linux vps01 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:11:00 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

注意:>は既存のファイルを上書きします。誤って重要なファイルを消してしまわないよう、書き出し先のファイル名には気をつけてください。

2. ファイルに追記する(>>)

既存のファイルに追記するには >> を使います。ファイルの内容を保持したまま末尾へ追加できます。

# 現在日時を記録ファイルに追記し続ける $ date >> check_log.txt $ date >> check_log.txt $ cat check_log.txt 2026年 9月 6日 日曜日 09:00:00 JST 2026年 9月 6日 日曜日 09:01:00 JST

>>>の違いは次の通りです。
>:ファイルを上書き(既存の内容がすべて消える)
>>:ファイルの末尾に追記(既存の内容は保持される)

3. ファイルをコマンドの入力として使う(<)

<を使うと、ファイルの内容をコマンドの入力として渡せます。

# iplist.txtの内容をsortコマンドに渡す $ cat iplist.txt 192.168.1.100 10.0.0.5 172.16.0.1 $ sort < iplist.txt 10.0.0.5 172.16.0.1 192.168.1.100

実際には sort iplist.txt のようにファイル名を直接指定することが多いですが、<を使う書き方もリダイレクトの基本として覚えておきましょう。

標準エラー出力(2>):エラーだけを別ファイルに保存する

Linuxのコマンドには3種類の出力経路があります。
・標準入力(stdin):キーボードやファイルからの入力
・標準出力(stdout):正常な処理結果の出力先(番号は1)
・標準エラー出力(stderr):エラーメッセージの出力先(番号は2)

>は標準出力だけをリダイレクトします。エラーメッセージは画面に表示され続けます。エラーもファイルに保存したい場合は 2> を使います。

# エラーを別ファイルに保存する $ ls /存在しないパス 2> error.log $ cat error.log ls: '/存在しないパス' にアクセスできません: そのようなファイルやディレクトリはありません # 標準出力とエラーを同じファイルにまとめる(2>&1) $ ls /var/log /存在しないパス > output.log 2>&1 $ cat output.log ls: '/存在しないパス' にアクセスできません: そのようなファイルやディレクトリはありません /var/log: apt auth.log bootstrap.log

2>&1は「標準エラー出力(2)を標準出力(1)と同じ場所に送る」という意味です。ログを1ファイルにまとめたいときに使います。

実務で役立つパイプ・リダイレクトの組み合わせ

1. 画面に表示しながらファイルにも保存する(tee)

teeコマンドを使うと、出力をファイルに保存しつつ画面にも表示できます。作業ログを残しながら進捗を目視確認したいときに重宝します。

# psの出力をファイル保存しながら画面にも表示 $ ps aux | grep nginx | tee nginx_process.txt root 1234 0.0 0.1 55164 2048 ? Ss 09:00 0:00 nginx: master process /usr/sbin/nginx www-data 1235 0.0 0.1 55636 3072 ? S 09:00 0:00 nginx: worker process

2. アクセスログのIP集計(sort + uniq -c)

アクセスログから接続元IPアドレスの件数を集計する例です。

# アクセスログの1列目(IPアドレス)を抽出して件数順にソート $ sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -5 87 203.0.113.5 42 198.51.100.10 35 192.0.2.33 21 10.0.0.5 8 172.16.0.1

3. root権限が必要なファイルへの書き込み(sudo tee)

sudo echo "設定" > /etc/app.confのように書くと、リダイレクト先のファイル書き込みは一般ユーザー権限で実行されるため、Permission deniedになります。このときはteeにsudoをつける方法が正解です。

# NG:sudoはechoにしか適用されない $ sudo echo "ServerName example.com" > /etc/apache2/apache2.conf bash: /etc/apache2/apache2.conf: Permission denied # 正しい方法:teeにsudoをつける $ echo "ServerName example.com" | sudo tee -a /etc/apache2/apache2.conf ServerName example.com

よくあるトラブルと対処法

「>でファイルが空になってしまった」

>はファイルを上書きするため、grep "error" logfile.txt > logfile.txtのように同じファイルを読みながら書き込もうとすると中身が空になります。

# NG例:同じファイルを読みながら書き込もうとすると中身が消える $ grep "error" logfile.txt > logfile.txt $ wc -l logfile.txt 0 logfile.txt

別ファイルに保存してから置き換えるのが安全です。

# 正しい例:別ファイルに保存してから置き換える $ grep "error" logfile.txt > logfile_filtered.txt $ mv logfile_filtered.txt logfile.txt

「2>&1はどこに書けばいいか分からない」

2>&1は必ずリダイレクトの後ろに書きます。順序が逆だと期待通りに動きません。

# 正しい順序 $ command > output.log 2>&1 # 誤った順序(エラーが画面に出てしまう) $ command 2>&1 > output.log

本記事のまとめ

やりたいこと コマンドの書き方
コマンドAの出力をコマンドBへ渡す コマンドA | コマンドB
結果をファイルに上書き保存する コマンド > ファイル名
結果をファイルの末尾に追記する コマンド >> ファイル名
ファイルの内容をコマンドの入力にする コマンド < ファイル名
エラーを別ファイルに保存する コマンド 2> error.log
標準出力とエラーを同じファイルにまとめる コマンド > output.log 2>&1
画面表示しながらファイルにも保存する コマンド | tee ファイル名
root権限が必要なファイルに書き込む コマンド | sudo tee ファイル名
パイプとリダイレクトは、Linuxを使い始めた初心者が最初に「なるほど」と感じる瞬間の1つです。まずは ls | grep キーワードコマンド > ファイル名 の2パターンを反射的に使えるようにしてみてください。この2つだけで実務のほとんどの場面に対応できます。

次のステップとして、実務で役立つLinux技術をさらに深めましょう。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンドを「なんとなく打つ」段階から卒業したい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>

次に読む記事

パイプとリダイレクトを身につけたら、次は実務で役立つLinux技術を深めましょう。

Linuxのファイル権限完全ガイド|chmod・chown・umaskの基礎と実務でよく使う設定(ファイル権限・セキュリティ)
Linuxサーバーの初期セキュリティ設定チェックリスト|公開直後にやるべき10項目を実機で解説(サーバーセキュリティ設定)
Rocky Linuxサーバーを構築する手順|最小インストールから初期設定・Webサーバー公開まで(サーバー構築ハンズオン)
シェルスクリプトのバッチ処理設計|大量ファイルの進捗管理と途中再開を実装する方法(シェルスクリプト自動化)
Linuxサーバーのネットワーク設定をsystemd-networkdで管理する方法(ネットワーク診断・設定)
・mkfsコマンドでLinuxのファイルシステムを作成する方法|ext4・xfsの使い分けとfstab設定も(ファイルシステム・ストレージ管理)
AIにLinuxトラブルを解析させる方法|journalctl・dmesgのログをChatGPT・Claudeに渡すコツ(トラブルシューティング)

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。