目次
標準入出力(stdio)とは
標準入出力(stdio)とは、 標準入力(stdin)、標準出力(stdout)、標準エラー出力(stderr)の3つをまとめたものです。
(※)stdioはstandard input outputの略です。
標準入力(stdin)
標準入力とは、プログラムの標準的な入力のことです。キーボードやファイルなどが使われます。
標準出力(stdout)
標準出力とは、プログラムの標準的な出力のことです。ディスプレイやファイルなどが使われます。
標準エラー出力(stderr)
標準エラー出力とは、プログラムのエラーメッセージを出力するためのものです。標準出力と同じく、ディスプレイやファイルなどが使われます。
コマンドは単に標準入力から流れてきた入力を受け取って、コマンドでその入力を処理して、標準入力 or 標準エラー出力に出力します。
標準入出力におけるリダイレクトとは
標準入出力におけるリダイレクトとは、 コマンドの標準入出力を切り替えることです。
標準出力をディスプレイからファイルに切り替えてみる
標準出力をディスプレイからファイルに切り替える場合、>
を使用します。
[ec2-user@ip-10-0-10-10 repos]$ ls
rails react react-1 sample.rb typescript
[ec2-user@ip-10-0-10-10 repos]$ ls > ls.txt
[ec2-user@ip-10-0-10-10 repos]$ ls
ls.txt rails react react-1 sample.rb typescript
[ec2-user@ip-10-0-10-10 repos]$ cat ls.txt
ls.txt
rails
react
react-1
sample.rb
typescript
(※) 標準入力を変更(リダイレクト)したい場合、<
を使用します。標準エラー出力を切り替える場合、2>
を使用します。
cat < /etc/crontab
リダイレクトの書き方
リダイレクトの書き方は、>
、<
、2>
以外にもあります。
>
は指定したファイルが存在しない場合、ファイルを新規作成してそこに出力します。ファイルが既に存在している場合、ファイルの内容を全て上書きしてしまうので、そのような場合は >>
を使って ファイルの末尾に追記するようにします。
記号 | 意味 |
---|---|
< file | 標準入力をfileに変更 |
> file | 標準出力をfileに変更 |
2> file | 標準エラー出力をfileに変更 |
>> file | 標準出力の出力をfileの末尾に追記 |
2 >> file | 標準エラー出力の出力をfileの末尾に追記 |
> file 2 > &1 | 標準出力と標準エラー出力をfileに変更 |
[ec2-user@ip-10-0-10-10 repos]$ cat sample.rb > ruby.txt [ec2-user@ip-10-0-10-10 repos]$ ls ls.txt rails react react-1 ruby.txt sample.rb typescript [ec2-user@ip-10-0-10-10 repos]$ cat ruby.txt a = 5 puts a [ec2-user@ip-10-0-10-10 repos]$ cat sample.rb >> ruby.txt [ec2-user@ip-10-0-10-10 repos]$ cat ruby.txt a = 5 puts a a = 5 puts a
パイプラインとは
パイプラインとは、 あるコマンドの標準出力を、別のコマンドの標準入力につなげる機能のことです。 |
を使用します。あるコマンドの標準出力を別のコマンドの標準入力につなげるてさらに処理を繰り返すことで、より複雑な処理をすることができます。コマンドはパイプラインで何個でもつなげることができます。
[ec2-user@ip-10-0-10-10 repos]$ ls -l | cat -n 1 total 12 2 -rw-rw-r-- 1 ec2-user ec2-user 48 Nov 14 04:33 ls.txt 3 drwxrwxr-x 3 ec2-user ec2-user 28 Nov 11 14:43 rails 4 drwxrwxr-x 2 ec2-user ec2-user 23 Nov 11 11:28 react 5 drwxrwxr-x 3 ec2-user ec2-user 19 Nov 11 10:57 react-1 6 -rw-rw-r-- 1 ec2-user ec2-user 28 Nov 14 04:53 ruby.txt 7 -rw-rw-r-- 1 ec2-user ec2-user 14 Nov 14 04:52 sample.rb 8 drwxrwxr-x 2 ec2-user ec2-user 6 Nov 14 03:12 typescript
パイプラインを使うことで、ディレクトリ配下に特定のファイルが存在するかを表示することもできます。以下ではRubyというファイルを表示してます。
[ec2-user@ip-10-0-10-10 repos]$ ls -l | grep ruby -rw-rw-r-- 1 ec2-user ec2-user 28 Nov 14 04:53 ruby.txt
参考記事
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】 | Udemy