とらりもん - 標準入出力・リダイレクト・パイプ Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
!作成者
筑波大学農林工学系 奈佐原(西田)顕郎
!標準入出力
lsやcatの実行結果は、何も指定しないと、普通は画面に表示される。このように、UNIXでは、何も指定しないときに入出力するデバイスを「''標準入出力''」と呼び、デフォルト(初期設定状態)ではそれぞれキーボードと画面になっている。
!リダイレクト
しかし、「''リダイレクト''」という技を使うと、それらをユーザー指定のファイルに変更することができる。
*例 ("$"はプロンプトなので、入力する必要無し):
$ cd
(ホームディレクトリに移動)
$ ls -la /
(ルートディレクトリの内容を画面に表示)
$ ls -la / > list.txt
(上と同じ命令だが、結果を画面に出すのではなく、list.txtというファイルに書き込む)
$ cat list.txt
(list.txtというファイルの内容を表示)
このように、">"という記号で標準出力を画面からファイルに変更できる。これを''出力リダイレクト''と呼ぶ。ちなみに、''">"のかわりに">>"を使うと、そのファイルの末尾に追加することになる。''
同様に、"<"という記号で、標準入力をキーボードからファイルに変更できる。これを''入力リダイレクト''と呼ぶ。
例えば、bcというコマンドは、簡単な四則演算をするコマンドだが、これを使って入力リダイレクトを経験してみよう。
まず、普通にbcを使ってみる:
$ bc
2+3
5
quit
このように、bcコマンドは、2+3という式をキーボードから入れたら5という答えを返す。
こんどは、viによって、以下のような内容のテキストファイルを, calc.txtというファイル名で作れ:
2+3
2*3
そして、次のコマンドを実行せよ:
$ bc < calc.txt
5
6
上のように、計算結果の5と6という数字が表示されるはずである。このように、あるコマンドにデータ(ここでは2+3とか2*3といった計算式)をわたすとき、そのコマンドが標準入力に対応していれば、入力リダイレクト"<"によって、ファイルからコマンドにデータをわたす(入力する)ことができる。
入力リダイレクト"<"と出力リダイレクト">"によって、コマンドへの入力と出力を、両方ともそれぞれファイルにすることができる。例えば、上の例では、
$ bc < calc.txt > calc_out.txt
とすれば、calc.txtというファイルに記述された計算式を計算した結果はcalc_out.txtというファイルに書き込まれる。
!パイプ
一方、あるコマンドの実行結果を、画面(標準出力)に出さないで、ダイレクトに他のコマンドへ入力として受け渡すこともできる。たとえば、以下を実行してみよう:
$ echo 2+3
2+3
$ echo 2+3 | bc
5
ここでecho 2+3というコマンドは、"2+3"という文字列を標準出力、つまり画面に出すだけである。しかし、そのコマンドに続いて、| bcとすると、echo 2+3の結果、すなわち"2+3"という文字列が、bcというコマンドに渡される。このように、"|"という記号をはさんで複数のコマンドを連結すれば、一つのコマンドが出す標準出力を、次のコマンドの標準入力に受け渡すということができるのである。このような機能のことや、特にそれを実現する"|"という記号のことを、「''パイプ''」と呼ぶ。
パイプを使えば、たくさんのコマンドを数珠つなぎに連結して、あたかもひとつの大きなコマンドのようにすることができる。これはUNIXの極めて本質的な利点である。ひとつひとつ小さな機能を持った小さなコマンドを、標準入出力とパイプを介して組合せ、複雑で大きな処理をする、というのが「UNIXの上手な使いかた」なのである。
パイプを利用したコマンドの例として、以下のようなものは、日常、よく使われる:
$ ls -l /bin | less
これは、/binというディレクトリのファイルリストを表示するものだが、このディレクトリには非常にたくさんのファイルがあるので、画面ひとつには収まらない。そこで、パイプでlessというコマンドをくっつける。lessは、標準入力から得たデータを、画面の1ページづつに区切って表示する機能を持つ。従って、この一連のコマンドによって、/binのファイルのリストが、画面上を流れてしまわずに、1ページづつ表示される(進むにはスペースキーを押す。終了はq)。
!ヒアドキュメント
リダイレクトの特殊なケースとして、''ヒア・ドキュメント''という使い方がある。例として、以下のようにコマンドラインから打ち込んでみよ:
$ bc << EOF
2+3
2*3
EOF
すると、
5
6
と表示されるだろう。この場合、bcコマンドへの入力は、キーボードから行われたのだが、ぜんぶの入力が終ってEOFという語を最後に打ち込んではじめてbcコマンドが動作するという点で、普通のキーボード入力のときのbcコマンドの動作とは違っている。このような入力のしかたを、ヒア・ドキュメントという。
ヒア・ドキュメントは、実際はコマンドラインから使うことは少なく、むしろ後述する''シェルスクリプト''の中で、gnuplotなどのコマンドを操作するときによく使う。
!参考になるページ:
*ASCII24 *[[ASCII24 デジタル用語辞典 ヒアドキュメント http://yougo.ascii24.com/gh/38/003832.html|http://yougo.ascii.jp/caltar/%E3%83%92%E3%82%A2%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88]]
<[[Unix/Linux入門]]に戻る>
筑波大学農林工学系 奈佐原(西田)顕郎
!標準入出力
lsやcatの実行結果は、何も指定しないと、普通は画面に表示される。このように、UNIXでは、何も指定しないときに入出力するデバイスを「''標準入出力''」と呼び、デフォルト(初期設定状態)ではそれぞれキーボードと画面になっている。
!リダイレクト
しかし、「''リダイレクト''」という技を使うと、それらをユーザー指定のファイルに変更することができる。
*例 ("$"はプロンプトなので、入力する必要無し):
$ cd
(ホームディレクトリに移動)
$ ls -la /
(ルートディレクトリの内容を画面に表示)
$ ls -la / > list.txt
(上と同じ命令だが、結果を画面に出すのではなく、list.txtというファイルに書き込む)
$ cat list.txt
(list.txtというファイルの内容を表示)
このように、">"という記号で標準出力を画面からファイルに変更できる。これを''出力リダイレクト''と呼ぶ。ちなみに、''">"のかわりに">>"を使うと、そのファイルの末尾に追加することになる。''
同様に、"<"という記号で、標準入力をキーボードからファイルに変更できる。これを''入力リダイレクト''と呼ぶ。
例えば、bcというコマンドは、簡単な四則演算をするコマンドだが、これを使って入力リダイレクトを経験してみよう。
まず、普通にbcを使ってみる:
$ bc
2+3
5
quit
このように、bcコマンドは、2+3という式をキーボードから入れたら5という答えを返す。
こんどは、viによって、以下のような内容のテキストファイルを, calc.txtというファイル名で作れ:
2+3
2*3
そして、次のコマンドを実行せよ:
$ bc < calc.txt
5
6
上のように、計算結果の5と6という数字が表示されるはずである。このように、あるコマンドにデータ(ここでは2+3とか2*3といった計算式)をわたすとき、そのコマンドが標準入力に対応していれば、入力リダイレクト"<"によって、ファイルからコマンドにデータをわたす(入力する)ことができる。
入力リダイレクト"<"と出力リダイレクト">"によって、コマンドへの入力と出力を、両方ともそれぞれファイルにすることができる。例えば、上の例では、
$ bc < calc.txt > calc_out.txt
とすれば、calc.txtというファイルに記述された計算式を計算した結果はcalc_out.txtというファイルに書き込まれる。
!パイプ
一方、あるコマンドの実行結果を、画面(標準出力)に出さないで、ダイレクトに他のコマンドへ入力として受け渡すこともできる。たとえば、以下を実行してみよう:
$ echo 2+3
2+3
$ echo 2+3 | bc
5
ここでecho 2+3というコマンドは、"2+3"という文字列を標準出力、つまり画面に出すだけである。しかし、そのコマンドに続いて、| bcとすると、echo 2+3の結果、すなわち"2+3"という文字列が、bcというコマンドに渡される。このように、"|"という記号をはさんで複数のコマンドを連結すれば、一つのコマンドが出す標準出力を、次のコマンドの標準入力に受け渡すということができるのである。このような機能のことや、特にそれを実現する"|"という記号のことを、「''パイプ''」と呼ぶ。
パイプを使えば、たくさんのコマンドを数珠つなぎに連結して、あたかもひとつの大きなコマンドのようにすることができる。これはUNIXの極めて本質的な利点である。ひとつひとつ小さな機能を持った小さなコマンドを、標準入出力とパイプを介して組合せ、複雑で大きな処理をする、というのが「UNIXの上手な使いかた」なのである。
パイプを利用したコマンドの例として、以下のようなものは、日常、よく使われる:
$ ls -l /bin | less
これは、/binというディレクトリのファイルリストを表示するものだが、このディレクトリには非常にたくさんのファイルがあるので、画面ひとつには収まらない。そこで、パイプでlessというコマンドをくっつける。lessは、標準入力から得たデータを、画面の1ページづつに区切って表示する機能を持つ。従って、この一連のコマンドによって、/binのファイルのリストが、画面上を流れてしまわずに、1ページづつ表示される(進むにはスペースキーを押す。終了はq)。
!ヒアドキュメント
リダイレクトの特殊なケースとして、''ヒア・ドキュメント''という使い方がある。例として、以下のようにコマンドラインから打ち込んでみよ:
$ bc << EOF
2+3
2*3
EOF
すると、
5
6
と表示されるだろう。この場合、bcコマンドへの入力は、キーボードから行われたのだが、ぜんぶの入力が終ってEOFという語を最後に打ち込んではじめてbcコマンドが動作するという点で、普通のキーボード入力のときのbcコマンドの動作とは違っている。このような入力のしかたを、ヒア・ドキュメントという。
ヒア・ドキュメントは、実際はコマンドラインから使うことは少なく、むしろ後述する''シェルスクリプト''の中で、gnuplotなどのコマンドを操作するときによく使う。
!参考になるページ:
<[[Unix/Linux入門]]に戻る>