新Linux入門|標準入力・出力・エラー出力の仕組み

 Linuxでコマンドを実行すると、画面に結果が表示されたり、エラーメッセージが出力されたりしますよね。
これらはすべて「標準入出力(Standard I/O)」と呼ばれる仕組みによって成り立っています。

プログラムがユーザーとやり取りを行う際、
入力(Input)出力(Output) の流れを統一的に扱うための仕組みが「標準入出力」です。

ここでは、標準入力(stdin)・標準出力(stdout)・標準エラー出力(stderr) の3つの役割を、
実例を交えてわかりやすく説明します。

🧭 標準入出力の概要

種類英語表記ファイルディスクリプタ番号主な用途デフォルトの入出力先
標準入力Standard Input (stdin)0ユーザーからの入力を受け取るキーボード
標準出力Standard Output (stdout)1実行結果やメッセージを出力する画面(端末)
標準エラー出力Standard Error (stderr)2エラーや警告メッセージを出力する画面(端末)

💬 ポイント
これら3つのデータの流れ(ストリーム)は、すべてLinuxの基本入出力モデルの中で扱われます。
ファイルディスクリプタ番号(0,1,2)は、プログラムがこれらを識別するために使用します。

⌨️ 標準入力(stdin)とは?

標準入力は、プログラムにデータを「入力」する仕組みです。
通常、キーボードからの入力が標準入力として扱われます。

📘 使用例

[suzuki@AlmaLinux ~]$ read -p "Enter your name: " username
Enter your name: watanabe
[suzuki@AlmaLinux ~]$ echo "Hello, $username"
Hello, watanabe

💬 read コマンドは標準入力からデータを読み取ります。
上の例では、ユーザーが入力した「watanabe」という文字列を変数に格納し、
次のコマンドで表示しています。

🖥️ 標準出力(stdout)とは?

標準出力は、プログラムの結果を表示する仕組みです。
 通常は画面(端末)に表示されますが、リダイレクト を使うことでファイルに出力することもできます。

📘 基本例

[suzuki@AlmaLinux ~]$ echo "Hello, World!"
Hello, World!

💬 ここで表示された文字列は、標準出力(stdout)に送られ、画面に出力されています。

📘 リダイレクト例

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

💬 > を使うと標準出力の結果をファイルに保存できます。
これは、シェルのリダイレクト機能によって「stdout → ファイル」に流れを変えているのです。

⚠️ 標準エラー出力(stderr)とは?

標準エラー出力は、エラーメッセージや警告を表示するための仕組みです。
エラーは標準出力とは別の出力経路(stderr)を通して出力されます。

📘 使用例

[suzuki@AlmaLinux ~]$ ls /no_such_directory
ls: cannot access '/no_such_directory': No such file or directory

💬 このエラーメッセージは標準エラー出力(stderr)に送られています。
そのため、標準出力とは別に扱うことができます。

📘 標準エラー出力をファイルにリダイレクトする例

[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

💡 ここでは 2> を使って、ファイルディスクリプタ2(stderr) の出力先を error.log に指定しています。

🧰 catコマンドで学ぶ標準入出力の動作

 cat コマンドは、ファイルの内容を表示(出力)したり、入力をファイルに保存 したりできる万能ツールです。
名前の由来は「concatenate(連結)」で、複数ファイルの結合も可能です。

➀ファイルを標準出力に表示

[suzuki@AlmaLinux ~]$ cat /etc/hostname
AlmaLinux

💬 ファイルの内容を標準出力(stdout) に送信して画面に表示しています。

②標準入力からファイルを作成

[suzuki@AlmaLinux ~]$ cat > newfile.txt
Hello AlmaLinux!
This is a test.
(Ctrl + D で終了)

💬 ここではキーボード入力(標準入力)を受け取り、その内容を newfile.txt に保存しています。

③標準入力をパイプでつなぐ

[suzuki@AlmaLinux ~]$ cat /etc/passwd | grep suzuki
suzuki:x:1000:1000::/home/suzuki:/bin/bash

💬 |(パイプ)は、左側のコマンドの標準出力を右側のコマンドの標準入力に渡す仕組みです。
これにより、コマンド同士を連携させてデータ処理を行う ことができます。

🧮 標準入出力とリダイレクト記号のまとめ

記号意味対象使用例
>標準出力をファイルに書き込む(上書き)stdout (1)echo "Hi" > out.txt
>>標準出力をファイルに追記するstdout (1)echo "Hi" >> out.txt
2>標準エラー出力をファイルに書き込むstderr (2)ls /none 2> error.txt
&>標準出力とエラー出力を同時にリダイレクトstdout+stderrcommand &> result.log
<ファイルから入力を受け取るstdin (0)cat < file.txt

💬 コツ
 Linuxでは、標準出力(1)と標準エラー出力(2)を分けることで、エラーと正常結果を柔軟に処理できます。

✅ まとめ

Linuxにおける 標準入力・標準出力・標準エラー出力 は、
ユーザーとプログラムがデータをやり取りするための基本的な仕組みです。

種類ファイルディスクリプタ入出力方向主な用途
標準入力 (stdin)0入力キーボードなどからのデータ入力
標準出力 (stdout)1出力正常な結果の表示
標準エラー出力 (stderr)2出力エラーメッセージの表示

💬 ポイント

  • stdin はユーザー入力、stdout は結果出力、stderr はエラー表示を担当
  • > や 2> などのリダイレクトで、ファイルや他コマンドへのデータ転送が可能
  • cat や grep のようなコマンドは、この標準入出力の仕組みを最大限に活用している

これらを理解することで、Linuxのコマンドライン操作が格段に効率的になります。
次は「リダイレクトとパイプ」を学ぶと、シェル操作がさらに楽しくなります!