sudo .. » ファイル名でpermission denied

以下の様にsudoコマンドの結果をファイルに書き込もうとするとエラーになる場合がある。

$ sudo systemctl status nginx >> /var/log/nginx.log

systemctlコマンドはroot権限で実行されるが、>> /var/log/nginx.logの部分は実行ユーザーの権限で実行される。
そのため、/var/log/nginx.logに書き込む権限がない場合はpermission deniedで失敗する。

sudoコマンドの実行結果をroot権限で書き込みたい場合

root権限でリダイレクトしたい場合はsh -cを使って以下のように書く。

$ sudo sh -c "systemctl status nginx >> /var/log/nginx.log"

これであれば-cで渡したコマンド全体がroot権限で実行されるのでpermission deniedで失敗することはない。