web-dev-qa-db-ja.com

sudoを使用してルート所有ファイルにファイルを追加しようとすると、許可が拒否されました

これは、Sudoを使用してファイル内のデータを別のファイルに追加しようとすると、「Permission denied」というシェルコマンドです。

Sudo cat add_file >> /etc/file

/etc/fileのファイルはroot(つまり私)が所有しており、その許可はrw-r--r--です。しばらく動作させるためにrootになるべきですか、それともSudoに回避策がありますか?

43
Desmond Hume

bashSudoとして実行:

$ Sudo bash -c "cat add_file >> /etc/file"

$ whoami;Sudo bash -c "whoami";whoami
iiSeymour
root
iiSeymour
63
Chris Seymour

代わりにこれを試してください:

Sudo tee -a /etc/file < add_file

Bashやsh -c commandを実行するよりも軽い

26
Gilles Quenot

面白い可能性はed(標準エディター)を使用することです:

Sudo ed -s /etc/file <<< $'r add_file\nwq'

私はこの素晴らしい答えに賛成しないことは知っていますが、とにかくここにそれを含めたかったのです(面白いから)。できた!

9
gniourf_gniourf

コマンド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"

5
Maxime Chéramy

@ gniourf_gniourf answerと同様のアプローチですが、exを使用します。

Sudo ex +"r in.txt" -cwq out.txt

これはvi/vim Ex-mode(-e)。

このインプレース編集の例は、シェルの回避策内でシェルパイピング、FIFO、またはシェルを使用しないため、シンプルで安全で便利なアプローチです。

スクリプトの目的でパフォーマンスを向上させるには、無音モード(-s)。

1
kenorb