Zu den problematischen Effekten gehören eine langsame Hostnamenauflösung (es sei denn, das Betriebssystem konvertiert irgendwie die lineare Liste in eine schneller zu durchsuchende Struktur?) und die Möglichkeit einer überraschenden Interaktion mit Shell tab Fertigstellung, lange bevor eine sinnvolle Dateigröße erreicht wird.
Zum Beispiel! Stellt man 500.000 Host-Einträge in /etc/hosts
# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts
für die Wissenschaft der Standardhostname tab Die Vervollständigung in ZSH dauert auf meinem System ungefähr 25 Sekunden, um eine Vervollständigungsaufforderung zurückzugeben (zugegeben, dies ist auf einem Laptop von 2008 mit einer 5400-RPM-Festplatte, aber immer noch).
Ich glaube nicht, dass es eine Größenbeschränkung in Bezug auf die Anzahl der Zeilen gibt.
Vor DNS (das 1985 eingeführt wurde) war diese Datei das einzige Mittel, um Hostnamen nachzuschlagen, also nehme ich an, dass dies bedeutet, dass die Datei Tausende oder zumindest Hunderte von Einträgen haben sollte in der Lage sein, die am besten verbundenen Internetknoten vor 1985 zu unterstützen.
Hier ist ein Beispiel aus dem Jahr 1985 (das Format hat sich etwas geändert):http://jim.rees.org/apollo-archive/hosts.txt Diese Datei hat 1680 Zeilen, von denen 1325 Host-Zeilen sind. Die restlichen 355 Zeilen sind leer, Kommentare, Netzwerke oder Gateways.
Die einzige wirkliche Grenze, die ich finden konnte, war, dass auf einigen Systemen die einzelnen Zeilen sind auf weniger als BUFSIZ
begrenzt Zeichen (1024 auf meiner OpenBSD-Maschine).
Wenn Sie mehr als ein paar wenige Einträge in /etc/hosts
haben , sollten Sie stattdessen einen lokalen Nameserver einrichten, aber das ist meine persönliche Meinung.
Danke an Jeff Schaller für das Ausgraben.
Wie kann ich die Größenbeschränkung von /etc/hosts ermitteln?
Es ist eine reguläre Datei, also würde das Limit den Grenzen des zugrunde liegenden Dateisystems entsprechen (das selbst durch die Anzahl der dahinter liegenden Festplatten begrenzt wäre), abzüglich des Speicherplatzes, der von anderen Dateien in derselben verwendet wird (wahrscheinlich root (/
)) Dateisystem:
- ext2/3:2 TiB
- ext4:16 TiB (mit der Standardblockgröße von 4 KiB)
- xfs:500 TiB
Wie kann ich die Größenbeschränkung von /etc/hosts festlegen?
Da es sich um eine manuell bearbeitete Datei handelt, nur manuell:
sed -i '100,$d' /etc/hosts
(zum Entfernen der Zeilen 100 und darüber hinaus).