sudoを使用してrootが所有するファイルにテキストを挿入するには? [コピー]

sudoを使用してrootが所有するファイルにテキストを挿入するには? [コピー]

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

次のコマンドを実行するとsudo echo 'text' >> /file.txt失敗します。

bash: /file.txt: Permission denied

ベストアンサー1

リダイレクトは、適用されたコマンドではなくシェルによって実行されるため、機能しません。ただし、シェルはrootのようにrootとして実行されませんecho 'text'

ファイルへの書き込みにはルートアクセスが必要ですが、データを生成する必要がない場合は、一般的な方法は以下を使用することですtee

echo 'text' | sudo tee -a /file.txt

teeまた、テキストを標準出力として印刷します。これをサイレントにしてシェルを追加する(>>)のように動作させるには、stdoutを次にルーティングします/dev/null

echo 'text' | sudo tee -a /file.txt > /dev/null

データを生成するためにルートアクセスが本当に必要な場合は、2つの別々のsudoコマンドを実行するか、内部でシェルを実行しsudoてそこにリダイレクトできます(引用符に注意してください)。

sudo echo 'text' | sudo tee -a /file.txt
sudo sh -c 'echo "text" >>/file.txt'

追加せずに上書きするときに演算子>()を使用してset -o noclobber既存のファイルを切り捨てることを拒否するシェルに慣れている場合は、この保護が適用されないことに注意してください。無視sudo sh -c 'echo >/etc/passwd'してその設定をランチャーにも適用する必要があります。sudo tee /etc/passwd/etc/passwdsudo sh -o noclobber -c 'echo >/etc/passwd'noclobbershsudo

おすすめ記事