我正在尝试使用 sudoer 帐户更改 Gentoo 主机的主机名。我使用以下步骤:
sudo rm -f /etc/conf.d/hostname
sudo touch /etc/conf.d/hostname
sudo echo "hostname=foo" >> /etc/conf.d/hostname
sudo /etc/init.d/net.lo restart
只有步骤 3 失败。它引发了permission error
。所以我想知道为什么会出现这种情况?我先尝试停止网络服务,但没有变化。
答案1
它失败是因为>>
被普通用户的 shell 解释;只有 被echo
作为 运行root
。
解决此问题的简单方法是在交互式 root shell 中运行该命令:
$ sudo su - # echo "hostname=foo" > /etc/conf.d/hostname #/etc/init.d/net.lo 重启 # 出口 $
请注意,您不需要该touch
命令,如果您只是使用,那么>
您也可以不用该命令rm
,因为>
会覆盖文件的内容。
答案2
正确的做法是:
echo "hostname=foo" | sudo tee -a /etc/conf.d/hostname > /dev/null
您不需要 sudo 来运行echo
,但您不能将 sudo 应用于重定向,因此,改为将其通过管道传输到tee
(输出分离器)中,以附加模式(-a
,作用类似于>>
),然后可以通过将其重定向到 来输出(因为您对它不感兴趣)/dev/null
。