echo "something" >> /etc/config_file
但是,由于只有root用户具有对此文件的写许可权,所以我不能这样做。但是以下内容也不起作用。
sudo echo "something" >> /etc/config_file
在这种情况下是否有一种方法可以将文件追加到文件中,而不必先使用
sudo
'd编辑器将其打开然后手动添加新内容?#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的操作
只有具有高级权限的“写入文件”部分才能运行
复杂的命令要容易得多
评论
在OS X上,Tee似乎只有-a标志。
– Lri
2012年6月20日14:48
Debian 8 tee具有-a append标志。
–粘土
17年3月13日在18:46
使用echo“输出” | sudo tee -a文件> / dev / null如果要跳过控制台输出。
– Moshe Bixenshpaner
17/09/22在1:16
对于WSL也很好。
–kayleeFrye_onDeck
17年12月8日,0:18
如果“某物”是某个秘密值,而又不想输出到终端并可能保存在日志中,该怎么办?
–quapka
20年8月11日在14:45
#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手册页中显示为示例)
评论
原因是进行重定向的是您的外壳程序(以您的身份运行),而不是sudo。由于您没有写该文件的权限,因此会出现“权限被拒绝”错误。这个答案的作用是启动一个新的外壳程序,该外壳程序以root身份运行,因此能够写入该文件。
–兰迪·奥里森
09-10-13在14:48
这不是正确的答案。这是一个正确的答案。晃的答案更好,因为答案中提供了逻辑。
– TOOGAM
16年6月16日在17:42
#4 楼
我通常将shell HERE文档与sudo tee -a一起使用。类似于:sudo tee -a /etc/profile.d/java.sh << 'EOF'
# configures JAVA
JAVA_HOME=/usr/lib/jvm/java-8-oracle
export JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin
EOF
#5 楼
我认为,这种情况下最好的是dd:sudo dd of=/etc/profile <<< END
JAVA_HOME=/usr/lib/jvm/java-6-sun
END
#6 楼
此处的sudo和重定向可能存在问题。使用您选择的文本编辑器代替添加行。评论
不幸的是,这产生了相同的结果。
–马特·诺里斯(Matt Norris)
09-10-13在14:57
su -c'echo“ JAVA_HOME = / usr / lib / jvm / java-6-sun” >> / etc / profile'应该起作用。由于没有任何东西可以使shell错误地在arg中扩展以回显,因此请单引号将整个命令引起来。
–嘎嘎吉qua德
09-10-13在15:55
这太妙了。现在,将其作为脚本的一部分进行。
–Ernie Dunbar
18年5月9日在16:02
#7 楼
这非常简单,通常将sudo
放在首位。sudo sed -i '$a something' /etc/config_file
$a
表示要在文件末尾附加。 #8 楼
您尝试重定向(使用>>
)sudo的输出将无法正常工作。您真正想做的是重定向echo
的输出。我建议您只使用自己喜欢的编辑器,然后将该行手动添加到/etc/profile
。这具有额外的好处,您可以检查/etc/profile
是否已设置JAVA_HOME
。#9 楼
使用ex-way:sudo ex +'$put =\"FOO\"' -cwq /etc/profile
并将
FOO
替换为变量以附加。在某些系统(例如OS X)中,
/etc/profile
文件具有444权限,因此,如果仍然拒绝授予权限,请先检查并更正权限:
评论
我正在使用Ubuntu 9.04,并且能够对到目前为止需要的每个命令使用sudo。生成一个子外壳是可行的。密切相关:将stdout重定向到您没有write(在Unix和Linux上)具有写许可权的文件。弱相关:具有目录路径的ls显示文件,但是具有文件模式的ls不显示文件?