“ sudo echo名称服务器8.8.8.8> /etc/resolv.conf”做什么?


13

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

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


3
我很惊讶这个实际工作-须藤应只适用于在此呼应,而不是重定向,和非root用户不应该访问的/etc/resolv.conf
马克斯

@Max你是绝对正确的。我错过了这一部分-更新了我的答案。
gertvdijk 2013年

Answers:


27

它将由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 是写入输出的文件。
  • 有一条线nameserver 8.8.8.8/etc/resolv.conf品牌使用具有IP地址,域名服务器系统8.8.8.8的域名解析为IP地址。(非常简短的内容)
  • 8.8.8.8Google发布的有关其公共DNS服务监听位置的地址之一。

sudo 错误

尽管这个解释听起来很合理,但它却行不通,因为出现错误,您将得到:

bash: /etc/resolv.conf: Permission denied

为什么?输出重定向由您的外壳程序(在这里: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解决方案可能是您唯一的选择。


1
另一个重要说明:谷歌大概正在收集谁在查找DNS中的内容,因此请考虑您是否对此感到满意。您可以使用许多其他公共DNS服务器,它们通常是可靠的。听起来好像OP正在使用错误的DNS服务器,该服务器可能是本地服务器,也可能不是本地服务器。(我有一些商用ADSL路由器,它们在dns方面做得非常差)。
mc0e 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.