標準入出力

 標準入出力とはデフォルトの入力元・出力先のことで、通常Linuxでは標準入力はキーボード、標準出力はディスプレイになっている。これらの入出力をユーザは自由に変更する事が出来る。
 例えば、コマンドへの指示をファイルから入力したり、実行結果をファイルに保存したりでき、これを「リダイレクト」と呼ぶ。
 また、コマンドの標準出力を別のコマンドの標準入力へ繋げることを「パイプ」と呼ぶ。
※コマンドには標準出力以外に「標準エラー出力」というものもあり、正常な実行結果以外の出力(エラーメッセージなど)がされる。

xargs 「オプション」 「コマンド」 「引数」
コマンドの標準出力を他のコマンドの引数として使用
 -n 引数の数:1回のコマンド実行でしようできる引数の数を制限

代表的なリダイレクトとパイプの使用例
コマンド > file コマンドの標準出力をfileに書き込む
コマンド >> file コマンドの標準出力をfileに追記する
コマンド < file コマンドはfileの内容を標準入力として受け取る
コマンド << 終了文字 終了文字を入力するまでキーボードから入力を続ける
コマンド 2> file コマンドの標準エラー出力をfileに書き込む
コマンド 2>> file コマンドの標準エラー出力をfileに追記する
コマンド > file 2>&1  コマンドの標準出力と標準エラー出力をfileに書き込む
コマンド >> file 2>&1 コマンドの標準出力と標準エラー出力をfileに追記する
コマンドA | コマンドB コマンドAの標準出力をコマンドBの標準入力に渡す
コマンド | tee file コマンドの標準出力を表示するとともにfileに書き込む


$ ls -l > ls.txt
   ←結果が表示されない
$ cat ls.txt ←「ls.txt」の内容表示
 合計 16
 drwxr-xr-x 2 root root 4096 1月 23 21:02 defconf
 -rw-r--r-- 1 root root 144 4月 15 15:04 hpbackup.sh
 drwxrwxr-x 2 user user 4096 6月 30 15:35 lpic
 drwxrwxr-x 2 user user 4096 6月 30 15:32 lpic1
 -rw-rw-r-- 1 user user 0 7月 1 18:46 ls.txt
   ↑「ls -l」コマンドの結果がファイルに書き込まれている
$ ls -l lpic >> ls.txt
$ cat < ls.txt
 合計 16
 drwxr-xr-x 2 root root 4096 1月 23 21:02 defconf
 -rw-r--r-- 1 root root 144 4月 15 15:04 hpbackup.sh
 drwxrwxr-x 2 user user 4096 6月 30 15:35 lpic
 drwxrwxr-x 2 user user 4096 6月 30 15:32 lpic1
 -rw-rw-r-- 1 user user 0 7月 1 18:46 ls.txt
 合計 8   ↓追記されている
 -rw-rw-r-- 1 user user 15 6月 30 15:29 101.txt
 -rw-rw-r-- 1 user user 15 6月 30 15:30 102.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:26 201.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:26 202.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:27 321.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:27 322.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:27 323.txt

$ ls -l nodata 2> lserr.txt
$ cat lserr.txt
 ls: nodata: そのようなファイルやディレクトリはありません
   ↑エラーメッセージがファイルに書き込まれている
$ nodata 2>> lserr.txt
$ cat lserr.txt
 ls: nodata: そのようなファイルやディレクトリはありません
 -bash: nodata: command not found ←追記されている

$ ls -al | sort ←実行結果を昇順に並べ替え
 -rw------- 1 user user 5160 7月 1 14:03 .bash_history
 -rw-r--r-- 1 user user 24 1月 5 2004 .bash_logout
 -rw-r--r-- 1 user user 124 1月 5 2004 .bashrc
 -rw-r--r-- 1 user user 191 1月 5 2004 .bash_profile
 -rw-r--r-- 1 user user 5542 1月 5 2004 .canna
 -rw-r--r-- 1 root root 144 4月 15 15:04 hpbackup.sh
 -rw-rw-r-- 1 user user 90 7月 1 19:09 lserr.txt
 -rw-rw-r-- 1 user user 683 7月 1 18:46 ls.txt
 drwx------ 2 user user 4096 4月 13 03:55 .ssh
 drwx------ 6 user user 4096 7月 1 19:09 .
 drwxr-xr-x 2 root root 4096 1月 23 21:02 defconf
 drwxr-xr-x 6 root root 4096 1月 23 20:05 ..
 drwxrwxr-x 2 user user 4096 6月 30 15:32 lpic1
 drwxrwxr-x 2 user user 4096 6月 30 15:35 lpic
 合計 96
   ↑1データ=1行の為、先頭の文字で並べ替えられている

$ ls -al lpic1 | tee ls.txt
 合計 20 ←結果表示される
 drwxrwxr-x 2 user user 4096 6月 30 15:32 .
 drwx------ 6 user user 4096 7月 1 19:09 ..
 -rw-rw-r-- 1 user user 15 6月 30 15:32 101.txt
 -rw-rw-r-- 1 user user 15 6月 30 15:32 102.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:32 201.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:32 202.txt
$ cat ls.txt
 合計 20 ←ファイルにも書き込まれている
 drwxrwxr-x 2 user user 4096 6月 30 15:32 .
 drwx------ 6 user user 4096 7月 1 19:09 ..
 -rw-rw-r-- 1 user user 15 6月 30 15:32 101.txt
 -rw-rw-r-- 1 user user 15 6月 30 15:32 102.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:32 201.txt
 -rw-rw-r-- 1 user user 0 6月 30 15:32 202.txt