カテゴリ: Linux 更新日: 2026/03/19

Linuxの標準出力と標準エラー出力を同時にリダイレクト!初心者でもわかるリダイレクトの基礎

Linuxで標準出力とエラー出力を同時に扱う方法
Linuxで標準出力とエラー出力を同時に扱う方法

先生と生徒の会話形式で理解しよう

生徒

「Linuxでコマンドを実行したとき、画面に表示されるメッセージをファイルに保存したいんですけど、うまくいかないことがあるんです。」

先生

「それは『標準出力』と『標準エラー出力』の違いが原因かもしれませんね。Linuxでは、成功した時のメッセージとエラーのメッセージを別々に扱っているんですよ。」

生徒

「別々なんですか?両方をまとめて一つのファイルに保存する方法ってあるんでしょうか?」

先生

「もちろんです!『リダイレクト』という機能を使えば、両方を同時に保存できますよ。今回はその仕組みと使い方を詳しく解説しますね。」

1. 出力の種類を知ろう!「標準出力」と「標準エラー出力」

1. 出力の種類を知ろう!「標準出力」と「標準エラー出力」
1. 出力の種類を知ろう!「標準出力」と「標準エラー出力」

Linux(リナックス)の世界では、コマンドを実行したときに画面に出てくる「文字」には2つの種類があります。これを理解することが、ファイルを保存する第一歩です。

1つ目は「標準出力(ひょうじゅんしゅつりょく)」です。これは、コマンドが正常に動いたときに表示される「結果」のことです。例えば、ファイルの中身を表示したり、計算結果を出したりしたときの文字がこれに当たります。

2つ目は「標準エラー出力(ひょうじゅんえらーしゅつりょく)」です。これは、何かトラブルが起きたときに表示される「警告」や「エラーメッセージ」のことです。ファイルが見つからなかったり、命令の書き方が間違っていたりするときに出る赤い文字(ターミナルの設定によりますが)などがこれです。

この2つは、見た目は同じ画面に出てきますが、コンピュータの内部では「0番」「1番」「2番」というファイルディスクリプタ(識別番号)で区別されています。標準出力は1番、標準エラー出力は2番と決まっているのです。

2. リダイレクトの基本( > )をおさらい

2. リダイレクトの基本( > )をおさらい
2. リダイレクトの基本( > )をおさらい

通常、コマンドの結果は画面に表示されますが、これをファイルに書き込むことを「リダイレクト」と呼びます。記号の > を使います。

例えば、今いる場所にあるファイルの一覧を list.txt というファイルに保存したいときは、以下のように入力します。


ls > list.txt

しかし、この > という記号は、実は「標準出力(1番)」だけをファイルに送るというルールになっています。そのため、もしコマンドが失敗してエラーメッセージが出た場合、そのエラーはファイルには保存されず、画面にそのまま表示されてしまいます。

3. なぜエラー出力だけ残ってしまうのか?

3. なぜエラー出力だけ残ってしまうのか?
3. なぜエラー出力だけ残ってしまうのか?

初心者がよく突き当たる壁が、「全部ファイルに保存したはずなのに、なぜかエラーだけ画面に出てきて、ファイルの中身が空っぽ」という現象です。これは、標準エラー出力(2番)がリダイレクトの対象になっていないからです。

例えば、存在しないファイルを表示しようとしてみましょう。エラーメッセージを error.txt に保存しようとしても、普通のやり方では失敗します。


cat non-existent-file.txt > error.txt
cat: non-existent-file.txt: No such file or directory

上の例では、画面にエラーが出てしまいました。error.txt の中身を確認しても何も書き込まれていません。これは、> が「1番(成功)」しか見ていないため、「2番(エラー)」が漏れ出して画面に出てきた状態です。

4. 標準出力とエラー出力を同時に保存する方法( &> )

4. 標準出力とエラー出力を同時に保存する方法( &> )
4. 標準出力とエラー出力を同時に保存する方法( &> )

いよいよ本題です。成功した結果も、失敗したときのエラーメッセージも、まとめて一つのファイルに保存したいときは、&> という記号を使います。

この & という記号を足すことで、「1番も2番も全部まとめてリダイレクトする」という命令になります。非常に便利なショートカットです。実際にやってみましょう。


ls -R /etc &> all_output.txt

このコマンドを実行すると、画面には何も表示されません。その代わり、all_output.txt の中には、読み込みに成功したファイルの一覧と、「権限がありません」といったエラーメッセージの両方が記録されます。後でゆっくり内容を確認したいときに最適です。

5. 伝統的な書き方「 2>&1 」をマスターしよう

5. 伝統的な書き方「 2>&1 」をマスターしよう
5. 伝統的な書き方「 2>&1 」をマスターしよう

先ほどの &> は比較的新しい書き方です。古いLinuxや、特定の環境(シェル)では使えないこともあります。そこで、最も一般的でどこでも通用する「2>&1」という書き方も覚えておきましょう。

この呪文のような書き方の意味は、「2番(エラー出力)を、1番(標準出力)と同じ場所に送る」というものです。書き方は少し複雑に見えますが、以下のようになります。


ls -l /root > output.txt 2>&1

