/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?
/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?
Yanıtlar:
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 .
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.
/etc/hosts. Neden önbelleğe alınmış bir sürümü kullanmıyor?