/etc/hosts
Dosyada 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/hosts
Dosyada 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/hosts
dosyayı 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/hosts
bir hostname her çağrıldığında.
Standardı kullanmayan getaddrinfo(3)
, ancak yine de bir şekilde /etc/hosts
karışıma (ör. dnsmasq
DNS sunucusu) eklenen daha karmaşık uygulamalar inotify(7)
, /etc/hosts
dosyalardaki 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/hosts
Bir 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/hosts
aramak 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?