新Linux入門|リダイレクトを理解しよう!標準入力・出力・エラー出力の制御

 Linuxのコマンドを使っていると、画面にたくさんの結果が表示されたり、エラーメッセージが出たりしますよね。
この「結果」や「エラー」をファイルに保存したいと思ったことはありませんか?

そんなときに役立つのが 「リダイレクト(Redirection)」 です。
 リダイレクトとは、コマンドの入出力の流れ(標準入力・出力・エラー出力)を、別の場所に切り替える仕組み のことです。

 これを使うと、コマンドの結果をファイルに書き出したり、ファイルの内容をコマンドに渡したりと、柔軟な操作が可能になります。

🔁 リダイレクトの基本概念

まず、Linuxのコマンドには3つの「データの流れ(ストリーム)」があります。

名称ファイルディスクリプタ番号説明通常の接続先
標準入力(stdin)0コマンドがデータを受け取るキーボード
標準出力(stdout)1コマンドの実行結果を出力する画面(端末)
標準エラー出力(stderr)2エラーメッセージを出力する画面(端末)

💬 ポイント
通常、コマンドの実行結果もエラーメッセージも画面に表示されますが、
リダイレクトを使うとそれぞれをファイルや別の出力先に切り替えることができます。

🧭 リダイレクトの種類と記号の意味

リダイレクトの種類記号対象動作
標準出力を上書き保存>stdout (1)結果をファイルに上書き保存
標準出力を追記保存>>stdout (1)結果をファイルの末尾に追加
標準入力をファイルから読み込み<stdin (0)ファイルの内容を入力として使用
標準エラー出力を上書き保存2>stderr (2)エラーメッセージをファイルに上書き
標準エラー出力を追記保存2>>stderr (2)エラーメッセージをファイルに追記
標準出力と標準エラーを同時に保存&> または 2>&1stdout + stderr両方を同一ファイルに保存

💬 それぞれの記号は、「どの出力を」「どこへ」向けるかを指定するためのものです。
慣れてくると、ログ収集やスクリプト自動化で非常に重宝します。

🖥️ 標準出力のリダイレクト(> と >>)

標準出力とは、コマンドの実行結果(正常な出力) のことです。
これをファイルに保存したい場合に使うのが >(上書き)>>(追記) です。

上書き保存(>)

[suzuki@AlmaLinux ~]$ echo "Hello, World!" > message.txt
[suzuki@AlmaLinux ~]$ cat message.txt
Hello, World!

💬 このコマンドは、echo の結果を message.txt上書き保存します。
同じファイル名が存在する場合は、内容が上書きされる点に注意してください。

追記保存(>>)

[suzuki@AlmaLinux ~]$ echo "Welcome to AlmaLinux!" >> message.txt
[suzuki@AlmaLinux ~]$ cat message.txt
Hello, World!
Welcome to AlmaLinux!

💬 >> を使うと、既存ファイルの末尾に新しい内容を追加できます。
ログのように、履歴を残したい場合に便利です。

⌨️ 標準入力のリダイレクト(<)

標準入力は、コマンドがデータを受け取る「入口」です。
通常はキーボード入力ですが、< を使うと、ファイルの内容を入力として扱うことができます。

[suzuki@AlmaLinux ~]$ cat < input.txt
This is sample text.

💬 この例では、input.txt の内容を cat コマンドに渡して表示しています。
つまり、キーボードから入力する代わりにファイルから読み取っているということです。

⚠️ 標準エラー出力のリダイレクト(2> と 2>>)

標準エラー出力は、コマンドが失敗したときに出すメッセージです。
これをファイルに保存して、後でトラブルシューティングに使うことができます。

上書き保存(2>)

[suzuki@AlmaLinux ~]$ ls /no_such_directory 2> error.log
[suzuki@AlmaLinux ~]$ cat error.log
ls: cannot access '/no_such_directory': No such file or directory

💬 ここでは、存在しないディレクトリを指定して ls を実行しています。
通常は画面に表示されるエラーメッセージが、error.log に保存されています。

追記保存(2>>)

[suzuki@AlmaLinux ~]$ ls /no_such_file 2>> error.log
[suzuki@AlmaLinux ~]$ cat error.log
ls: cannot access '/no_such_directory': No such file or directory
ls: cannot access '/no_such_file': No such file or directory

💬 2>> を使うと、エラーを追記していけます。
定期的に発生するエラーをログとして記録したいときに便利です。

🧩 標準出力と標準エラー出力を同時にリダイレクト(&> または 2>&1)

 ときには、標準出力(結果)と標準エラー(エラー)を同じファイルにまとめて保存したいこともあります。
そのときに使うのが &>2>&1 です。

&> を使う方法

[suzuki@AlmaLinux ~]$ ls /etc /no_such_dir &> all.log
[suzuki@AlmaLinux ~]$ cat all.log
/etc:
bashrc
hosts
...
ls: cannot access '/no_such_dir': No such file or directory

2>&1 を使う方法(同じ意味)

[suzuki@AlmaLinux ~]$ ls /etc /no_such_dir > all.log 2>&1

💬 どちらも、標準出力と標準エラーの両方を all.log に書き込みます。
後で内容をまとめて確認できるので、スクリプトやログ管理でよく使われます。

💬 この図を見ると、どの流れをどこへ向けるかが直感的に理解できます。
ファイルディスクリプタ番号(0, 1, 2)と対応させて覚えると、
複雑なリダイレクト構文もすぐに理解できるようになります。

✅ まとめ

リダイレクトは、Linuxの入出力を自在にコントロールするための非常に重要な仕組みです。
 標準出力・標準入力・標準エラー出力の流れを理解すると、コマンド操作やシェルスクリプトが一気にレベルアップします。

操作記号説明
標準出力を上書き保存>コマンドの結果をファイルに上書き
標準出力を追記保存>>結果をファイルに追加
標準入力をファイルから読み込み<ファイル内容をコマンドの入力として使用
標準エラー出力を上書き保存2>エラーをファイルに上書き保存
標準エラー出力を追記保存2>>エラーをファイルに追記
出力とエラーを同時に保存&> または 2>&1両方を1つのファイルに出力

💬 ポイント

  • リダイレクトは「出力先を変える」テクニック。
  • 0, 1, 2 の番号を理解すると、どんなリダイレクトでも迷わない。
  • シェルスクリプトでは、ログ保存やデータ処理に欠かせない機能。

リダイレクトをマスターすれば、Linuxの世界がぐっと広がります!