Linuxにはパイプ(|)とリダイレクト(>・>>)という仕組みが備わっており、複数のコマンドをつなげたり、結果をファイルへ書き出したりを自在に組み合わせられます。
この記事では、WSL2(Ubuntu 24.04)とVPS環境で動作確認した手順をもとに、パイプとリダイレクトの基本から実務でよく使う組み合わせまでを初心者向けに解説します。
この記事のポイント
・パイプ(|)で出力を次のコマンドへ渡せる
・>で上書き保存、>>でファイルに追記できる
・2>でエラー出力だけ別ファイルに保存できる
・grep・sort・wcとの連携で実務力がつく
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
パイプとリダイレクトが必要な理由
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 ファイル名 |
ls | grep キーワード と コマンド > ファイル名 の2パターンを反射的に使えるようにしてみてください。この2つだけで実務のほとんどの場面に対応できます。次のステップとして、実務で役立つ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に渡すコツ(トラブルシューティング)
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:Linuxのコマンド履歴(history)入門|Ctrl+Rで検索して再実行する方法
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます