/ Etc / hosts dosyalarındaki değişiklikler neden hemen etkili olur?


18

/etc/hostsDosyada yapılan değişikliklerin hemen etkili olduğu görülüyor. Uygulamayı merak ediyorum. Bu özelliğe ulaşmak için hangi sihir kullanılır?

  1. Ubuntu'ya sorun: / etc / hosts üzerinde değişiklik yaptıktan sonra hangi hizmetin yeniden başlatılması gerekiyor?
  2. NetApp Desteği: / etc / hosts dosyası nasıl çalışır?

5
Sadece ana bilgisayar dosyası hızı hakkında küçük bir not, nadiren birkaç KB üzerinde. Büyük olasılıkla dosyayı okumak için kullanılan derlenmiş kitaplıktan daha küçüktür. Düzenli olarak kullanılan küçük bir dosya genellikle bellekte önbellekte kalır. Bu nedenle, dosya her istek için okunmuş olsa bile, ek yükü minimum olur (yani: çok hızlı).
Philip Couling

Yanıtlar:


27

Sihir /etc/hostsdosyayı açıp okuyor:

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)Olan fonksiyon, sadece standart isim çözme arayüzü, sadece açık olacak ve okumak /etc/hostsbir hostname her çağrıldığında.

Standardı kullanmayan getaddrinfo(3), ancak yine de bir şekilde /etc/hostskarışıma (ör. dnsmasqDNS sunucusu) eklenen daha karmaşık uygulamalar inotify(7), /etc/hostsdosyalardaki değişiklikleri izlemek ve yalnızca gerektiğinde yeniden okumak için kullanıyor olabilir .

Tarayıcılar ve diğer benzeri uygulamalar bunu yapmayacaktır. /etc/hostsBir ana bilgisayar adını çözmek için ihtiyaç duydukları her seferinde, libc'nin çözümleyicisini doğrudan kullanmasalar da, çalışmalarını başka yollarla çoğaltsalar bile açacaklar ve okuyacaklar .


1
Parçacığın ne yaptığını biraz daha açıklar mısınız? İlgilendiğim şey, değişikliklerin derhal çalışan kodda nasıl yansıtılacağıdır (işletim sisteminin sağında ağ parçası olmalı mı?).
rudwna

7
@rudwna: Şunu ifade eder: "Bir ana bilgisayar adının her aranması gerektiğinde, çözümleyici (C kütüphanesinin bir parçası) / etc / hosts dosyasını açar ve okur. Dolayısıyla, dosya içeriği okumalar arasında değişirse, sonraki okuma kullanılır yeni içerik ".
dirkt

3
@rudwna, "çalışan kod" ile ilgili olarak, değişiklikleri hemen görmenizin nedeni, birçok standart programın adresleri önbelleğe almamasıdır (veya / etc / hosts güncelleştirmelerini dinleyen bazı akıllı önbellekleme stratejilerine sahiptir). Orada kesinlikle / etc / hosts değişiklikleri görmeyecek ve yeniden başlatılması gereken programlar kesinlikle vardır. Kodu yazan kişi tamamen size kalmış. / Etc / hosts kendisini hakkında büyülü bir şey yok.
SamYonnou

9

Ad çözümlemesi, diğer şeylerin yanı sıra tarafından yönetilir /etc/nsswitch.conf. İşte bir alıntı:

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

hostsÇizgiyi not edin . Diyor ki: "Bir ana bilgisayar adını çözerken, önce ana bilgisayar adını /etc/hostsaramak için dosyayı okuyun , bulamazsa bir DNS sorgusu çalıştırın, eğer bulunamazsa yerel olarak yapılandırılmış sistem ana bilgisayar adını deneyin".

İşte bu yüzden bu kadar hızlı. Makinenin ağ hizmetlerine bağlı olmadığını unutmayın, bu nedenle yeniden başlatılacak veya yeniden yüklenecek hizmet yoktur.


1
Ama olabilir bir önbelleğe alınmış (diyelim ve ana bellekte ayrıştırılan) dosyasının sürümünü kullanmak /etc/hosts. Neden önbelleğe alınmış bir sürümü kullanmıyor?
Peter Mortensen

2
@PeterMortensen, çünkü işletim sistemi zaten dosya erişimini önbelleğe alıyor ve hatta yazma işlemleri doğru şekilde yapıyor.
Michael Borgwardt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.