编辑 resolv.conf 时出现“E21:无法进行更改”

编辑 resolv.conf 时出现“E21:无法进行更改”

几个小时前我买了一个 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 卡中。

无需引用整篇文章(顺便说一句,它似乎写得非常好),您需要:

  1. 以 root 身份通过 SSH 进入你的 Beagleboard。
  2. 编辑/etc/network/interfaces
  3. 添加dns-nameservers 8.8.8.8
  4. 跑步/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/

相关内容