[シェル芸]rootが所有者のファイルへリダイレクトする方法


皆さんこんにちは。昼間のパパは @nullpopopo です。わけがわかりませんΞ(´ ゚_。`) 先ほどTwitterで「sudo echo 'hoge' >> /path/to/fuga(rootしか書き込めないファイル)」的なのがRTされてきたのですが、実はこれだとsudoつけても書き込めないんですよね。chmodして書き込むわけにもいかない場合に、シェル芸でスマートに書き込む方法について実験してみました。

まずはファイルを作りましょう。

$ sudo touch hoge
$ ls -l hoge
-rw-r--r-- 1 root root 0 12月 17 12:51 hoge

sudoをつけて、文字列をファイルにリダイレクトすると・・・

$ sudo echo 'aho' > hoge
bash: hoge: 許可がありません

というわけで、teeくんの出番です。

$ echo 'aho' | sudo tee hoge 
aho

リダイレクトされましたね。

$ cat hoge
aho

それでは、追記してみましょう。

$ echo 'aho' | sudo tee --append hoge 
aho
$ cat hoge
aho
aho

いちいちchownやchmodしなくてもよいですね。標準出力にahoが表示されるのが嫌でしたら、最後に > /dev/null をつければOKです。ね、簡単でしょう?

USP MAGAZINE vol.20