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

有人可以告诉我什么sudo echo nameserver 8.8.8.8 > /etc/resolv.conf吗?

我曾经随机丢弃互联网连接15秒到3分钟,但使用此命令后,互联网连接就像一个魅力。 我只是好奇这个神奇的命令行做了什么。

它取代了Google Public DNS服务在您的计算机上使用的名称服务器(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是写入输出的文件。
  • /etc/resolv.conf使用行nameserver 8.8.8.8会使系统使用名称服务器具有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的服务器为您解析名称来放弃此function。 因此,如果本地DNS服务器知道“打印机”是什么,那么您将放弃使用该名称的打印机。

所以,请修改您的本地DNS服务器。 如果它只是ISP的破坏DNS服务器的简单转发器而您无法更改(例如ISP管理的一体化路由器),则此8.8.8.8解决方案可能是您唯一的选择。