Comment puis-je déterminer ou définir la taille limite de /etc/hosts
? Combien de lignes peut-il avoir?
Comment puis-je déterminer ou définir la taille limite de /etc/hosts
? Combien de lignes peut-il avoir?
Réponses:
Les effets problématiques incluent une résolution lente du nom d'hôte (à moins que le système d'exploitation ne convertisse d'une manière ou d'une autre la liste linéaire en une structure permettant une recherche plus rapide?) Et le potentiel d'interaction surprenante avec la tabcomplétion du shell bien avant que toute taille de fichier significative ne soit atteinte.
Par exemple! Si on place 500 000 entrées d’hôte dans/etc/hosts
# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts
pour la science, l' tabachèvement du nom d'hôte par défaut dans ZSH prend environ 25 secondes environ sur mon système pour renvoyer une invite d'achèvement (bien entendu, il s'agit d'un ordinateur portable de 2008 avec un disque à 5 400 tr / min, mais quand même).
Je ne pense pas qu'il y ait une limite de taille en termes de nombre de lignes.
Avant DNS (mis en service en 1985), c’était ce fichier qui était le seul moyen de rechercher des noms d’hôte. Je suppose donc que cela signifie que le fichier doit pouvoir contenir des milliers ou au moins des centaines d’entrées. être en mesure de prendre en charge les nœuds Internet antérieurs à 1985 les mieux connectés.
Voici un exemple de 1985 (le format a quelque peu changé): http://jim.rees.org/apollo-archive/hosts.txt Ce fichier contient 1680 lignes, dont 1325 sont des lignes hôtes. Les 355 lignes restantes sont vierges, commentaires, réseaux ou passerelles 1 .
La seule limite réelle que j'ai pu trouver est que sur certains systèmes, les lignes individuelles sont limitées à moins de BUFSIZ
caractères (1024 sur ma machine OpenBSD).
Si vous avez plusieurs entrées /etc/hosts
, vous devriez envisager de configurer un serveur de noms local à la place, mais c'est mon opinion personnelle.
1 Merci à Jeff Schaller pour avoir creusé le sujet
/etc/hosts
format. La plupart des systèmes Unix n'étaient même pas sur Internet, et même si une machine en avait une, elle n'avait pas besoin d'une table d'hôtes complète, mais seulement de la poignée de machines avec lesquelles elle devait parler. Je serais surpris s'il y avait beaucoup de machines avec plus de 100 entrées.
Comment puis-je déterminer la taille limite de / etc / hosts?
C'est un fichier standard, donc la limite correspondrait aux limites du système de fichiers sous-jacent (qui serait lui-même limité par le nombre de disques qu'il contient), moins l'espace utilisé par tout autre fichier du même /
système de fichiers (probablement root ( )):
Comment puis-je définir la taille limite de / etc / hosts?
Comme c'est un fichier édité manuellement, seulement manuellement:
sed -i '100,$d' /etc/hosts
(pour supprimer les lignes 100 et au-delà).
Les limites de taille s'appliquent uniquement lors de l'allocation de tampons statiques. gethostbyname(3)
, qui analyse les entrées dans /etc/hosts
, n’alloue pas de tampons statiques - et ne l’a jamais fait. La version initiale de 1983 de l' algorithme BSD 4.3 montre un modèle de fichier ouvert, tandis que la ligne d'analyse, modèle de fichier fermé:
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();
Les applications modernes conservent cet héritage dans l’essentiel.
Quoi qu'il en soit, en interne, la *hostent
famille de fonctions stocke un pointeur de fichier sur la ligne en cours dans le fichier. sethostent
ouvre le fichier et définit la position du pointeur de fichier. gethostent
obtient des données et avance le pointeur. endhostent
ferme le pointeur de fichier. La bibliothèque GNU C offre une référence complète sur ces fonctions.
Comme vous pouvez le deviner lors de l'implémentation, les entrées apparaissant plus tôt dans le fichier sont résolues plus rapidement. Si votre fichier hosts est énorme, cela entre en jeu.
Ainsi, quelle que soit la taille du fichier, le système d'exploitation le consommera. Finalement, vous atteindrez les limites du système de fichiers (selon la réponse de Jeff Schaller ). Vous avez également des limites maximales de taille de ligne (selon la réponse de Kusalananda ). Mais au final, vous pouvez le faire aussi gros que vous le souhaitez. Mais s'il vous plaît, ne le faites pas.
... Je me suis creusé la tête et je ne peux imaginer une seule situation ou circonstance où vous aborderiez n'importe quel problème de limite de taille /etc/hosts
- vous rencontriez des problèmes pratiques comme le grave Les performances affectent la getaddrinfo()
famille des appels système qui doivent tous consulter le fichier avant de décider d'envoyer une requête DNS, sans parler des problèmes liés au maintien d'un fichier texte de cette taille.
Je soupçonne que ce que nous avons ici est un échec pour communiquer à un niveau supérieur. Quel problème essayez-vous de résoudre avec un /etc/hosts
fichier gigantesque ? Je suis presque sûr qu'il existe une meilleure solution que celle-ci.
hosts
fichier pour mettre en liste noire les annonces, les programmes malveillants, le suivi, etc. Il existe des listes sélectionnées sur Internet, celle que j’utilise est de 41 000 lignes et de 1,1 Mo de taille.
dnsmasq
pour cela - voir par exemple dnsgate (que je n'ai pas encore essayé).
/etc/hosts
fichier sur hostsfile.org