尝试使用 sudo 将文本附加到文件时出现“权限被拒绝”

尝试使用 sudo 将文本附加到文件时出现“权限被拒绝”

我正在使用亚马逊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

如何调整我的语句以便将必要的文本附加到文件中?

答案1

您必须使用tee实用程序将流重定向或附加到需要某些权限的文件,例如:

echo something | sudo tee /etc/file

或用于追加

echo something | sudo tee -a /etc/file

因为默认情况下,您的 shell 正在使用您自己的用户权限运行,并且重定向>>>将使用与您的用户相同的权限来完成,因此您实际上是在未经许可的情况下运行echosudo重定向它root

作为替代方案,您也可以获取 root shell,然后尝试正常重定向:

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

sudo -s用于非登录 shell。

您还可以使用 root 访问权限运行非交互式 shell:

sudo bash -c 'echo something >> /etc/somewhere/file'

答案2

前面的回答给出的解释基本上是正确的。重定向之前的命令以提升的权限运行,但不是重定向本身。

这是另一种方法,可以满足您的要求。此处或答案中均未提及问题是这是重复的。为了完整起见,我将其放在这里。

sudo su -c 'echo -e "some\ntext" >> /other/file'

相关内容