LinuxServer シェルとコマンド操作について 入力と出力の組み合わせ
Linuxではキーボードからコマンドを打つのも、ファイルの読み込むのも入力として
同等に扱い、コマンドの結果をディスプレイに表示するのも、ファイルに書き出すのも
出力として同等に扱います。
このデータの入出力に伴う流れをストリームと呼び、Linuxではストリームを扱う為、
3つの基本的な入出力用のインターフェースが定められています。
また、結果の出力を次の入力に使用するための仕組みも定められています。
標準入出力
標準入力はデータを受け入れる標準的な入口で、キーボードからの入力が基本的に標準入力になります。
標準出力はデータを出力する標準的な出口で、ディスプレイへの出力が基本的に標準出力になります。
標準エラー出力とはプログラムのエラーメッセージの出力ストリームのことで、
ディスプレイへの出力が基本的に標準エラー出力になります。
パイプ「|」
パイプ「|」はコマンドやプログラムからの出力を別のコマンドやプログラムの入力に渡す機能です。
[コマンド]
$ ls | wc
[実行結果]
16 16 181
ここでは、カレントディレクトリのファイルを調べ(lsコマンド)、行数、単語数、文字数を(wcコマンド)表示しています。
また、’dmesg’コマンドなど大量の画面出力が発生するコマンドについて、’less’コマンドなどをパイプで繋ぎ、
1画面ずつ出力することもできるようになります。
[コマンド]
$ dmesg | less
teeコマンド
パイプでは前段のコマンドの結果が出力されません。
他のプログラムの標準出力を画面に表示しつつ、ファイルに書き出す際等には
‘tee’コマンドを使用します。
‘tee’コマンドは標準入力から読み込んだデータを標準出力とプログラムの両方に渡します。
[コマンド書式]
tee -オプション 出力ファイル名
出力結果を存在しないファイルに書き出そうとすると、ファイルは作成され、
出力先ファイルが存在している場合、出力結果は上書きされます。
オプション’-a’で出力先ファイルに追記します。
[コマンド]
$ ls | tee dirlist.txt
[実行結果]lsの結果が標準出力(ディスプレイ)に表示され、dirlist.txtファイルが作成されます
201211081344
Maildir
TimeSheet_180.zip
hoge1.txt
hoge2.txt
hoge3.txt
hoge4.txt
kekka01.log
kekka02.log
kekka03.log
kekka05.log
mylib
testdir01
textarc
touchfile01
xargsコマンド
xargsコマンドは標準入力から受け取った文字列をコマンドの引数と渡し、コマンドを実行します。
[コマンド書式]
xargs -オプション コマンド
オプション’-a’でデータを標準入力に代わり、ファイルから読み込みます。
[コマンド]カレントディレクトリで’kekka0’を含むファイルを表示
$ ls kekka0*
kekka01.log kekka02.log kekka03.log kekka05.log
[コマンド]カレントディレクトリで’kekka0’を含むファイルを削除
$ ls kekka0* | xargs rm
[実行結果]
$ ls kekka0*
ls: kekka0* にアクセスできません: そのようなファイルやディレクトリはありません
リダイレクト
コマンドやプログラムの実行結果は通常、画面に出力されます。(標準出力)
また、コマンドの入力はキーボードから行われます。(標準入力)
この標準出力先や、標準入力元を変更することを「リダイレクト」といいます。
リダイレクトを使用すると画面に表示するデータをファイルに出力したり、
あらかじめ用意しておいたファイルを入力元としてコマンドを実行したり
することが可能です。
リダイレクトはリダイレクト演算子と呼ぶ、「>」「は標準出力を、2>は標準エラー出力を表します。
(1は省略できます。)
リダイレクトとパイプの使い方をまとめます。
書式 | 説明 |
コマンド > ファイル | コマンドの標準出力をファイルに書き込みます 同名のファイルがある場合は、内容を上書きします |
コマンド >> ファイル | コマンドの標準出力をファイルに追記します |
コマンド 2> ファイル | コマンドの標準エラー出力をファイルに書き込みます |
コマンド 2>> ファイル | コマンドの標準エラー出力をファイルに追記します |
コマンド > ファイル 2>&1 | コマンドの標準出力と標準エラー出力をファイルに書き込みます |
コマンド >> ファイル 2>&1 | コマンドの標準出力と標準エラー出力をファイルに追記します |
コマンド &> ファイル | コマンドの標準出力と標準エラー出力をファイルに書き込みます |
コマンド < ファイル | ファイルの内容をコマンドの標準入力とします |
コマンド << 指定文字列 | 指定した文字列が入力されるまで標準入力からの入力を続けます これをヒアドキュメントといい、指定文字列には「EOF」が使われます |
コマンド1 | コマンド2 | コマンド1の標準出力をコマンド2の標準入力に渡します |
コマンド1 2>&1 | コマンド2 | コマンド1の標準出力と標準エラー出力をコマンド2の標準入力に渡します |
コマンド1 | tee ファイル | コマンド2 | コマンド1の標準出力をファイルに書き出し、コマンド2の標準入力に渡します |
[コマンド]カレントディレクトリの内容をfilelist.txtに記入
$ ls -l > filelist.txt
[コマンド] heardoc.txtに書き込む内容を標準入力から送る
$ cat > heardoc.txt < This
> is
> an
> example
> here document
> .
> EOF
EOFの前段までが標準入力(キーボード)から入力した内容になります。