Networking

為什麼對 /etc/hosts 的更改會立即生效?

  • June 26, 2019

/etc/hosts文件的更改似乎立即生效。我對實現感到好奇。使用什麼魔法來實現這個功能?

  1. 問Ubuntu:修改/etc/hosts後需要重啟哪個服務?
  2. NetApp 支持:/etc/hosts 文件的工作原理

神奇的是打開/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 的解析器,而是通過其他方式複制其工作原理。

引用自:https://unix.stackexchange.com/questions/526780