我尝试编写脚本以自动配置resolv.conf
和/etc/network/interfaces
。我将命令作为" sudo"运行,但我得到"权限被拒绝"错误。
sudo apt-get --assume-yes install vsftpd
sudo "nameserver 8.8.8.8" >> /etc/resolv.conf
sudo python setinterfaces.py
sudo chattr +i /etc/network/interfaces
sudo apt-get --assume-yes install lamp-server^
第2行和第3行获得权限拒绝错误,但第1行和第5行确实运行。 setinterfaces.py
应该覆盖/etc/network/interfaces'.
setinterfaces.py works when pointed at the home folder but not the
interfaces`文件。
有什么想法吗?我必须改变所有权吗?理想情况下,我希望这是一个命令脚本,我可以在其中调用它,它将运行。我正在为那些没有* nix经验的人写这个剧本。
答案 0 :(得分:2)
sudo
命令执行您在root
帐户下提供的命令。最简单的形式是语法:
sudo command args...
例如:
sudo whoami
打印root
。
如果您输入内容,就像在问题中所做的那样:
sudo "nameserver 8.8.8.8" >> /etc/resolv.conf
然后它不会起作用;它将尝试执行名为"nameserver 8.8.8.8"
的命令,该命令不存在。问题在于你错过了echo
命令。
此:
sudo "echo nameserver 8.8.8.8" >> /etc/resolv.conf
仍然无效,因为没有名为"echo nameserver 8.8.8.8"
的命令。整个字符串作为单个参数传递给sudo
。它需要将命令及其每个参数视为一个单独的参数。
所以这个:
sudo echo nameserver 8.8.8.8 >> /etc/resolv.conf
越来越近 - 但它仍然无效。它以echo
执行root
命令 - 但echo
不需要特殊权限,因此执行root
没有意义。 >> /etc/resolv.conf
重定向由shell执行,它以您身份运行,而不是root
。由于您无权写入/etc/resolv.conf
,因此命令失败。 sudo
命令永远不会看到重定向。
您需要在root
帐户下执行重定向,这意味着您需要以root身份运行的shell进程。所以解决方案是:
sudo sh -c 'echo nameserver 8.8.8.8 >> /etc/resolv.conf'
这将启动一个shell作为root
进程。该shell执行命令行echo nameserver 8.8.8.8 >> /etc/resolv.conf
。由于你有一个执行echo
和输出重定向的root shell,它应该可以工作。
(我建议您在执行此操作之前抓取/etc/resolv.conf
文件的副本,以确保在意外破坏它时可以恢复。)
答案 1 :(得分:1)
第二行就是这样,
sudo sh -c "echo 'nameserver 8.8.8.8' >> /etc/resolv.conf"