“sudo echo nameserver 8.8.8.8 > /etc/resolv.conf” 有什么作用?

“sudo echo nameserver 8.8.8.8 > /etc/resolv.conf” 有什么作用?

有人能告诉我这sudo echo nameserver 8.8.8.8 > /etc/resolv.conf是什么意思吗?

我以前经常会遇到网络连接中断的情况,持续时间为 15 秒到 3 分钟,但使用此命令后,网络连接恢复正常。我只是好奇这个神奇的命令行做了什么。

答案1

它将替换您机器上使用的名称服务器 (DNS)Google 公共 DNS 服务。如果运行该命令对您有帮助,则可能是您的网络提供的默认设置 (DHCP) 中存在 DNS 问题。虽然解决问题的根本原因会更好,但这只是对您的问题的一般性回答。


命令说明

sudo echo nameserver 8.8.8.8 > /etc/resolv.conf
  • sudo在这种情况下提升权限为 root。
  • echo只输出以下参数标准输出(在这种情况下它输出nameserver 8.8.8.8
  • >将标准输出重定向到常规 Unix shell 中的文件(覆盖它)。
  • /etc/resolv.conf是写入输出的文件。
  • nameserver 8.8.8.8加入一行/etc/resolv.conf使得系统使用具有 IP 地址的名称服务器8.8.8.8将域名解析为 IP 地址。(实际发生情况的简短版本)
  • 8.8.8.8是其中一个地址由 Google 发布他们的公共 DNS 服务正在监听哪里。

sudo错误

虽然这个解释听起来很有道理,但这并不适用,因为错误你会得到:

bash: /etc/resolv.conf: Permission denied

为什么?输出重定向由您的 shell(此处为 Bash)处理,并且不考虑用于 的命令sudo。类似于数学中的乘法优先于加法。所以,只是echo获得了提升的权限,而您的 shell 没有!要解决这个问题,应该运行以下命令:

sudo sh -c "echo nameserver 8.8.8.8 > /etc/resolv.conf"

或者,通过使用管道并将tee其输出到文件:

echo nameserver 8.8.8.8 | sudo tee /etc/resolv.conf  #prints to screen as well

Ubuntu 和网络管理器

在 Ubuntu 上,这只是一个临时更改,因为网络管理器会“管理”该/etc/resolv.conf文件。本地修改将被覆盖。这就是为什么您应该在网络管理器中配置它以使其持久的原因。


使用网络管理器进行配置

我建议使用网络管理器正确配置您的 PC。我假设您在此处的网络上使用 DHCP(最常见)。然后执行此操作以执行与您使用的命令相同的操作:

  1. 打开编辑连接

    在此处输入图片描述

  2. 编辑您正在使用的连接配置文件。

    在此处输入图片描述

  3. IPv4 设置标签:

    • 方法:仅限自动 (DHCP) 地址

      此设置使其对您的主机的 IP 地址配置执行常规 DHCP 请求,但它将忽略其他非强制选项(如建议的 DNS 服务器)。

    • DNS 服务器:8.8.8.8
    • 节省

    在此处输入图片描述

完毕。


重要笔记

在本地或公司网络中,本地 DNS 服务器可能用于本地主机。如果直接要求 Google 服务器为您解析名称,您将失去此功能。因此,例如,如果本地 DNS 服务器知道“打印机”是什么,那么您将无法使用该名称使用打印机。

因此,请修复您的本地 DNS 服务器。如果它只是一个简单的转发器,指向您 ISP 损坏的 DNS 服务器,并且您无法更改它(例如 ISP 管理的一体式路由器),那么此8.8.8.8解决方案可能是您唯一的选择。

相关内容