Что делает «sudo echo nameserver 8.8.8.8> /etc/resolv.conf»?


13

Может кто-нибудь, пожалуйста, скажите мне, что sudo echo nameserver 8.8.8.8 > /etc/resolv.confделает?

Раньше у меня было случайное падение интернет-соединения в течение 15 секунд до 3 минут, но после использования этой команды интернет-соединение работает как чудо. Мне просто любопытно, что сделала эта волшебная командная строка.


3
Я удивлен, что на самом деле это работает - sudo должен применяться только к echo здесь, а не к перенаправлению, и пользователь без полномочий root не должен иметь доступа к /etc/resolv.conf
Макс

@ Макс Ты абсолютно прав. Я пропустил эту часть - обновил свой ответ.
gertvdijk

Ответы:


27

Он заменяет сервер имен (DNS), используемый на вашем компьютере, службой Google Public DNS . Если выполнение этой команды поможет вам, у вас возникли проблемы с DNS в настройках по умолчанию, предоставляемых вашей сетью (DHCP). Хотя было бы лучше устранить основную причину проблемы, это общий ответ на ваш вопрос.


Объяснение команды

sudo echo nameserver 8.8.8.8 > /etc/resolv.conf
  • sudo в этом случае повышает привилегии пользователя root.
  • echoпросто выводит аргументы, следующие за стандартным выводом (в этом случае выводит nameserver 8.8.8.8)
  • > перенаправляет стандартный вывод в файл (перезаписывает его) в обычной оболочке Unix.
  • /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

Почему? Перенаправление вывода обрабатывается вашей оболочкой (здесь: Bash) и не учитывается для команды, используемой для sudo. Подобно тому, как умножение в математике имеет приоритет над сложением. Итак, просто echoу него есть повышенные привилегии, а у вашей оболочки нет! Чтобы решить эту проблему, нужно выполнить эту команду как

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 это только временное изменение, поскольку Network Manager «управляет» /etc/resolv.confфайлом. Локальные модификации будут перезаписаны. Вот почему вы должны настроить это в Network Manager, чтобы оно было постоянным.


Конфигурация с использованием Network Manager

Я бы порекомендовал правильно настроить компьютер с помощью Network Manager. Я предполагаю, что вы используете DHCP в своей сети здесь (чаще всего). Затем сделайте это, чтобы выполнить то же самое, что эквивалентно команде, которую вы использовали:

  1. Открыть Редактировать соединения :

    введите описание изображения здесь

  2. Отредактируйте профиль подключения, который вы используете.

    введите описание изображения здесь

  3. На вкладке Настройки IPv4 :

    • Метод: только автоматические (DHCP) адреса

      Этот параметр заставляет его выполнять обычный запрос DHCP для настройки IP-адреса вашего хоста, но он игнорирует другие необязательные параметры, такие как предлагаемые DNS-серверы.

    • DNS-серверы: 8.8.8.8
    • Хит Сохранить

    введите описание изображения здесь

Выполнено.


Важные заметки

В локальной или корпоративной сети локальный DNS-сервер может использоваться для локальных хостов. Вы потеряете эту функцию, напрямую попросив серверы Google разрешить для вас имена. Таким образом, если, например, локальный DNS-сервер будет знать, что такое «принтер», вы потеряете использование своего принтера с таким именем.

Поэтому, пожалуйста, исправьте ваш локальный DNS-сервер. Если это просто переадресация на сломанный DNS-сервер вашего интернет-провайдера, и вы не можете это изменить (например, все-в-одном маршрутизаторе, управляемом провайдером), то это 8.8.8.8решение может быть вашим единственным вариантом.


1
Еще одно важное замечание: Google, по-видимому, собирает информацию о том, кто что ищет в DNS, так что подумайте, устраивает ли вас это. Существует множество других публичных DNS-серверов, которые вы можете использовать, и в целом они надежны. Похоже, что OP использовал плохой DNS-сервер, который мог быть или не быть локальным. (У меня были товарные ADSL-роутеры, которые замечательно плохо работают с DNS).
mc0e
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.