teeコマンドの使い方

「コマンドの結果をファイルに出力したいけど、標準出力でも出力を見たい!」、という欲張りな要望に答えてくれる意外と頼もしいコマンド。

ちなみにサンプルが vagrant コマンドとか使ってますが、あくまで例の一つ。 rsync とかダラーッと出力されるもののほうが良かったかもしれない。


簡単な使い方


ファイルを上書きする

vagrant ssh-config --host 192.168.33.20 | tee result.txt


ファイルに追記する

-a オプションをつける。

vagrant ssh-config --host 192.168.33.20 | tee -a result.txt


sudo でファイルに書き込みできるようにする

リダイレクト先に書き込むときに特権が必要な場合、そのままではうまく書き込みできません。

以下は swappiness を変更する場合の例です。

$ cat /proc/sys/vm/swappiness 

60
$ sudo echo 0 >/proc/sys/vm/swappiness
-bash: /proc/sys/vm/swappiness: 許可がありません

そこで tee コマンドを使います。

$ echo 0 | sudo tee /proc/sys/vm/swappiness 

0
$ cat /proc/sys/vm/swappiness
0

いい感じにオンザフライで変更できました。


swappiness の蛇足

ちなみに蛇足ですが swappiness の設定で 0 を設定するのは Kernel 2.x 系では物理メモリを使い果たしてからスワップアウトするという意味になりますが、

Kernel 3.5 以上になると 0 の取扱いが変わって、物理メモリがなくなるとスワップアウトせずに OOMKiller が発動します。

なのでKernel 3.5 以上では 1 が適当です。


標準エラー出力もファイルに保存する

リダイレクトを使う。これをやらないと標準エラー出力だけファイルにロギングされないという事態になってしまう。

ping 9999 2>&1 | tee result.txt


参考サイト