我想要做:
echo "something" >> /etc/config_file
但是,由于只有 root 用户才有此文件的写权限,所以我无法这样做。但下面的方法也不起作用。
sudo echo "something" >> /etc/config_file
在这种情况下,有没有办法将内容附加到文件中,而不必先用sudo
编辑器打开它,然后手动附加新内容?
答案1
使用tee -a
(或tee --append
)与sudo
tee - read from standard input and write to standard output and files
[...]
-a, --append
append to the given FILEs, do not overwrite
[...]
所以你的命令变成
echo "something" | sudo tee -a /etc/config_file
tee
使用管理权限执行 Bash的优点是
- 您没有使用管理权限执行 Bash
- 只有“写入文件”部分以高级权限运行
- 引用复杂的命令变得更容易
答案2
重定向在当前 shell 中执行。为了使用提升的权限执行重定向,您必须使用提升的权限运行 shell 本身:
sudo bash -c "somecommand >> somefile"
答案3
让 sudo 生成一个子 shell:
sudo sh -c "echo 'JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile"
在这个例子中,sudo 运行“sh”并将其余部分作为参数。
(这在 sudo 手册页中显示为示例)
答案4
我认为,这种情况下最好的是 dd:
sudo dd of=/etc/profile <<< END
JAVA_HOME=/usr/lib/jvm/java-6-sun
END