Wie kann ich das Größenlimit von bestimmen oder festlegen /etc/hosts
? Wie viele Zeilen kann es haben?
Wie kann ich das Größenlimit von bestimmen oder festlegen /etc/hosts
? Wie viele Zeilen kann es haben?
Antworten:
Zu den problematischen Auswirkungen zählen die langsame Auflösung des Hostnamens (sofern das Betriebssystem die lineare Liste nicht irgendwie in eine schneller zu durchsuchende Struktur umwandelt?) Und die Möglichkeit einer überraschenden Interaktion mit der tabVervollständigung der Shell, lange bevor eine sinnvolle Dateigröße erreicht wird.
Zum Beispiel! Wenn man 500.000 Hosteinträge einfügt/etc/hosts
# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts
Für wissenschaftliche tabZwecke dauert die Fertigstellung des Standardhostnamens in ZSH auf meinem System ca. 25 Sekunden, um eine Fertigstellungsaufforderung zurückzugeben (dies gilt natürlich für einen Laptop aus dem Jahr 2008 mit einer Festplatte mit 5400 U / min, aber immer noch).
Ich glaube nicht, dass es eine Größenbeschränkung in Bezug auf die Anzahl der Zeilen gibt.
Vor DNS (das 1985 in Betrieb genommen wurde) diente diese Datei als einziges Mittel für die Suche nach Hostnamen. Daher gehe ich davon aus, dass dies bedeutet, dass die Datei Tausende oder mindestens Hunderte von Einträgen enthalten sollte in der Lage sein, die am besten vernetzten 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 enthält 1680 Zeilen, von denen 1325 Host-Zeilen sind. Die verbleibenden 355 Zeilen sind leer, Kommentare, Netzwerke oder Gateways 1 .
Das einzige wirkliche Limit, das ich finden konnte, war, dass auf einigen Systemen die einzelnen Zeilen auf weniger als BUFSIZ
Zeichen beschränkt sind (1024 auf meiner OpenBSD-Maschine).
Wenn Sie mehr als ein paar Handvoll Einträge haben /etc/hosts
, sollten Sie stattdessen einen lokalen Nameserver einrichten, aber das ist meine persönliche Meinung.
1 Vielen Dank an Jeff Schaller für die Recherche.
/etc/hosts
Format zu konvertieren. Die meisten Unix-Systeme waren nicht einmal im Internet, und selbst wenn es sich um eine Maschine handelte, brauchte sie keine vollständige Host-Tabelle, sondern nur die Handvoll der Maschinen, mit denen sie kommunizieren musste. Ich wäre überrascht, wenn es viele Maschinen mit mehr als 100 Einträgen gäbe.
Wie kann ich die Größenbeschränkung von / etc / hosts bestimmen?
Da es sich um eine reguläre Datei handelt, entspricht das Limit dem Limit des zugrunde liegenden Dateisystems (das selbst durch die Anzahl der dahinter liegenden Festplatten begrenzt wird), abzüglich des Speicherplatzes, der von anderen Dateien im selben /
Dateisystem (wahrscheinlich root ( )) belegt wird:
Wie kann ich die Größenbeschränkung für / etc / hosts festlegen?
Da es sich um eine manuell bearbeitete Datei handelt, nur manuell:
sed -i '100,$d' /etc/hosts
(um die Zeilen 100 und darüber hinaus zu entfernen).
Größenbeschränkungen gelten nur für die Zuweisung statischer Puffer. gethostbyname(3)
, die die Einträge in analysiert /etc/hosts
, reserviert keine statischen Puffer - und hat es nie getan. Die ursprüngliche Version des BSD 4.3- Algorithmus von 1983 zeigt ein Open-File- und ein Close-File-Parsing-Muster:
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();
Moderne Implementierungen bewahren dieses Erbe in allen wesentlichen Punkten.
Intern *hostent
speichert die Funktionsfamilie jedenfalls einen Dateizeiger auf die aktuelle Zeile in der Datei. sethostent
öffnet die Datei und setzt die Position des Dateizeigers. gethostent
Ruft Daten ab und rückt den Zeiger vor. endhostent
schließt den Dateizeiger. Die GNU C Library bietet eine gründliche Referenz zu diesen Funktionen.
Wie Sie aus der Implementierung erraten können, werden früher in der Datei auftretende Einträge schneller aufgelöst. Wenn Ihre Hosts-Datei sehr groß ist, kommt dies ins Spiel.
Egal wie groß die Datei ist, das Betriebssystem wird sie verbrauchen. Mit der Zeit stoßen Sie jedoch an die Grenzen des Dateisystems (laut Jeff Schallers Antwort ). Sie haben auch maximale Zeilengrößenbeschränkungen (gemäß der Antwort von Kusalananda ). Aber am Ende können Sie es so groß machen, wie Sie wollen. Aber bitte nicht.
... Ich habe mir den Kopf zerbrochen und kann mir für mein ganzes Leben keine Situation oder keinen Umstand vorstellen, in der Sie sich einer Größenbeschränkung nähern würden /etc/hosts
- Sie würden auf praktische Probleme wie die schweren stoßen Performance-Einbußen bei der getaddrinfo()
Familie von Systemaufrufen, bei denen alle die Datei konsultieren müssen, bevor sie entscheiden, ob eine DNS-Abfrage gesendet werden soll.
Ich vermute, dass wir es hier nicht geschafft haben, auf einer höheren Ebene zu kommunizieren. Welches Problem versuchen Sie mit einer riesigen /etc/hosts
Datei zu lösen ? Ich bin mir fast sicher, dass es eine bessere Lösung gibt.
hosts
Datei, um Anzeigen / Malware / Tracking / etc. Auf die schwarze Liste zu setzen. Es gibt kuratierte Listen im Internet, die ich benutze, sind 41.000 Zeilen und 1,1 MB groß.
dnsmasq
- siehe z. B. dnsgate (was ich nicht ausprobiert habe).
/etc/hosts
Datei von hostsfile.org