このコマンドの意味を分解すると、以下のようになります。
1. ls -l /root:指定した場所のファイル詳細を表示せよ
2. > output.txt:標準出力をファイルへ送れ
3. 2>&1:エラー出力も標準出力(ファイル)と同じところへ合流させろ
という順番で処理されています。これで、どんな環境でも完璧に両方の出力をキャッチできます。

6. 追加で書き込みたいときは「 >> 」を使おう

6. 追加で書き込みたいときは「 >> 」を使おう
6. 追加で書き込みたいときは「 >> 」を使おう

リダイレクトの >&> は、実行するたびにファイルを上書きしてしまいます。もし、今あるファイルの内容を消さずに、後ろに追記したい場合は、記号を2つ重ねて >> と書きます。

ログ(記録)を溜めていきたいときによく使われるテクニックです。標準出力とエラー出力を両方追記したい場合は、以下のように書きます。


echo "実行テスト開始" &>> log.txt
date &>> log.txt

このように実行すると、log.txt の中にどんどん日付や結果が蓄積されていきます。パソコンが自動で動いているときの記録を取るのにとても便利ですね。

7. パイプ( | )と組み合わせて高度な検索をする

7. パイプ( | )と組み合わせて高度な検索をする
7. パイプ( | )と組み合わせて高度な検索をする

リダイレクトとセットで覚えたいのが「パイプ( | )」です。パイプは「コマンドの結果を、次のコマンドに渡す」ための道具です。ここに正規表現などを組み合わせると、膨大なエラーの中から特定の文字だけを探すことができます。

例えば、大量の処理結果の中から「Error」という文字が含まれる行だけを抜き出してファイルに保存したい場合は、以下のようにします。


ls -R / 2>&1 | grep "Error" > only_errors.txt

ここでは、まず 2>&1 でエラーを標準出力にまとめ、それを |grep コマンドに渡しています。grep は特定のキーワードを探すコマンドです。最後に > でファイルに保存しています。このように、複数の機能を組み合わせるのがLinuxの醍醐味です。

8. エラー出力を捨てる方法「 /dev/null 」

8. エラー出力を捨てる方法「 /dev/null 」
8. エラー出力を捨てる方法「 /dev/null 」

逆に、「エラーメッセージなんて見たくない!邪魔だから消してほしい」という場面もあります。そんなときは、Linuxにある「ゴミ箱」のような場所にリダイレクトします。

その場所の名前は /dev/null です。ここに送られたデータは、跡形もなく消え去ります。


find / -name "*.conf" 2> /dev/null

この例では、ファイルを探すときに発生する「権限がありません」という大量のエラー出力を 2> でゴミ箱に捨てています。画面には検索に成功したファイル名だけが表示されるので、とてもスッキリしますね。

9. ルート権限でのリダイレクトには注意が必要

9. ルート権限でのリダイレクトには注意が必要
9. ルート権限でのリダイレクトには注意が必要

最後に少しだけ高度な話をします。管理者(ルート)しか触れないファイルをリダイレクトで作成しようとするとき、普通の sudo コマンドだけでは失敗することがあります。

なぜなら、リダイレクト処理( > )を行うのは「あなた(一般ユーザー)」の権限で動いているシェルだからです。もし管理者権限でファイルに書き込みたいときは、tee というコマンドを使うのが一般的です。


echo "設定完了" | sudo tee -a /etc/config_log.txt > /dev/null

tee コマンドは「画面に出しながらファイルにも書く」という便利な道具です。 -a オプションをつければ追記になります。これで、大切なシステムファイルへの記録も安全に行うことができます。

カテゴリの一覧へ
新着記事
New1
AWS PrivateLink
AWS PrivateLinkとは?VPC間のセキュアな通信を実現する仕組み
New2
VPN(プライベートネットワーク)
AWS VPNのセキュリティ設定を徹底解説!認証方式と証明書の基本
New3
VPN(プライベートネットワーク)
AWS VPNのルートテーブル設定と通信確認を完全ガイド!初心者でもできる仮想プライベートネットワークの基本
New4
VPN(プライベートネットワーク)
AWS VPNとDirect Connectの違いを比較してみよう!初心者でも分かる接続方法の選び方
人気記事
No.1
Java&Spring記事人気No1
S3(オブジェクトストレージ)
AWS S3の料金体系をわかりやすく解説
No.2
Java&Spring記事人気No2
RDS(データベース)
AWS RDSのスナップショットを手動で作成・復元する方法を初心者向けにやさしく解説!
No.3
Java&Spring記事人気No3
AWS 基本
AWSの公式料金計算ツール(Pricing Calculator)の使い方
No.4
Java&Spring記事人気No4
ELB(ロードバランサー)
AWS ELBでターゲットグループを設定する方法を初心者向けに解説!
No.5
Java&Spring記事人気No5
S3(オブジェクトストレージ)
AWS S3のデータ保護(オブジェクトロック・WORM設定)を初心者向けにやさしく解説
No.6
Java&Spring記事人気No6
ファイル・ディレクトリ構造
Linuxの/homeディレクトリとは?役割と構造を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
AWS Shield
AWS Shieldの課金体系とコスト対策を徹底解説!初心者でもわかるDDoS対策の料金構造
No.8
Java&Spring記事人気No8
RDS(データベース)
AWS RDSのスケーリング(インスタンスサイズ変更)を初心者向けにやさしく解説!