teeコマンドの使い方|画面表示とファイル保存を同時に行う方法コマンド


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドP-T, テキスト処理コマンド > teeコマンドの使い方|画面表示とファイル保存を同時に行う方法コマンド
「コマンドの出力結果を画面で確認しながら、同時にファイルにも保存したい」
「sudo権限が必要なファイルにリダイレクトしようとしたら、Permission deniedになった」

この記事では、teeコマンドの基本的な使い方から、sudo権限でのファイル書き込み、ログ記録への活用まで、実務で役立つテクニックを解説します。
【この記事でわかること】
・tee は画面表示とファイル保存を同時に行うパイプ中継コマンド
・sudo tee は「sudo >」が使えない問題の定番の解決策
・-a(追記)と 2>&1 を組み合わせれば、完全な実行ログを残せる

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

teeコマンドとは?

teeコマンドは、標準入力から受け取ったデータを「画面(標準出力)」と「ファイル」の両方に同時に出力するコマンドです。

名前の由来は、配管のT字分岐(T-pipe)です。水が2方向に流れるように、データの流れを画面とファイルに分岐させます。

通常のリダイレクト(>)ではファイルに保存すると画面に表示されず、画面に表示するとファイルに残りません。teeを使えば、この「どちらか片方」の制約を解消できます。

基本的な使い方

1. 画面に表示しながらファイルに保存する

パイプ(|)でteeに渡すのが基本の形です。

# lsの結果を画面に表示しつつ、filelist.txtに保存 ls -l | tee filelist.txt

画面にはls -lの結果がそのまま表示され、同時にfilelist.txtにも同じ内容が書き込まれます。

2. ファイルに追記する(-a)

デフォルトではteeはファイルを上書きします。既存の内容を残して追記するには -a(append)オプションを使います。

# 実行ログを追記していく echo "処理開始: $(date)" | tee -a /var/log/myapp.log some_command echo "処理完了: $(date)" | tee -a /var/log/myapp.log

3. 複数のファイルに同時出力する

teeにはファイル名を複数指定できます。

# 3つのファイルに同時出力 df -h | tee disk1.log disk2.log disk3.log

バックアップ目的で複数箇所にログを残したい場合に便利です。

応用・実務Tips

1. sudo権限が必要なファイルに書き込む(sudo tee)

これがteeの最も実用的な使い方の1つです。

リダイレクト(>)はシェルが処理するため、sudo echoとしてもファイルへの書き込みにsudo権限が適用されません。

# これはPermission deniedになる sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf -bash: /etc/resolv.conf: Permission denied # sudo teeなら書き込める echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

画面への出力が不要な場合は、/dev/nullにリダイレクトします。

# 画面出力を抑制 echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null

追記したい場合は sudo tee -a を使います。

# /etc/hostsに1行追記 echo "192.168.1.100 myserver" | sudo tee -a /etc/hosts

2. パイプラインの途中経過を確認する

複数のコマンドをパイプでつないだ処理で、途中の出力を確認しながら次に渡すことができます。

# grepの結果を確認しつつ、wcで行数をカウント cat /var/log/messages | grep "error" | tee /tmp/errors.log | wc -l

画面にはwc -lの結果(行数)が表示され、grepで抽出した内容は/tmp/errors.logに保存されます。

3. スクリプトの実行ログを残す

スクリプト全体の出力をログに記録しつつ、画面でも確認する使い方です。

# スクリプトの出力をすべてログに記録 ./deploy.sh 2>&1 | tee deploy_$(date +%Y%m%d).log

2>&1 で標準エラー出力も標準出力にまとめてからteeに渡すのがポイントです。エラーメッセージもログに残ります。

トラブルシュート・エラー対処

「Permission denied」が出た時の対処法

書き込み先のファイルに権限がない場合に発生します。

$ echo "test" | tee /etc/myconfig tee: /etc/myconfig: Permission denied # sudo teeで解決 $ echo "test" | sudo tee /etc/myconfig

ファイルを意図せず上書きしてしまった場合

teeはデフォルトで上書きです。追記のつもりが -a を忘れてファイルを空にしてしまうことがあります。

対策として、重要なファイルへの書き込み前にはバックアップを取る習慣をつけましょう。

# バックアップを取ってから書き込み cp /etc/hosts /etc/hosts.bak echo "192.168.1.100 myserver" | sudo tee -a /etc/hosts

本記事のまとめ

やりたいこと コマンド
画面表示しつつファイルに保存する コマンド | tee ファイル名
ファイルに追記する コマンド | tee -a ファイル名
複数ファイルに同時出力する コマンド | tee file1 file2
sudo権限でファイルに書き込む echo "内容" | sudo tee ファイル名
sudo権限でファイルに追記する echo "内容" | sudo tee -a ファイル名
画面出力を抑制してファイルのみに書く コマンド | tee ファイル名 > /dev/null
実行ログを記録する(エラー含む) コマンド 2>&1 | tee log.txt

サーバー作業の証跡を確実に残したい方へ

tee によるログ記録は、トラブル発生時に必ず役立つ運用の基本です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。