machida.cc

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

#技術 #UNIX