web-dev-qa-db-ja.com

sudoを使用してファイルにテキストを追加しようとすると「アクセス権が拒否されました」

Amazon Linuxを使用しています。ファイルにテキストを追加しようとしています。ファイルはrootが所有しています。 「Sudo」を使用して、必要なテキストを追加できると思ったが、「許可が拒否されました」。以下を参照してください。

[myuser@mymachine ~]$ ls -al /etc/yum.repos.d/google-chrome.repo
-rw-r--r-- 1 root root 186 Jul 31 15:50 /etc/yum.repos.d/google-chrome.repo
[myuser@mymachine ~]$ Sudo echo -e "[google-chrome]\nname=google-chrome\nbaseurl=http://dl.google.com/linux/chrome/rpm/stable/\$basearch\nenabled=1\ngpgcheck=1\ngpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub" >> /etc/yum.repos.d/google-chrome.repo
-bash: /etc/yum.repos.d/google-chrome.repo: Permission denied

必要なテキストをファイルに追加できるように、ステートメントをどのように調整できますか?

15
Dave

ストリームをリダイレクトまたはファイルに追加するには、teeユーティリティを使用する必要があります。

echo something | Sudo tee /etc/file

または追加用

echo something | Sudo tee -a /etc/file

デフォルトでは、シェルは独自のユーザー権限で実行されており、リダイレクト>または>>はユーザーと同じ権限で実行されるため、実際にはechoを使用してSudoおよびroot権限なしでリダイレクトします。

別の方法として、ルートシェルを取得して、通常のリダイレクトを試すこともできます。

Sudo -i
echo something >> /etc/pat/to/file
exit

または非ログインシェルの場合はSudo -s

rootアクセスを使用して非対話型シェルを実行することもできます。

Sudo bash -c 'echo something >> /etc/somewhere/file'
30
Ravexina

前の回答で与えられた説明は基本的に正しいです。リダイレクト前のコマンドは、昇格された特権で実行されますが、リダイレクト自体は実行されません。

ここにあなたが望むことをする別の方法があります。ここや これが重複しているという質問 への回答では言及されていません。完全を期すためにここに含めます。

Sudo su -c 'echo -e "some\ntext" >> /other/file'
2
rlf