sudoでリダイレクトを使用する方法[冗長]

sudoでリダイレクトを使用する方法[冗長]

重複の可能性:
書き込み権限のないファイルに標準出力をリダイレクトします。

はい、rootにアップグレードできます(そしておそらくそうします)。しかし、これがうまくいかない理由は何ですか?

sudo cat .mplayer/config >> /home/griff/.mplayer/config
zsh: permission denied: /home/griff/.mplayer/config

sudoすべてのコマンドを実行できるように構成されているため、制限はありません。

答え1

回答者としてごみ処理 今後、これが起こる理由は>> 実際のコマンドが実行される前に発生します。sudo高い権限で実行されません。

別のアプローチは、コマンド全体を別のbashコマンドシェルにラップすることです。

sudo bash -c "cat .mplayer/config >> /home/griff/.mplayer/config"

これにより、特権を持つ新しいbashシェルが起動し、sudoコマンドを実行して閉じます。

答え2

コマンドが何であれ、>>コマンドが実行される前にリダイレクトが常に完了するため、これは失敗します。

この場合、シェルはrootではなくユーザーとして実行され、.../config現在の権限(root権限ではなく)を使用してファイルに接続しようとしますが、sudoが実行される前に失敗します。

コマンド実行の一般的な例は次のとおりです。

sudo tee --append /home/griff/.mplayer/config < .mplayer/config

(読み取り権限があると仮定.mplayer/config)。 sudoのrootコンテキストで/home/griff/...開かれたので、ファイルに書き込むroot権限があります。tee

私はこのアプローチのファンではありません。内容を.mplayer/configstdoutにコピーし、それをグリフファイルに追加するためです。しかし、動作します。

答え3

渡す

sudoはどのコマンドでも実行できます

概念的には、sudoがすべてのコマンドを実行するように構成できることを意味しますか、またはおおよそのシステムでsudoを構成したことを意味しますか<user> <host(s)>=<opt(s)> ALL

試してみましたsudo -u 0 cat ...か?これにより、ユーザーIDが許可されている場合、sudoはrootとしてコマンドを実行します。

何を印刷しますかsudo -l

関連情報