我有以下命令可以正确创建我想要构建的 /etc/hosts 文件。但是,由于权限问题,我无法按照第二种形式写入它。因此,我尝试了第三种形式的变体,但仍然出现权限错误。有人可以给我一个尝试的建议吗?
cat hosts.tmp ; echo -n "myremotehost " ; cat ip.txt
cat hosts.tmp ; echo -n "myremotehost " ; cat ip.txt > /etc/hosts
cat hosts.tmp ; echo -n "myremotehost " ; echo mypassword | sudo -S cat ip.txt > /etc/hosts
答案1
这对我来说很难发现!(我是 Linux 的新手。)
在终端中输入sudo -i
,然后使用您的用户密码登录。您将进入根目录,拥有上帝般的力量……:>)
我还发现bash filename.sh
会启动脚本。请原谅我,我编写了一个脚本(根据另一篇文章中的建议),它消除了 Youtube 上的所有广告,这让我感到非常有成就感!
答案2
我会把修改文件的指令/etc/hosts
放在一个 shell 脚本中,比如说modify-hosts.sh
,然后执行
sudo modify-hosts.sh
如果您坚持在不提供密码的情况下运行脚本,请将NOPASSWD
专门针对该脚本的条目和您的用户名添加到/etc/sudoers
。
至于文件的内容,您可以执行以下操作:
cp hosts.tmp > /etc/hosts
echo "myremotehost $(cat /path/to/ip.txt)" >> /etc/hosts
更方便的是,如果myhostname
已经有条目,/etc/hosts
您可以就地编辑它:
sed -i -e 's/myhostname .*/myhostname '$(cat ip.txt)'/' /etc/hosts
你甚至可以sudo
在一行中声明这一点
sudo sed -i -e 's/myhostname .*/myhostname '$(cat ip.txt)'/' /etc/hosts
而不会遇到重定向问题。