UNIX/Linux 標準入力 標準出力とリダイレクト、パイプのはなし
UNIX/Linux 標準入力・標準出力
UNIX/Linuxのシェルから起動されるプログラムには、標準入力(STDIN)、標準出力(STDOUT)、標準エラー(STDERR)という入出力路が使えるようになっています。
リダイレクト(redirect)という機能を使って出力先を変える事ができます。
パイプ(pipe)は、1つのプログラムの出力を、一時ファイルを使わずに別のプログラムの入力に結びつける1本のつなぎのことをいいます。
UNIX/Linuxにあるこれら機能のおかげで、効率よく作業が行えるようになっています。
標準入力
通常はキーボードに割り当てられています。
通常はキーボードに割り当てられています。
標準出力
通常、画面に割り当てられています。
標準エラー出力
通常、画面に割り当てられています。
リダイレクト、パイプを使った例
Ex1)
画面(標準出力)に Hello を表示する
$ echo Hello
ファイルに Hello を書き出す
リダイレクトを使って標準出力をファイルにつなぎます。(ファイルが作成される)
$ echo Hello > hello.txt
Ex2)
ファイル情報を表示
$ ls -l
ファイル情報を取得して、9カラムを基準に並べ替える
lsコマンドでファイル情報を取得し、パイプを使って sortコマンドで9カラムを基準に並べ替える。(途中でファイル出力せずにパイプを使って処理。)
$ ls -l | sort -k9
理解を深めたい時は、→ 高知大学 理工学部 情報科学教室 「Lesson7 標準入出力を理解する」が勉強になります。
リダイレクトの種類
コマンド > ファイル | コマンド結果をファイルへ書き込む |
コマンド < ファイル | ファイルの中身をコマンドの標準入力へ |
コマンド >> ファイル | コマンドの出力結果をファイルへ追記 |
コマンド 2> ファイル | エラー出力をファイルへ書き込む |
コマンド 2>> ファイル | ファイルにエラー出力を追記 |
コマンド > ファイル 2>&1 | ファイルに標準出力と標準エラー出力を書き込む |
コマンド >> ファイル 2>&1 | ファイルに標準出力と標準エラー出力を追記 |
コマンド << 終了文字 | 終了文字が現れるまで標準入力へ送る |
コマンド &> ファイル | 標準出力と標準エラー出力を同じファイルに書き込む |
コマンド > /dev/null 2>&1 | 表示をしない。(表示をゴミ箱へ) |
UNIXの基本思想
「単純で汎用的な機能を持ったコマンドを組み合わせることによって大きな機能を実現する。」
UNIXの基本的な考え方のひとつです。それを実現するために実装されたと言っても過言ではありません。
UNIX/Linuxで作業する時は、この基本思想を大切にしたいですね。