LoginSignup
340
288

More than 1 year has passed since last update.

teeコマンドの使い方

Last updated at Posted at 2013-10-09

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

ちなみにサンプルが 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

参考サイト

340
288
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
340
288