このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linux基礎:標準入出力とリダイレクト

標準入出力とリダイレクト

 Linuxでは、コマンドやプログラムを実行すると「入力」と「出力」の流れが必ず発生します。ユーザーが入力した内容はプログラムに渡され、その結果は画面に表示されます。また、エラーが発生した場合には通常の出力とは別の経路でエラーメッセージが表示されます。これらの仕組みは「標準入出力」と呼ばれ、シェル操作やスクリプト作成において基礎となる概念です。

 さらに、Linuxでは「リダイレクト」を利用することで、出力をファイルに保存したり、エラー出力を別のファイルに分離することができます。リダイレクトを使いこなせば、コマンド結果を記録したり、不要なエラーを除外したりと、柔軟な処理が可能になります。

 ここでは Rocky Linux 環境を前提に、標準入出力の仕組みとリダイレクトの活用方法を詳しく解説します。

1.標準入出力の基礎

1.1. 標準入出力とは

 Linux上で実行されるプログラムには、デフォルトで次の3つの入出力ストリームが割り当てられています。

ストリーム名略称ファイル記述子説明
標準入力stdin0プログラムが入力を受け付ける(通常はキーボード)
標準出力stdout1実行結果の出力(通常は端末画面)
標準エラー出力stderr2エラーメッセージの出力(通常は端末画面)

図にすると次のようになります。

1.2. 標準入出力の動作確認

使用例

[user@rocky9 ~]$ cat
Linux
Linux
Rocky
Rocky
Ctrl+D

 ここでは cat コマンドを引数なしで実行しました。入力した文字がそのまま標準出力に返ってくることから、標準入力 (キーボード)プログラム (cat)標準出力 (画面) という流れが理解できます。

2.リダイレクトの活用

2.1. 標準出力のリダイレクト

コマンドの出力をファイルに保存するにはリダイレクト記号 > を使用します。

書式

コマンド > ファイル名

使用例(上書きリダイレクト)

[user@rocky9 ~]$ date > today.txt
[user@rocky9 ~]$ cat today.txt
Sat Aug 31 21:10:45 JST 2024

 date の結果が today.txt に書き込まれ、画面には表示されません。既存ファイルがあれば内容は上書きされます。

2.2. 追記リダイレクト

ファイルの末尾に出力を追加したい場合は >> を使用します。

使用例(追記リダイレクト)

[user@rocky9 ~]$ date >> today.txt
[user@rocky9 ~]$ cat today.txt
Sat Aug 31 21:10:45 JST 2024
Sat Aug 31 21:11:12 JST 2024

>> によって、既存の内容が保持されたまま新しい結果が追加されます。

2.3. 標準エラー出力のリダイレクト

存在しないファイルを指定するとエラーが出力されます。

使用例(エラー出力)

[user@rocky9 ~]$ ls -l today.txt nofile.txt
ls: cannot access 'nofile.txt': No such file or directory
-rw-r--r--. 1 user user 58 Aug 31 21:11 today.txt

 ここで today.txt の情報は標準出力に、nofile.txt のエラーメッセージは標準エラー出力に送られています。

エラー出力をファイルに保存

[user@rocky9 ~]$ ls -l today.txt nofile.txt 2> error.log
-rw-r--r--. 1 user user 58 Aug 31 21:11 today.txt

[user@rocky9 ~]$ cat error.log
ls: cannot access 'nofile.txt': No such file or directory

2> によって 標準エラー出力 (ファイル記述子 2)error.log に保存されました。

2.4. 標準出力と標準エラー出力を同時にリダイレクト

両方をまとめて保存するには &> を利用します。

使用例

[user@rocky9 ~]$ ls -l today.txt nofile.txt &> all_output.log
[user@rocky9 ~]$ cat all_output.log
ls: cannot access 'nofile.txt': No such file or directory
-rw-r--r--. 1 user user 58 Aug 31 21:11 today.txt

3.応用的なリダイレクト

3.1. 入力リダイレクト

標準入力をファイルから与えるには < を使用します。

使用例

[user@rocky9 ~]$ wc -l < today.txt
2

ここでは today.txt の行数がカウントされます。

3.2. 標準入力と出力の組み合わせ

[user@rocky9 ~]$ sort < today.txt > sorted.txt
[user@rocky9 ~]$ cat sorted.txt 
2025年  9月  1日 月曜日 23:09:07 JST
2025年  9月  1日 月曜日 23:09:40 JST

today.txt を入力として読み込み、ソート結果を sorted.txt に保存しています。

まとめ

  • Linuxプログラムには 標準入力 (stdin:0)標準出力 (stdout:1)標準エラー出力 (stderr:2) の3つの入出力がある。
  • リダイレクトを使えば、出力をファイルに保存したり、エラーを分離することが可能。
  • > は上書き、>> は追記、2> はエラー出力のリダイレクト。
  • &> を使うと標準出力と標準エラー出力をまとめて保存できる。
  • < を使えばファイルから標準入力を与えられる。

 標準入出力とリダイレクトを理解すると、Linuxでのコマンド活用やシェルスクリプト作成が格段に効率化されます。