Bagaimana saya bisa menentukan atau mengatur batas ukuran /etc/hosts
? Berapa banyak garis yang dimilikinya?
Bagaimana saya bisa menentukan atau mengatur batas ukuran /etc/hosts
? Berapa banyak garis yang dimilikinya?
Jawaban:
Efek bermasalah termasuk resolusi hostname lambat (kecuali OS entah bagaimana mengubah daftar linier menjadi struktur pencarian yang lebih cepat?) Dan potensi interaksi yang mengejutkan dengan tabpenyelesaian shell jauh sebelum ukuran file yang berarti tercapai.
Sebagai contoh! Jika satu tempat 500.000 entri host di/etc/hosts
# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts
untuk sains, tabpenyelesaian nama host default di ZSH membutuhkan sekitar ~ 25 detik pada sistem saya untuk mengembalikan prompt penyelesaian (memang, ini ada di laptop mulai 2008 dengan disk 5400 RPM, tapi tetap saja).
Saya tidak berpikir itu memiliki batas ukuran dalam hal jumlah garis.
Sebelum DNS (yang mulai digunakan pada tahun 1985), file inilah yang menjadi satu-satunya cara untuk melakukan pencarian nama host, jadi saya berasumsi bahwa ini berarti file tersebut harus dapat memiliki ribuan atau setidaknya ratusan entri untuk dapat mendukung node Internet pra-1985 yang paling terhubung dengan baik.
Berikut adalah contoh dari tahun 1985 (formatnya agak berubah): http://jim.rees.org/apollo-archive/hosts.txt File ini memiliki 1680 baris dari yang 1325 adalah baris host. 355 baris yang tersisa kosong, komentar, jaringan atau gateway 1 .
Satu-satunya batasan nyata yang dapat saya temukan adalah bahwa pada beberapa sistem, garis individual dibatasi hingga kurang dari BUFSIZ
karakter (1024 pada mesin OpenBSD saya).
Jika Anda memiliki lebih dari beberapa entri /etc/hosts
, Anda harus mempertimbangkan untuk menyiapkan server nama lokal, tetapi itulah pendapat pribadi saya.
1 Terima kasih kepada Jeff Schaller karena telah menggali ini.
/etc/hosts
format. Sebagian besar sistem Unix bahkan tidak ada di Internet, dan bahkan jika sebuah mesin, itu tidak memerlukan tabel host lengkap, hanya segelintir mesin yang perlu diajak bicara. Saya akan terkejut jika ada banyak mesin dengan lebih dari 100 entri.
Bagaimana saya bisa menentukan batas ukuran / etc / hosts?
Ini adalah file biasa, jadi batasnya akan sesuai dengan batas filesystem yang mendasari (yang dengan sendirinya dibatasi oleh jumlah disk di belakangnya), minus ruang yang digunakan oleh file lain dalam /
filesystem yang sama (mungkin root ( )):
Bagaimana saya bisa mengatur batas ukuran / etc / hosts?
Karena ini adalah file yang diedit secara manual, hanya secara manual:
sed -i '100,$d' /etc/hosts
(untuk menghapus garis 100 dan seterusnya).
Batas ukuran hanya berlaku ketika mengalokasikan buffer statis. gethostbyname(3)
, yang mem-parsing entri /etc/hosts
, tidak mengalokasikan buffer statis - dan tidak pernah. Rilis asli algoritma BSD 4.3 tahun 1983 menunjukkan file terbuka, sementara parse line, pola file dekat:
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();
Implementasi modern mempertahankan warisan ini dalam semua hal yang penting.
Bagaimanapun, secara internal, *hostent
keluarga fungsi menyimpan pointer file ke baris saat ini dalam file. sethostent
membuka file dan mengatur posisi penunjuk file. gethostent
mendapat data dan memajukan pointer. endhostent
menutup penunjuk file. Perpustakaan C GNU menawarkan referensi menyeluruh tentang fungsi-fungsi ini.
Seperti yang Anda tebak dari implementasi, entri yang terjadi sebelumnya di file menyelesaikan lebih cepat. Jika file host Anda sangat besar, ini mulai berlaku.
Jadi, tidak peduli seberapa besar file tersebut, OS akan mengkonsumsinya. Namun, pada akhirnya, Anda akan mencapai batas filesystem (sesuai jawaban Jeff Schaller ). Anda juga memiliki batas ukuran garis maksimum (per jawaban Kusalananda ). Tapi, pada akhirnya, Anda bisa menjadikannya sebesar yang Anda inginkan. Tapi tolong, jangan.
... Saya telah memutar otak dan untuk kehidupan saya, saya tidak dapat memikirkan satu situasi atau keadaan di mana Anda akan mendekati segala jenis masalah batas ukuran /etc/hosts
- Anda akan mengalami masalah praktis seperti yang parah hit kinerja ke getaddrinfo()
keluarga panggilan sistem yang semua harus berkonsultasi file sebelum memutuskan apakah akan mengirim permintaan DNS, untuk mengatakan tidak ada masalah mempertahankan file teks datar ukuran itu.
Saya menduga bahwa apa yang kita miliki di sini adalah kegagalan untuk berkomunikasi di tingkat yang lebih tinggi. Masalah apa yang Anda coba selesaikan dengan /etc/hosts
file raksasa ? Saya hampir yakin ada solusi yang lebih baik dari ini.
hosts
file untuk daftar hitam iklan / malware / pelacakan / dll. Ada daftar yang dikuratori di internet, yang saya gunakan adalah 41k baris dan ukuran 1.1MB.
dnsmasq
untuk itu - lihat misalnya dnsgate (yang saya belum coba).
/etc/hosts
file besar Anda dari hostsfile.org