web-dev-qa-db-fra.com

Pourquoi les modifications apportées à / etc / hosts prennent-elles effet immédiatement?

Modifications apportées à /etc/hosts le fichier semble prendre effet immédiatement. Je suis curieux de la mise en œuvre. Quelle magie est utilisée pour réaliser cette fonctionnalité?

  1. Demandez à Ubuntu: après avoir modifié/etc/hosts quel service doit être redémarré?
  2. Prise en charge NetApp: fonctionnement du fichier/etc/hosts
18
rudwna

La magie est d'ouvrir le fichier /etc/hosts Et de le lire:

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

La fonction getaddrinfo(3), qui est l'interface de résolution de nom standard niquement, va simplement s'ouvrir et lire /etc/hosts Chaque fois qu'elle est appelée pour résoudre un nom d'hôte.

Des applications plus sophistiquées qui n'utilisent pas la norme getaddrinfo(3), mais qui ajoutent quand même /etc/hosts Au mixage (par exemple le serveur DNS dnsmasq) peuvent utiliser inotify(7) pour surveiller les modifications apportées aux fichiers /etc/hosts et les relire uniquement si nécessaire.

Les navigateurs et autres applications de ce type ne le feront pas. Ils s'ouvriront et liront /etc/hosts Chaque fois qu'ils auront besoin de résoudre un nom d'hôte, même s'ils n'utilisent pas directement le résolveur de libc, mais répliquent son fonctionnement par d'autres moyens.

27
mosvy

La résolution de noms, entre autres, est gérée par /etc/nsswitch.conf. En voici un extrait:

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

Notez la ligne hosts. Il dit: "Lors de la résolution d'un nom d'hôte, lisez d'abord /etc/hosts fichier pour rechercher le nom d'hôte, s'il n'est pas trouvé, exécutez une requête DNS, s'il n'est pas trouvé, essayez le nom d'hôte du système configuré localement ".

Voici donc pourquoi c'est si rapide. Notez qu'il ne dépend pas des services réseau sur la machine, il n'y a donc pas de service pour redémarrer ou recharger.

9
dr_