age*_*ser 304 linux sudo command-line
我想要做:
echo "something" >> /etc/config_file
但是,由于只有 root 用户对这个文件有写权限,我不能这样做。但以下也不起作用。
sudo echo "something" >> /etc/config_file
Run Code Online (Sandbox Code Playgroud)
在这种情况下,有没有一种方法可以附加到文件,而不必先用sudo'd 编辑器打开它,然后手动附加新内容?
aki*_*ira 425
使用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
[...]
Run Code Online (Sandbox Code Playgroud)
所以你的命令变成
echo "something" | sudo tee -a /etc/config_file
Run Code Online (Sandbox Code Playgroud)
tee使用管理权限执行 Bash的优点是
Ign*_*ams 58
重定向在当前 shell 中执行。为了使用提升的权限进行重定向,您必须以提升的权限运行 shell 本身:
sudo bash -c "somecommand >> somefile"
Run Code Online (Sandbox Code Playgroud)
Dou*_*ris 27
让 sudo 产生一个子外壳:
sudo sh -c "echo 'JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile"
Run Code Online (Sandbox Code Playgroud)
在这个例子中,sudo 运行“sh”,其余的作为参数。
(这在 sudo 手册页中显示为示例)
小智 8
我通常使用带有sudo tee -a 的shell HERE 文档。类似的东西:
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
Run Code Online (Sandbox Code Playgroud)
小智 6
在我看来,在这种情况下最好的是 dd:
sudo dd of=/etc/profile <<< END
JAVA_HOME=/usr/lib/jvm/java-6-sun
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99005 次 |
| 最近记录: |