これは、Sudoを使用してファイル内のデータを別のファイルに追加しようとすると、「Permission denied」というシェルコマンドです。
Sudo cat add_file >> /etc/file
/etc/file
のファイルはroot
(つまり私)が所有しており、その許可はrw-r--r--
です。しばらく動作させるためにroot
になるべきですか、それともSudo
に回避策がありますか?
bash
をSudo
として実行:
$ Sudo bash -c "cat add_file >> /etc/file"
$ whoami;Sudo bash -c "whoami";whoami
iiSeymour
root
iiSeymour
代わりにこれを試してください:
Sudo tee -a /etc/file < add_file
Bashやsh -c command
を実行するよりも軽い
面白い可能性はed
(標準エディター)を使用することです:
Sudo ed -s /etc/file <<< $'r add_file\nwq'
私はこの素晴らしい答えに賛成しないことは知っていますが、とにかくここにそれを含めたかったのです(面白いから)。できた!
コマンドSudo cat add_file
の結果をファイル/ etc/fileに書き込もうとしています。そしてどうやらあなたはその権利を持っていません。
man Sudo
はその例を示します:
To make a usage listing of the directories in the /home partition. Note that this runs the commands in a sub-Shell to make the cd and file redirection work. $ Sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
だからあなたは試してみてください:
Sudo sh -c "cat add_file >> /etc/file"
@ gniourf_gniourf answerと同様のアプローチですが、ex
を使用します。
Sudo ex +"r in.txt" -cwq out.txt
これはvi
/vim
Ex-mode(-e
)。
このインプレース編集の例は、シェルの回避策内でシェルパイピング、FIFO、またはシェルを使用しないため、シンプルで安全で便利なアプローチです。
スクリプトの目的でパフォーマンスを向上させるには、無音モード(-s
)。