どーも!marusukeです!
Linuxのデータの流れ「標準入出力」について説明します!
標準入出力とは?
LinuxやUnix系のオペレーティングシステムでは、プログラムやコマンドがデータを受け取り、結果を出力する際の「通信路」があります
この通信路のことを標準入力(stdin)、標準出力(stdout)、そしてエラーメッセージを出力する標準エラー出力(stderr)と呼びます
- 標準入力 (stdin): プログラムにデータを入力する入り口です。デフォルトでは、キーボードからの入力がこの入り口を通じてプログラムに渡されます
- 標準出力 (stdout): プログラムが処理結果を出力するデータの出口のことです。デフォルトでは、コマンドライン(ターミナル)に表示されます
- 標準エラー出力 (stderr): プログラムがエラーメッセージを出力するためのデータの出口です。デフォルトでは、これもコマンドラインに表示されますが、stdoutとは別に扱われます
標準入出力にはファイルディスクリプタというOSが識別するための番号が割り振られています
番号 | 入出力名 | デフォルト |
---|---|---|
0 | 標準入力 | キーボードから入力 |
1 | 標準出力 | 画面(端末)に表示 |
2 | 標準エラー出力 | 画面(端末)に表示 |
なぜ重要なのか?
これらのデータの出入口を使うことで、プログラム間でデータを簡単に受け渡したり、出力結果をファイルに書き込んだり(リダイレクト)、他のプログラムに渡したりすること(パイプ)ができます。
この機能により、複雑なタスクを実行するスクリプトやプログラムを簡単に作成することができます
標準入出力・パイプの例
ファイルからの入力を読み込む場合: 標準入力
cat < input.txt
このコマンドはinput.txt
の内容をcat
コマンドに渡します
<
はファイルからの入力を標準入力へリダイレクトします
出力をファイルにリダイレクトする: 標準出力
echo "Hello, World!" > output.txt
ここでは、echo
コマンドの出力をoutput.txt
にリダイレクトしています
リダイレクトすることで、output.txt
にHello, World!
が書き込まれます
エラーメッセージを別のファイルにリダイレクトする:標準エラー出力
grep "text" file.txt 2> error.txt
grep
コマンドを実行し、file.txt
内の"text"
を検索します
もしエラーが発生した場合、そのエラーメッセージはerror.txt
にリダイレクトされます
2>
は標準エラー出力をリダイレクトします。
出力を別のコマンドにパイプする
cat file.txt | grep "text"
cat
コマンドでfile.txt
の内容を表示し、その出力をgrep
コマンドにパイプします
|(パイプ)
により、出力された内容の中から”text”を含む行だけが表示されます
標準入出力の使用方法
書式 | 説明 |
---|---|
コマンド > ファイル | コマンドの標準出力(実行結果)をファイルに書き込む |
コマンド < ファイル | ファイルの内容をコマンドの標準入力へ送る |
コマンド >> ファイル | コマンドの標準出力(実行結果)をファイルに追記する |
コマンド 2> ファイル | ファイルに標準エラー出力を書き込む |
コマンド 2>> ファイル | ファイルに標準エラー出力を追記する |
コマンド > ファイル 2>&1 | ファイルに標準出力と標準エラー出力を書き込む |
コマンド >> ファイル 2>&1 | ファイルに標準出力と標準エラー出力を追記する |
コマンド <& 終了文字 | 終了文字が現れるまで標準入力へ入力する |
コマンド1 | コマンド2 | コマンド1の標準出力をコマンド2の標準入力に渡す |
コマンド1 2>&1 | コマンド2 | コマンド1の標準出力と標準エラー出力をコマンド2の標準入力に渡す |
コマンド1 tee ファイル | コマンド2 | コマンド1の標準出力(実行結果)をファイルとコマンド2の標準入力に渡すとともにファイルに書き込む |
コマンド &> ファイル | 標準出力と標準エラー出力を同じファイルに書き込む |
以上です!
ここまで読んでいただきありがとうございました!
コメント