はじめに

こんにちは!今回はteeコマンドについて解説します。

teeは標準入力を受け取って、それをファイルに保存しながら、同時に標準出力に表示するコマンドです。パイプの途中で出力を保存したい時に超便利!

複雑なパイプラインでも途中結果を確認したい時に活躍するコマンドなので、これを機にマスターしちゃいましょう!

teeコマンドとは

teeは、標準入力からデータを読み込んで、指定したファイルに書き込みながら、同時に標準出力に出力する外部コマンドです。“tee"は配管のTの形から来た命名ですね。

パイプの途中で途中結果をファイルに保存する必要がある時に重宝します。複数ファイルに同時に保存することもできます。

基本構文

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

パイプで標準出力を受け取り、指定したファイルに保存します。

主なオプション

オプション 説明
-a ファイルに追記(上書きしない)
-i 割り込み信号(SIGINT)を無視
-p 割り込み信号を無視(GNU拡張)
-u バッファを使わない(出力を即座に反映)

使用例

例1: パイプの途中結果をファイルに保存

1
cat /etc/passwd | tee users.txt | wc -l

実行結果:

1
42

ファイルは保存されつつ、同時にwc -lの結果も表示されます。

例2: 複数ファイルに保存

1
echo "Hello World" | tee file1.txt file2.txt file3.txt

実行結果:

1
Hello World

3つのファイルに同時に内容を保存できます。

例3: ファイルに追記する

1
echo "New Line" | tee -a existing.txt

実行結果:

1
New Line

-aオプションで既存ファイルに追記します。

例4: 複数行を複数ファイルに保存

1
printf "Line 1\nLine 2\nLine 3" | tee output1.txt output2.txt

実行結果:

1
2
3
Line 1
Line 2
Line 3

複数行のデータを複数ファイルに同時に保存できます。

例5: コマンドの結果とエラーを保存

1
ls /etc/ | tee ls_result.txt | head -10

実行結果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
acpi
adduser
alternatives
apparmor
apt
aptsources
bash_completion.d
bashrc
bindresvport.blacklist
ca-certificates

ls の結果をファイルに保存しながら、headで先頭10行だけ表示します。

例6: パイプラインの途中で確認

1
cat data.csv | tee debug.log | grep "error" | tee errors.txt

実行結果:

1
2
error: connection failed
error: timeout

複数のteeを組み合わせて、途中結果を複数のファイルに保存できます。

例7: /dev/nullで出力を抑制

1
echo "This saves to file" | tee output.txt > /dev/null

実行結果:

1
(出力なし)

標準出力を/dev/nullにリダイレクトして、ファイルだけに保存します。

例8: sudo付きでファイルに保存

1
echo "new content" | sudo tee /etc/important.conf

実行結果:

1
new content

seatでroot権限が必要なファイルに保存できます。

例9: 複数のコマンド結果を1ファイルに保存

1
(echo "=== Start ===" && date && echo "=== End ===") | tee report.txt

実行結果:

1
2
3
=== Start ===
Fri Jan 3 10:00:00 JST 2026
=== End ===

複数コマンドの結果を1ファイルにまとめて保存できます。

例10: ログファイルに追記しながら処理

1
./process.sh 2>&1 | tee -a process.log

実行結果:

1
(スクリプトの出力)

スクリプトの標準出力とエラー出力を同時にログファイルに追記します。

Tips・注意点

パイプとリダイレクトの使い分け

teeとリダイレクトは違う役割があります。

1
2
3
4
5
# tee: 画面にも表示しながら保存
cat file.txt | tee output.txt

# リダイレクト: ファイルにだけ保存(画面には表示しない)
cat file.txt > output.txt

複数ファイルへの同時保存

teeは複数ファイルを指定できるので、複数回のteeより効率的です。

1
2
3
4
5
# 非効率
cat data.txt | tee file1.txt | tee file2.txt | tee file3.txt

# 効率的
cat data.txt | tee file1.txt file2.txt file3.txt

/dev/nullで出力を抑制

標準出力を不要な場合は/dev/nullへリダイレクトします。

1
echo "Save only" | tee output.txt > /dev/null

実践的な使い方

ビルドログを保存しながら実行

1
./build.sh 2>&1 | tee build.log

ビルドの進行状況を見ながら、同時にログファイルに記録します。

デプロイメントプロセスのログ記録

1
2
3
4
5
(
  echo "Deploy started at $(date)"
  ./deploy.sh
  echo "Deploy finished at $(date)"
) | tee -a deploy_$(date +%Y%m%d).log

デプロイメント結果を日付付きのログファイルに追記します。

パイプラインの途中結果を確認

1
2
3
4
5
6
cat large_file.txt | \
  tee step1.txt | \
  sed 's/old/new/g' | \
  tee step2.txt | \
  grep "pattern" | \
  tee final.txt

複数のstepで途中結果を確認しながら処理を進めます。

まとめ

teeコマンドのポイント:

  • 標準出力をファイルに保存しながら表示する基本コマンド
  • -aオプション: ファイルに追記(上書きしない)
  • 複数ファイルに同時に保存できる
  • パイプラインの途中で途中結果を確認・保存できる
  • リダイレクト>と異なり、画面にも出力が表示される
  • よく使う組み合わせ: command | tee output.txtcommand | tee -a log.txt

パイプラインで途中結果を確認したい時はteeを使いましょう!