「コマンドの結果をファイルに出力したいけど、標準出力でも出力を見たい!」、という欲張りな要望に答えてくれる意外と頼もしいコマンド。
ちなみにサンプルが 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 が適当です。
標準入力から突っ込んだテキストを sudo 権限で保存したい
# cat >hello.txt
world
# Ctrl+D で入力を終了
# cat hello.txt
world
これは下記のように書き換えられます。
$ sudo tee hello.txt >/dev/null
world
# Ctrl+D で入力を終了
$ cat hello.txt
world
tee でエコーバックされる内容はうざいので /dev/null
に捨てています。
標準エラー出力もファイルに保存する
リダイレクトを使う。これをやらないと標準エラー出力だけファイルにロギングされないという事態になってしまう。
ping 9999 2>&1 | tee result.txt