sudoしているのに、リダイレクトすると「許可がありません/Permission denied」になる

構成

CentOS release 5.6 (Final)
GNU bash version 3.2.25(1)-release (x86_64-redhat-linux-gnu)



問題

リダイレクトすると「許可がありません/Permission denied」と表示されます。これはlsのみがsudoされて、リダイレクトはログインユーザーで実行されたためです。

$ sudo ls > /etc/foo
-bash: /etc/foo: 許可がありません



解決方法

リダイレクトをteeに置き換えます。teeは標準入力から読んだ内容を標準出力とファイルに書き出すコマンドです。

$ ls | sudo tee /etc/foo
bin

元のリダイレクトと同じようにファイルにだけ書き出したいときは、標準出力を/dev/nullにリダイレクトします。

$ ls | sudo tee /etc/foo > /dev/null

>>のように追記したいときは、-aオプションを使います。

$ ls | sudo tee -a /etc/foo