「エラーメッセージだけを別のファイルに残したい」
Linuxを触り始めた人が、最初にぶつかる壁がこれです。
この記事では、Linuxのリダイレクトとパイプについて、完全初心者向けに図解と手順で解説します。
ターミナルの使い方に少し慣れてきた段階で読むと、コマンドの世界が一気に広がります。
この記事のポイント
・リダイレクト「>」でコマンドの結果をファイルに保存できる
・パイプ「|」で前のコマンドの出力を次のコマンドに渡せる
・「2>」でエラーだけ、「&>」で全部をファイルに書ける
・組み合わせれば「大量のログから必要な行だけ抽出」も一発
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜリダイレクトとパイプを覚えるのか
Linuxのコマンドは、ひとつひとつが小さな道具です。ひとつで完結するものは少なく、つなげて使うことで本来の力を発揮します。
そのつなぎ役がリダイレクトとパイプです。
この2つを理解すると、次のようなことが1行でできるようになります。
・ディレクトリ一覧をテキストファイルに保存する
・ログから特定のキーワードを含む行だけ取り出す
・エラーメッセージだけを別ファイルに記録する
・コマンド結果を画面で見つつ、同時にファイルにも残す
コピペや手作業で頑張っていた作業が、一気に自動化の入り口に変わります。
まずはリダイレクト「>」で結果をファイルに保存する
リダイレクトは「出力先を切り替える」機能です。普段、コマンドの結果は画面(ターミナル)に表示されますが、これをファイルに向け直せます。
1. ls の結果をファイルに書き出す
ホームディレクトリの一覧を、file.txtというファイルに保存してみます。# カレントディレクトリの一覧をファイルに保存 $ ls > file.txt # 中身を確認 $ cat file.txt Desktop Documents Downloads Pictures file.txt
画面には何も表示されません。これで正常です。
2. 上書きと追記の違いを覚える
ここが初心者のつまずきポイントです。・>(上書き):毎回ファイルを空にしてから書き込む
・>>(追記):既存の中身は残したまま末尾に書き足す
# 上書き(以前のfile.txtの内容は消える) $ date > file.txt # 追記(前の内容の下に日時が追加される) $ date >> file.txt
一度実行するとファイルの中身は戻ってこないので注意してください。
残したい場合は必ず「>>」を使うクセをつけてください。
3. エラーメッセージだけをファイルに分ける
Linuxの出力には、実は2つの流れがあります。・標準出力(1):正常な結果
・標準エラー出力(2):エラーメッセージ
「2>」を使うと、エラーだけを別のファイルに書き出せます。
# 存在しないファイルをlsした場合 $ ls /not_exist_dir 2> error.log # error.logにエラーだけ記録される $ cat error.log ls: cannot access '/not_exist_dir': No such file or directory
# 正常出力もエラーも all.log に全部入れる $ ls /etc /not_exist_dir &> all.log
パイプ「|」でコマンドをつなげる
パイプは「前のコマンドの結果を、次のコマンドの入力に渡す」機能です。記号は縦棒「|」。キーボードでは Shift + ¥(円マーク)で入力します。
1. ファイル一覧を less で1画面ずつ見る
/etcディレクトリのように、ファイル数が多すぎて画面からあふれてしまう場合があります。そのままlsするとスクロールが追いつきません。
# lsの結果をlessに渡して、1画面ずつ表示する $ ls /etc | less
パイプで渡せば、どんなコマンドの結果にも使えます。
2. grep と組み合わせて「必要な行だけ」抜き出す
パイプの真価が出るのがgrepとの組み合わせです。grepは「指定した文字を含む行だけを表示する」コマンドです。
# 起動中のプロセスから「nginx」を含む行だけ表示 $ ps aux | grep nginx # /etc配下のファイルからconfを含むファイル名だけ表示 $ ls /etc | grep conf
3. wc -l で行数を数える
パイプは何段でもつなげられます。# /etc配下のファイル数を数える $ ls /etc | wc -l # ログの中で「error」を含む行数を数える $ cat /var/log/syslog | grep error | wc -l
リダイレクトとパイプを組み合わせる
ここまで来たら、両方を一緒に使えます。# syslogからerrorを含む行を抽出して、result.txtに保存 $ cat /var/log/syslog | grep error > result.txt # psの結果から特定プロセスを抜き出して追記保存 $ ps aux | grep nginx >> nginx_check.log
調査系の作業はほぼこの形で済むと言ってもいいくらいです。
AIと組み合わせると学習がさらに加速する
リダイレクトとパイプは、組み合わせ次第で無数のパターンが生まれます。最初は「こういうときどう書くの?」と迷いますが、ここでAIツールが役に立ちます。
ChatGPTやGitHub Copilotに、次のように聞いてみてください。
・「/var/log/syslog からerrorかwarnを含む行を抽出してcount.txtに保存するコマンドを教えて」
・「lsの結果を日付順に並べて上位10件だけ取り出すワンライナーを教えて」
提案されたコマンドを、意味を確認しながら自分の手で打ってみる。
この往復を繰り返すと、パイプとリダイレクトの感覚が短期間で身につきます。
大事なのは、丸暗記ではなく「つなげる発想」を持つことです。
よくあるエラーと対処法
「Permission denied」でファイルに書けない
書き込み権限のないディレクトリ(/etcなど)にリダイレクトするとこのエラーになります。ホームディレクトリ配下に書き出すか、管理用途であればsudoを使います。
# これはエラーになる $ ls > /etc/mylist.txt bash: /etc/mylist.txt: Permission denied # ホーム配下に書き出せばOK $ ls > ~/mylist.txt
「sudo echo xxx > ファイル」が書けない
これも初心者が必ずハマるパターンです。sudoは「echo」には効きますが「>」はシェル側の処理なので、権限が引き継がれません。
teeコマンドを使うのが定番の解決策です。
# NG: リダイレクトの部分に権限がない $ sudo echo "test" > /etc/test.conf # OK: teeを使うとsudo配下でファイルに書ける $ echo "test" | sudo tee /etc/test.conf
パイプでつないでも結果が出ない
grepで何も出ない場合は、大文字小文字の違いを疑います。「-i」で無視できます。# ERRORとerrorを区別せず抽出 $ cat app.log | grep -i error
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| 結果をファイルに保存(上書き) | ls > file.txt |
| 結果をファイルに追記 | date >> file.txt |
| エラーだけ別ファイルに保存 | ls /not_exist 2> error.log |
| 正常もエラーもまとめて保存 | ls /etc /not_exist &> all.log |
| コマンドをつないで絞り込む | ps aux | grep nginx |
| 結果を1画面ずつ見る | ls /etc | less |
| 行数を数える | cat app.log | grep error | wc -l |
| sudo配下でファイルに書く | echo "test" | sudo tee /etc/test.conf |
次に学ぶべき関連記事
リダイレクトとパイプを覚えたら、実務でよく使うコマンドと組み合わせて練習しましょう。以下の記事はどれも、この記事と同じ考え方で理解できるはずです。
・ポート確認(ss / lsof)の使い方
・DNS設定 resolv.conf と nmcli の使い方
・tarコマンドで圧縮・解凍する方法
・mountとfstabでディスクをマウントする方法
・Postfixのバージョンを確認する方法
・chkconfigとsystemctlでサービスを管理する方法
・ftpコマンドで複数ファイルをまとめて転送する方法
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンド学習の先にある「サーバーをゼロから組み立てる力」を、初心者が迷わない順序で学べる一冊です。
無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxのネットワーク確認入門|ipコマンドとpingで接続状態を調べる方法
- 前のページへ:Linuxのプロセス入門|バックグラウンド・フォアグラウンドの違いを初心者向けに解説
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

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