Linuxコマンド一覧

teeコマンド|画面に出しながらファイルにも保存する

__ __ _ _____
\ \ / /__| |_|_ _|__ _ __ _ __ ___
\ \ /\ / / _ \ '_ \| |/ _ \ '__| '_ ` _ \
\ V V / __/ |_) | | __/ | | | | | |
\_/\_/ \___|_.__/|_|\___|_| |_| |_| |_
 
tee を試すためのサンドボックスです。実機のファイルには影響しません。
user@webterm:~/project$
 

tee はパイプの途中で結果をファイルにも書き出すコマンドです。`>` との違い、追記の `-a`、権限のあるファイルに書き込む `sudo tee` の使い方を、ブラウザ上のターミナルで打ちながら確認できます。

最終更新: 2026-09-06

書式

コマンド | tee [オプション] ファイル...

受け取った内容を画面とファイルの両方に出します。

まず打ってみる

grep の結果を、目で見つつファイルにも残します。

$ grep ERROR logs/app.log | tee errors.txt
ERROR connection refused
ERROR timeout
ERROR connection refused

画面に出ました。 同時に、同じ内容がファイルにも入っています。

$ ls
errors.txt  logs/
$ cat errors.txt
ERROR connection refused
ERROR timeout
ERROR connection refused

> を使うと画面には何も出ません。 見ながら残したいときが tee の出番です。

パイプの途中で保存する

tee は受け取った内容をそのまま次へ流します。 だから、パイプの途中に挟めます。

$ grep ERROR logs/app.log | tee errors.txt | wc -l
3

最終的に欲しいのは件数(3)ですが、途中の一覧も errors.txt に残りました。 長いパイプを組むときに、途中経過を確かめる用途でも使えます。

追記する

-a を付けると、上書きせずに末尾へ足します。

$ echo 'ERROR manual entry' | tee -a errors.txt
ERROR manual entry
$ cat errors.txt
ERROR connection refused
ERROR timeout
ERROR connection refused
ERROR manual entry

権限のあるファイルに書く

tee がいちばん効くのはこの場面です。 /etc の下のファイルには、そのままでは書き込めません。

$ echo '10.0.0.1 db' >> /etc/hosts
zsh: permission denied: /etc/hosts

sudo を付けても、>> を実行するのはシェルなので結果は変わりません。 書き込む側を root にするために、tee を使います。

$ echo '10.0.0.1 db' | sudo tee -a /etc/hosts
10.0.0.1 db
$ cat /etc/hosts
127.0.0.1 localhost
10.0.0.1 db

sudo tee -a は、設定ファイルに1行足すときの定番の書き方です。

複数のファイルに同時に書く

ファイル名を並べると、全部に同じ内容が入ります。

$ grep INFO logs/app.log | tee info.txt summary.txt
INFO  server started
INFO  retrying
$ ls
errors.txt  info.txt  logs/  summary.txt

実務での使いどころ

tee は、流れを止めずに記録を残したいときに打つコマンドです。

場面打ち方
結果を見ながらファイルにも残すgrep ERROR app.log | tee errors.txt
パイプの途中経過を保存する... | tee mid.txt | wc -l
設定ファイルに1行足すecho "..." | sudo tee -a /etc/hosts
ログを追記で貯める... | tee -a run.log

つまずきやすいところ

-a を忘れると上書きです。 tee run.log は毎回ファイルを作り直します。 貯めたいときは必ず -a を付けてください。

sudo> には効きません。 リダイレクトを処理するのはシェルなので、sudo の権限で動くのはコマンドだけです。 これが sudo tee という書き方が生まれた理由です。

画面に出したくないときは向きません。 tee は必ず画面にも出します。 静かに書き込みたいだけなら >>> を使ってください。

手を動かして覚える

webterm.appこのサイト

learn.webterm.app別のサイト

>_WEBTERM LEARN

WebTerm Learn|1つのコマンドから、使える状態へ

コマンドは単体で覚えるより、実際の作業の流れの中で使うほうが身につきます。順番に積み上げていくコースがあります。

コースを見る

関連するコマンド

cat / grep / wc / sudo

よくある質問

`>` と何が違いますか?
`>` は画面に出さずファイルへ送るだけです。tee は**画面にも出しつつ**ファイルにも書き、さらにその先へパイプで渡せます。
なぜ tee という名前なのですか?
配管の T 字管(tee)から来ています。1本の流れを2方向に分けるかたちが、この名前のとおりです。
追記したいときはどうしますか?
`-a` を付けます。付けないと上書きです。
sudo を付けたのに書き込めません。
`sudo echo x > /etc/hosts` の `>` を実行するのはシェル(あなたの権限)なので、sudo は届きません。`echo x | sudo tee -a /etc/hosts` と書けば、書き込む tee が root で動きます。
複数のファイルに同時に書けますか?
書けます。`tee a.txt b.txt` のようにファイル名を並べるだけです。