Почему изменения в /etc/hosts вступают в силу немедленно?

Simplemente agregue a su /etc/profile la siguiente línea, luego cierre la sesión y vuelva a iniciarla para que los cambios surtan efecto.

export EDITOR=vim
18
26.06.2019, 07:45
2 ответа

Волшебство заключается в открытии /etc/hostsфайла и его чтении:

strace -e trace=file wget -O /dev/null http://www.google.com http://www.facebook.com http://unix.stackexchange.com 2>&1 | grep hosts
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 5
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4

Функция getaddrinfo(3), которая является единственным стандартным интерфейсом разрешения имен, будет просто открывать и читать /etc/hostsкаждый раз, когда она вызывается для разрешения имени хоста.

Более сложные приложения, которые не используют стандарт getaddrinfo(3), но тем или иным образом добавляют /etc/hostsк набору (, например. dnsmasqDNS-сервер )может использовать inotify(7)для отслеживания изменений в файлах /etc/hostsи повторно -читать их только в случае необходимости.

Браузеры и другие подобные приложения этого не делают. Они будут открывать и читать /etc/hostsкаждый раз, когда им нужно разрешить имя хоста, даже если они не используют преобразователь libc напрямую, а копируют его работу другими способами.

29
27.01.2020, 19:45

Решением имен, среди прочего, управляет /etc/nsswitch.conf. Вот отрывок:

passwd:     files sss
shadow:     files sss
group:      files sss
hosts:      files dns myhostname
(...) 

Обратите внимание на строку hosts. В нем говорится :«При разрешении имени хоста сначала прочитайте файл /etc/hostsдля поиска имени хоста, если он не найден, запустите DNS-запрос, если он не найден, попробуйте локально настроенное системное имя хоста».

Так вот почему это так быстро. Обратите внимание, что это не зависит от сетевых служб на машине, поэтому нет службы, которую нужно перезапустить или перезагрузить.

9
27.01.2020, 19:45

Теги

Похожие вопросы