"tee" command の有用性

プログラムの間のパイプで渡されているデータを見てみたい時 "tee" command が非常に有用である このteeコマンドは標準出力からデータを受け取ってファイルに書き出し、また標準出力に再びそのデータを受け渡しする。 この方法であれば、pipでつないだプログラムの間で何かしらの問題が起こったとしてもどんなデータがパイプを通して受け渡しされているかを 調べることができるのだ。で、teeコマンドは以下のように使えるわけだ:

$ ps aux |tee filename |grep init

ここで"ps aux" の標準出力が"filename"というファイルに書き込まれながら、 "grep"コマンドは"ps aux"の標準出力の結果を受け取ることができる点が肝である。 この方法を使えば、パイプでつないだプログラムの間で何かしら問題が起こっていたとしても、 その問題をパイプで受け渡しているデータを調べることで判断できるのである。 さて、この場合"ps aux"の標準出力内容はfilenameは上書き保存されてしまう。それが嫌なら"-a" オプションを使うといいだろう

$ps aux | tee -a filename | grep init

Tips for vim

vimで管理者権限でファイルを編集する必要があるのに謝ってsudoを付け忘れていろいろ編集し始めてしまった時に使えるtipsとして以下のようなものがある.

:w !sudo tee %

Shellのhackがいろいろ詰まっているので解説しよう。

:wはファイルを保存するときによく使う定番のvimコマンドであるが、 :w newfilenameのような使い方ができることからもわかるように、 その機能の本質は, "bufferをファイルに送る"ということだ。 ここではshell commandがファイルに変わってデータを受けとっており、そのコマンドが 他ならぬ(管理者権限で実行された)teeコマンドというわけだ.

note : %は現在のファイル名

おまけ: :w !sudo cat > % じゃだめなの??

これはsudoがcatに適用されるがリダイレクト(>)には適用されないためだめ.

Ref :

explainshell.com - match command-line arguments to their help text