web-dev-qa-db-ja.com

Sudo viを使用してrootが所有するファイルを更新できるのに、Sudo echo "Thing" >>ファイルで行を追加できないのはなぜですか?

/etc/httpd/conf.d/vhosts.confファイルにインクルードを追加できるように、別のWebサイトからのWebサイトの自動移行を行うスクリプトが欲しいのですが。

しかし、echoを使用してファイルの末尾に文字列を追加しようとすると、次のようになります。

$ Sudo echo "Include thing" >> /etc/httpd/conf.d/vhosts.conf
-bash: /etc/httpd/conf.d/vhosts.conf: Permission denied

それでも、vi /etc/httpd/conf.d/vhosts.confを実行して、行を追加し、:wqファイルを保存して閉じることができます。

何が欠けていますか?

40
Nick Weavers

Sudoは呼び出すプロセスを昇格させ、リダイレクトやグロビングなどの現在のシェルの処理は昇格させません。

ファイルリダイレクト>> /etc/httpd/conf.d/vhosts.confcurrentシェルによって処理されています。シェルは現在の特権でまだ実行されています。

このようなものを試すことができます。

Sudo bash -c 'echo "Include thing" >> /etc/httpd/conf.d/vhosts.conf'

または

echo "Include thing" | Sudo tee -a /etc/httpd/conf.d/vhosts.conf
78
Zoredache