如何以 sudo 身份附加到文件?

如何以 sudo 身份附加到文件?

我想要做:

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

相关内容