標準出力、標準エラー出力
標準出力をファイルにリダイレクト
$ ls /xxxx > list.txt
標準エラー出力をファイルにリダイレクト
$ ls /xxxx 2> error.txt
標準出力と標準エラー出力を、それぞれ別のファイルにリダイレクト
$ ls /xxxx > list.txt 2> error.txt
標準出力と標準エラー出力をひとつのファイルにリダイレクト
$ ls /xxxx > result.txt 2>&1
上記の意味は>で標準出力をresult.txtへリダイレクトし、標準エラー出力(2>)を、標準出力(&1)へリダイレクトしているので、結果として標準エラー出力もresult.txtへリダイレクトされる。
標準入出力の数値の意味は以下
0: 標準入力
1: 標準出力
2: 標準エラー出力
noclobber
なおリダイレクトで出力したファイルは上書きしてしまう。重要なファイルをうっかり上書きしてしまう危険がある。常に>>を使って、追記しかしないという手もあるが、以下の設定で上書きを防止できる。
set -o noclobber
上記の設定により既存のファイルを上書きしようとすると以下のように表示される。
$ echo abc > file.txt
-bash: file.txt: 存在するファイルを上書きできません
/dev/null
$ ls -l /dev/null
crw-rw-rw-. 1 root root 1, 3 12月 18 08:33 /dev/null
上記はスペシャルファイルと呼ばれる特別なファイルで、
- 入力先に指定しても、何も内容を返さない。
- 出力先に指定しても、どこにも保存されない。
入力をクリアしたい場合、出力をどこにもしたくない場合に使用する。例えば、本来標準エラー出力に出力されるエラーが、あらかじめわかっていて不要な場合などに使う。
$ 何らかのコマンド 2> /dev/null
パイプライン
標準出力を次のコマンドに送りたい場合にはパイプラインを使う。
$ history | less
標準出力に加えて標準エラー出力も次のコマンドに送りたい場合は、標準エラー出力を標準出力へリダイレクトして、パイプラインを使う。
$ ls -l / /xxx 2>&1 | less
フィルタ
標準入力を入力として受け取り、標準出力に出力するコマンドをフィルタと呼ぶ。
代表的なフィルタコマンド
- cat
- head
- tail
- grep
- sort
- uniq
- tac
- wc
フィルタコマンドの活用例
/binディレクトリ配下ファイルサイズが大きい上位5つを表示
$ du -b /bin/* | sort -n | tac | head -n 5