🐧 Linux 総合学習プラットフォーム

sudo echo x > /etc/file が Permission denied になる

症状(よく出るエラー)

sudo echo 'nameserver 8.8.8.8' > /etc/resolv.conf を実行すると bash: /etc/resolv.conf: Permission denied。sudo を付けているのに書き込めない。

原因

リダイレクト(>)を処理するのは sudo ではなく、コマンドを起動する前のシェル自身である。つまり一般ユーザー権限のシェルが先に /etc/resolv.conf を開こうとして拒否され、sudo echo の部分には到達すらしない。sudo が昇格させるのは echo だけで、> の先はずっと自分の権限のまま、というのがこのエラーの正体。

直し方

書き込み側も root で行う形に変える。定番は echo 'nameserver 8.8.8.8' | sudo tee /etc/resolv.conf(追記なら tee -a)で、tee が root 権限でファイルを開くため成功する。もう一つの手は sudo sh -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf' のように、リダイレクトごと root のシェルに渡す方法。

▶ 学習アプリでしっかり学ぶ