![编辑 resolv.conf 时出现“E21:无法进行更改”](https://linux22.com/image/1110245/%E7%BC%96%E8%BE%91%20resolv.conf%20%E6%97%B6%E5%87%BA%E7%8E%B0%E2%80%9CE21%EF%BC%9A%E6%97%A0%E6%B3%95%E8%BF%9B%E8%A1%8C%E6%9B%B4%E6%94%B9%E2%80%9D.png)
几个小时前我买了一个 beaglebone,现在我正尝试将其添加nameserver 8.8.8.8
到/etc/resolv.conf
。但是当我使用 vim 打开它并尝试添加我的名称服务器时,它显示 E21:无法进行更改,“可修改”已关闭。我通过 chmod 更改了权限。chmod u+rx /etc/resolv.conf
但什么也没改变。我仍然无法写入 resolv.conf 文件。我该怎么办?
答案1
来自 vim 文档:
如果您更改了文件并忘记了它是只读的,您仍然可以写入它。在写入命令中添加 ! 可强制写入。
如果您确实想禁止对文件进行更改,请执行以下操作:
vim -M file
现在,每次更改文本的尝试都会失败。例如,帮助文件就是这样的。如果您尝试进行更改,则会收到以下错误消息:
E21: Cannot make changes, 'modifiable' is off
您可以使用 -M 参数将 Vim 设置为在查看器模式下工作。不过,这只是自愿的,因为这些命令将删除保护:
:set modifiable
:set write
答案2
/etc/resolv.conf
归 拥有root
,因此您必须将其编辑为root
(使用sudo
):
sudo vim /etc/resolv.conf
不过,你可能需要先备份它:
sudo cp /etc/resolv.conf /etc/resolv.conf.old
如果您更喜欢以图形方式编辑它,那么除了使用vim
,您还可以使用:
gksu gedit /etc/resolv.conf
或者在 Kubuntu 上:
kdesudo kate /etc/resolv.conf
如果您更改了/etc/resolv.conf
的权限,则应该将其改回来,因为默认权限可防止未经授权的访问,同时允许授权访问(如上所述)。
但是,您可能并没有真正更改任何权限,因为默认情况下(至少在 Ubuntu 12.04 LTS 上)/etc/resolv.conf
实际上是 的符号链接/run/resolvconf/resolv.conf
。
答案3
(免责声明:这是基于互联网研究,而不是实际操作经验。)
根据这文章,
安斯特朗Linux[...] 分发版包含在每个 Beaglebone 随附的 microSD 卡中。
无需引用整篇文章(顺便说一句,它似乎写得非常好),您需要:
- 以 root 身份通过 SSH 进入你的 Beagleboard。
- 编辑
/etc/network/interfaces
。 - 添加
dns-nameservers 8.8.8.8
。 - 跑步
/etc/init.d/networking restart
如果您的设置似乎有效,但在重启后消失,请阅读这关于设置 Connman 的文章。
您需要安装该connman-tests
包以启用 Connman 的命令行配置,并按照说明设置名称服务器。
例子:
./set-nameservers ethernet_405fc276b749_cable 8.8.8.8
答案4
你可以试试:
vim resolv.conf
之后保存
rm -rf /etc/resolv.conf
然后将 resolv.conf 文件移动到 /etc/
mv resolv.conf /etc/