/ etc / hostsへの変更がすぐに有効になるのはなぜですか?


18

/etc/hostsファイルへの変更はすぐに有効になるようです。実装に興味があります。この機能を実現するためにどのような魔法が使用されますか?

  1. Ubuntuに尋ねる:/ etc / hostsを変更した後、どのサービスを再起動する必要がありますか?
  2. ネットアップサポート:/ etc / hostsファイルの仕組み

5
通常、ホストファイルの速度に関する注意事項はごくわずかで、まれに数KBを超えることはほとんどありません。ほとんどの場合、ファイルの読み取りに使用されるコンパイル済みライブラリよりも小さくなります。定期的に使用される小さなファイルは、多くの場合メモリにキャッシュされたままになります。そのため、すべてのリクエストでファイルが読み取られたとしても、そのためのオーバーヘッドは最小限に抑えられます(つまり、非常に高速です)。
フィリップクーリング

2
関連unix.stackexchange.com/questions/388875/...フィリップさんのコメント:)に
ジェフ・シャラー

回答:


27

魔法は/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のリゾルバーを直接使用していない場合でも、ホスト名を解決する必要があるたびに開いて読み取りますが、他の手段でその動作を複製しています。


1
このスニペットの機能について詳しく説明していただけますか?私が興味を持っているのは、実行中のコードに変更がすぐに反映されることです(OSのネットワークの一部でしょうか?)。
rudwna

7
@rudwna:彼は、「ホスト名を検索する必要があるたびに、リゾルバー(Cライブラリの一部)が/ etc / hostsを開いてそれを読み取ります。読み取りの間にファイルの内容が変わると、次の読み取りは新しいコンテンツ」。
dirkt

3
@rudwnaも、「実行中のコード」に関して、すぐに変更が表示される理由は、多くの標準プログラムがアドレスをキャッシュしない(または、/ etc / hostsの更新をリッスンするインテリジェントなキャッシュ戦略を持っている)ためです。確かに、/ etc / hostsへの変更がすぐに表示されず、再起動が必要なプログラムがあります。コードを書いた人次第です。/ etc / hosts自体に魔法のようなものはありません。
SamYonnou

9

名前解決は、とりわけ、によって管理され/etc/nsswitch.confます。抜粋は次のとおりです。

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

hosts行に注意してください。「ホスト名を解決するとき、最初に/etc/hostsファイルを読み込んでホスト名を検索し、見つからない場合はDNSクエリを実行し、見つからない場合はローカルに設定されたシステムホスト名を試します」。

だから、それがとても速い理由です。マシン上のネットワークサービスに依存しないため、再起動またはリロードするサービスがないことに注意してください。


1
しかし、それは可能性があり、キャッシュされた(たとえば、メインメモリ内の解析された)ファイルのバージョンを使用します/etc/hosts。キャッシュバージョンを使用しないのはなぜですか?
ピーターモーテンセン

2
@PeterMortensenは、OSが既にファイルアクセスをキャッシュし、書き込みも正しく処理するためです。
マイケルボルグワード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.