【Linux】標準入出力、リダイレクト、パイプラインの動きについてまとめてみました。
Linux上で、コマンド間でどのような情報のやりとりがされているのかを知るために、標準入出力、リダイレクト、パイプラインについて私なりに動きのイメージをまとめてみました。
目次
1.標準入出力
Linuxではコマンドが起動されると、自動的に標準の入出力チャネル(通り道)が開かれます。
この通り道は、標準入力(stdin)、標準出力(stdout)、標準エラー出力(stderr)の3つで、各コマンドは内部でキーボードで入力するとかディスプレイに出力するとかは考えていなく、シンプルに入出力するだけです。
キーボードで入力するとか、ディスプレイに出力させるとかはユーザで自由に設定できます。
この標準入出力での情報のやりとりのイメージとしては下図のような感じです。
2.リダイレクト
標準入出力先を変更する機能のことをリダイレクトといいます。
・入力先を変更するリダイレクト
コマンド $ <
例:キーボードの代わりにファイルを標準入力に繋いでみる
$ cat < /etc/hoge (結果:hogeファイルの中身が表示される)
・出力先を変更するリダイレクト
コマンド $ >
例:コマンドの実行結果をファイルに保存する
$ ls -l / > list.txt (結果:lsの出力結果がlist.txtに書き込まれる)
ただし、エラー出力は上記でリダイレクトされません。これは標準出力とエラー出力のチャネルが別になっているからで、エラー出力をリダイレクトする場合は、$ 2>
という記号を使う。
3.パイプライン
パイプライン |
とは、コマンドの標準出力を別のコマンドの標準入力に繋ぐことができる記法です。
つまり、コマンドを連携させる機能がパイプラインの役目です。
例えば、
$ ls -l / > list.txt
$ less list.txt
このようにlsの出力結果をテキストに書き込み、lessで閲覧する処理を、
$ ls -l / | less
パイプで繋いで一つのコマンドにすることができます。
情報のやりとりとしては下図のようなイメージです。
以上、参考になればと思います。
それでは!!