对于Linux中的sudo权限,这是一个非常简单的问题,至少看起来应该是这样.
有很多的时候,我只是想将一些东西附加到/etc/hosts
或类似的文件,但最终没有能够因为两者>
并>>
不准,甚至有根.
有没有必要让这项工作无需su
或sudo su
进入root?
使用tee --append
或tee -a
.
echo 'deb blah ... blah' | sudo tee -a /etc/apt/sources.list
请务必避免引号内的引号.
要避免将数据打印回控制台,请将输出重定向到/ dev/null.
echo 'deb blah ... blah' | sudo tee -a /etc/apt/sources.list > /dev/null
问题是shell确实输出了重定向,而不是sudo或echo,因此这是以普通用户身份完成的.
请尝试以下代码段:
sudo sh -c "echo 'something' >> /etc/privilegedfile"
问题是它是你的shell处理重定向; 它试图用您的权限打开文件,而不是在sudo下运行的进程.
使用这样的东西,也许:
sudo sh -c "echo 'something' >> /etc/privilegedFile"
sudo sh -c "echo 127.0.0.1 localhost >> /etc/hosts"
干
sudo sh -c "echo >> somefile"
应该管用.问题是>和>>由shell处理,而不是由"sudoed"命令处理,因此权限是你的权限,而不是你正在"sudoing"的用户权限.
我会注意到,好奇的是,你也可以引用一个heredoc(对于大块):
sudo bash -c "cat <> /etc/ipfw.conf EOIPFW" Label com.company.ipfw Program /sbin/ipfw ProgramArguments /sbin/ipfw -q /etc/ipfw.conf RunAtLoad
在bash中,你可以tee
结合使用> /dev/null
来保持标准清洁.
echo "# comment" | sudo tee -a /etc/hosts > /dev/null