sudoをつけてワイルドカードでlsするとPermission deniedになる

linuxのターミナルを使っているとまれに遭遇するエラー。

rootしか見れないディレクトリで、普通にlsをすると見えるのに、
ls *とワイルドカードをつけると読めなくなる場合があります。
これ、ワイルドカードの展開においてsudoが消えてしまうのが原因なのですが。
とりあえず対処法を。

sh -cでくくる

これが基本。
sudo sh -c 'ls -l /var/log/httpd/*0310'とか。
こうすればちゃんと読めます。

シェルスクリプト書く

for inで回してsudoして実行。
悪くはないかも。
手間はかかるけど。

一時的に権限付与する

まあこっちのほうが楽かも。
見終わったら権限戻すとか。

もちろんlsに限らずrmとかでも同様の現象になりますが、同様にsh -cでくくれば動きます。
とりあえず普通にワイルドカード叩いても動いてくれないので覚えておきましょう。

Author Info(オガティ

エンジニアとして勤め、インフラ周りの開発を経た後Web業界へ異動。
プライベートでもブログ「ogatism」の運営や電子書籍の執筆、占星術師としての活動など幅広い分野で活動中。
詳細はこちら

占い鑑定レポート作成サービス受付中

◆ ogatismをFeedlyに登録 ◆
follow us in feedly