Изменения в /etc/hosts
файле, кажется, вступают в силу немедленно. Мне любопытно о реализации. Какая магия используется для достижения этой функции?
networking
hosts
rudwna
источник
источник
Ответы:
Волшебство открывает
/etc/hosts
файл и читает его:getaddrinfo(3)
Функция, которая является только стандарт разрешения имен интерфейса, будет просто открыть и прочитать/etc/hosts
каждый раз , когда он вызывается , чтобы разрешить имя хоста.Более сложные приложения, которые не используют стандарт
getaddrinfo(3)
, но все еще каким-то образом добавляют/etc/hosts
к миксу (например,dnsmasq
DNS-сервер), могут использоватьinotify(7)
для отслеживания изменений в/etc/hosts
файлах и перечитывать их только при необходимости.Браузеры и другие подобные приложения этого не сделают. Они будут открываться и читать
/etc/hosts
каждый раз, когда им нужно разрешить имя хоста, даже если они не используют распознаватель libc напрямую, а реплицируют его работу другими способами.источник
Разрешение имен, помимо прочего, управляется
/etc/nsswitch.conf
. Вот выдержка:Обратите внимание на
hosts
строку. В нем говорится: «При разрешении имени хоста сначала прочитайте/etc/hosts
файл для поиска имени хоста, если он не найден, затем запустите DNS-запрос, если не найден, то попробуйте локально сконфигурированное имя хоста системы».Вот почему это так быстро. Обратите внимание, что это не зависит от сетевых служб на машине, поэтому нет службы для перезапуска или перезагрузки.
источник
/etc/hosts
. Почему он не использует кэшированную версию?