teeコマンドにはいろんな使い道がある
ファイルに書き込みつつ標準出力もしたいときに便利な$ tee
コマンド、意外といろんなことができることを知ったのでまとめてみる。
ちなみに名前の由来は入力を 2 方向に分岐して出力するのが「T」字型のパイプっぽいから。
command ──> tee ──> stdout
│
└────> file
1. 標準出力の内容をファイルに保存
$ ls | tee filelist.txt
パイプから他のコマンドの出力を受け取ってそのまま標準出力しつつ、ファイルに保存する。 一番ふつうの使い方。
$ ls | tee -a filelist.txt
a
オプションを付けると追記モードで書き込める。
2. 複数のファイルに同時に出力
$ ls | tee file1.txt file2.txt file3.txt
標準出力の内容を複数のファイルに同時に書き込める。
$ find . -type f -name "hoge*.txt" | xargs -I{} sh -c 'echo "Hoge fuga" | tee -a "{}"'
xargs と組み合わせて特定のファイルに一括で書き込む、なんてこともできそう。
3. sudo でファイルに書き込む
$ sudo echo "New config" > /etc/some.conf
例えば/etc/some.conf
に root ユーザーしか書き込み権限がない場合、>
によるリダイレクトはシェルが処理するので、echo
に sudo をつけても書き込めない。
$ echo "New config" | sudo tee -a /etc/some.conf
上記のように sudo 権限でtee
を実行することで、root 権限でファイルに書き込みを行うことができる。
4. tail -f しつつ別のログに書き込み
$ tail -f /var/log/some_log | tee log_backup.txt
ログを表示しながら別のファイルに流しておくことができる。
まとめ
tee コマンドで 四方八方 に データ発送 YO YO