Boyut sınırını nasıl belirleyebilir veya ayarlayabilirim /etc/hosts
? Kaç satır olabilir?
Boyut sınırını nasıl belirleyebilir veya ayarlayabilirim /etc/hosts
? Kaç satır olabilir?
Yanıtlar:
Sorunlu etkiler arasında, yavaş ana bilgisayar adı çözümü (işletim sistemi bir şekilde doğrusal listeyi daha hızlı bir arama yapısına dönüştürmezse?) Ve tabanlamlı bir dosya boyutuna ulaşılmadan önce kabuk tamamlama ile şaşırtıcı etkileşim potansiyeli vardır .
Örneğin! Biri 500.000 ana bilgisayar girişine/etc/hosts
# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts
Bilim için, tabZSH'deki varsayılan ana bilgisayar adı tamamlamanın sistemime bir tamamlama istemini döndürmesi yaklaşık 25 saniye sürüyor (bu, 2008'den beri 5400 RPM diskli bir dizüstü bilgisayarda, ancak hala geçerli).
Satır sayısı açısından bir boyut sınırı olduğunu sanmıyorum.
(1985'te kullanıma sunulan) DNS’ten önce, bu dosya ana bilgisayar ad araması yapmanın tek yoluydu, bu yüzden dosyanın binlerce veya en az yüzlerce giriş yapabilmesi gerektiğini düşünüyorum. En iyi bağlanmış 1985 öncesi İnternet düğümlerini destekleyebilme.
İşte 1985'ten bir örnek (biçim biraz değişti): http://jim.rees.org/apollo-archive/hosts.txt Bu dosyanın 1325 tanesinde ana hat var. Kalan 355 satır boş, yorum, ağ veya ağ geçidi 1'dir .
Bulabildiğim tek gerçek sınır, bazı sistemlerde, tek tek satırlarınBUFSIZ
karakterlerden daha küçük olmasıydı (OpenBSD makinemde 1024).
Birkaç girişden fazla girişiniz /etc/hosts
varsa, bunun yerine yerel bir ad sunucusu ayarlamayı düşünmelisiniz, ama bu benim kişisel görüşüm.
1 Bunu kazdığınız için teşekkürler Jeff Schaller.
/etc/hosts
formata dönüştürmenin yaygın olduğunu düşünmüyorum . Çoğu Unix sistemi internette bile değildi ve bir makine bile olsa, konuşması gereken makinelerin sadece bir kısmı tam bir ana masaya ihtiyaç duymuyordu. 100'den fazla girişi olan birçok makine olsaydı şaşırırdım.
/ Etc / hosts dosyasının boyut sınırını nasıl belirleyebilirim?
Bu normal bir dosyadır, bu nedenle sınır, altta yatan dosya sisteminin sınırlarına (bunun arkasındaki disklerin sayısıyla sınırlandırılmış olur) karşılık gelir, aynı (muhtemelen root ( /
)) dosya sistemindeki diğer dosyalar tarafından kullanılan alanı ekler:
/ Etc / hosts dosyasının boyut sınırını nasıl ayarlarım?
El ile düzenlenmiş bir dosya olduğundan, yalnızca el ile:
sed -i '100,$d' /etc/hosts
(100 ve daha sonraki satırları kaldırmak için).
Boyut sınırları yalnızca statik arabellekleri ayırırken uygulanır. gethostbyname(3)
Girişleri ayrıştırır, /etc/hosts
statik tamponları ayırmaz - ve asla. Orijinal BSD 4.3 algoritması 1983 sürümü , bir açık dosya gösterirken, ayrıştırma satırı, kapalı dosya deseni gösterir:
sethostent(0);
while (p = gethostent()) {
if (strcmp(p->h_name, name) == 0)
break;
for (cp = p->h_aliases; *cp != 0; cp++)
if (strcmp(*cp, name) == 0)
goto found;
}
found:
endhostent();
Modern uygulamalar bu mirası tüm temellerde tutar.
Neyse, dahili olarak, *hostent
fonksiyonlar ailesi bir dosya göstericisini dosyadaki mevcut satıra saklar. sethostent
dosyayı açar ve dosya işaretçi konumunu ayarlar. gethostent
veri alır ve işaretçiyi ilerletir. endhostent
dosya işaretçisini kapatır. GNU C Kütüphanesi bu fonksiyonlar hakkında kapsamlı bir referans sunar .
Uygulamadan tahmin edebileceğiniz gibi, dosyada daha önce gerçekleşen girişler daha hızlı çözülür. Anasistem dosyanız çok büyükse, bu devreye girer.
Yani, dosya ne kadar büyük olursa olsun, işletim sistemi onu tüketecektir. Sonunda, ancak, dosya sistemi sınırlarına ( Jeff Schaller'in cevabına göre ) çarpacaksınız . Ayrıca maksimum hat büyüklüğü limitleriniz de vardır ( Kusalananda'nın cevabına göre ). Ancak, sonunda, istediğiniz kadar büyük yapabilirsiniz. Ama lütfen yapma.
... beynimi kırdım ve hayatım boyunca tek bir durum ya da herhangi bir boyut sınırı sorununa yaklaşacağınız bir durum düşünemiyorum /etc/hosts
- şiddetli gibi pratik sorunlara maruz kalacaksınız getaddrinfo()
Sistem ailesine olan etkileyici performans , bir DNS sorgusu gönderip göndermemeye karar vermeden önce dosyaya danışması gerektiğini, bu boyutta düz bir metin dosyasını koruyan sorunların hiçbirini söylememesi gerektiğini söyler.
Burada sahip olduğumuz şeyin daha yüksek düzeyde iletişim kuramama ihtimalinden şüpheleniyorum. Devasa bir /etc/hosts
dosyayla hangi sorunu çözmeye çalışıyorsunuz ? Bundan daha iyi bir çözüm olduğuna neredeyse eminim.
hosts
reklamları / kötü amaçlı yazılımları / izlemeleri / vb. Kara listeye almak için bir dosya kullanır. İnternette küratörlüğünde listeler var, kullandıklarım 41 bin satır ve 1,1 MB boyutunda.
dnsmasq
- bakınız örneğin dnsgate (denemedim).
/etc/hosts
dosyalarınızı hostsfile.org