/ etc / hostsへの変更がすぐに適用されるのはなぜですか?

/ etc / hostsへの変更がすぐに適用されるのはなぜですか?

ファイルへの変更が/etc/hostsすぐに適用されるように見えます。実装方法が気になります。この機能を達成するためにどのような魔法が使用されますか?

  1. Ubuntuに連絡してください:/ etc / hostsを修正した後、どのサービスを再起動する必要がありますか?
  2. NetApp サポート: /etc/hosts ファイルのしくみ

ベストアンサー1

/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/hostslibcのパーサーを直接使用しなくても、ホスト名を解決する必要があるたびに開いて読みますが、他の方法で動作を複製します。

おすすめ記事