如何确定或设置 的大小限制/etc/hosts
?它可以有多少条线?
答案1
有问题的影响包括缓慢的主机名解析(除非操作系统以某种方式将线性列表转换为搜索速度更快的结构?)以及tab在达到任何有意义的文件大小之前与 shell 完成进行令人惊讶的交互的可能性。
例如!如果将 500,000 个主机条目放入/etc/hosts
# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts
为了科学起见,ZSH 中的默认主机名tab完成在我的系统上大约需要 25 秒才能返回完成提示(当然,这是在 2009 年配备 5400 RPM 磁盘的笔记本电脑上,但仍然如此)。
答案2
我认为它在行数方面没有大小限制。
在 DNS(1985 年投入使用)之前,该文件是进行主机名查找的唯一手段,因此我认为这意味着该文件应该能够包含数千或至少数百个条目能够支持 1985 年之前连接最良好的互联网节点。
这是 1985 年的示例(格式有所改变):http://jim.rees.org/apollo-archive/hosts.txt 该文件有 1680 行,其中 1325 行是主机行。其余 355 行是空白、注释、网络或网关1。
我能找到的唯一真正的限制是,在某些系统上,个人线限制为少于BUFSIZ
字符(在我的 OpenBSD 机器上为 1024)。
如果您在 中拥有多个条目/etc/hosts
,您应该考虑设置一个本地名称服务器,但这是我个人的意见。
1 感谢 Jeff Schaller 对此进行了挖掘。
答案3
如何确定 /etc/hosts 的大小限制?
它是一个常规文件,因此限制将对应于底层文件系统的限制(其本身受到其后面的磁盘数量的限制),减去同一(可能是根(/
))文件系统中任何其他文件使用的空间:
- ext2/3:2 TiB
- ext4:16 TiB(默认 4KiB 块大小)
- xfs:500 TiB
如何设置 /etc/hosts 的大小限制?
由于它是手动编辑的文件,因此只能手动:
sed -i '100,$d' /etc/hosts
(删除第 100 行及以上)。
答案4
...我已经绞尽脑汁,在我的一生中,我想不出任何一种情况或情况可以解决任何类型的大小限制问题/etc/hosts
- 你会遇到实际问题,例如严重的系统调用系列的性能受到影响getaddrinfo()
,在决定是否发送 DNS 查询之前,所有系统调用都必须查阅文件,更不用说维护这么大的平面文本文件的问题了。
我怀疑我们现在的情况是无法在更高层面上进行沟通。您想用一个巨大的/etc/hosts
文件解决什么问题?我几乎可以肯定有比这更好的解决方案。