Я не думаю, что у него есть ограничение по количеству строк.
До использования DNS (в 1985 году )именно этот файл служил единственным средством для поиска имен хостов, поэтому я предполагаю, что это означает, что файл должен иметь тысячи или, по крайней мере, сотни записей, чтобы иметь возможность поддерживать наиболее -подключенные интернет-узлы до -1985 года.
Вот пример из 1985 года (формат несколько изменился):http://jim.rees.org/apollo-archive/hosts.txtВ этом файле 1680 строк, из которых 1325 строк хоста. Остальные 355 строк пустые, комментарии, сети или шлюзы 1 .
Единственное реальное ограничение, которое я смог найти, заключалось в том, что в некоторых системах отдельные строки ограничены менее чем BUFSIZ
символами (1024 на моей машине с OpenBSD ).
Если у вас более пары записей в /etc/hosts
, вам следует подумать о настройке локального сервера имен, но это мое личное мнение.
1Спасибо Джеффу Шаллеру за то, что раскопал это.
Мне удалось воспроизвести это поведение. См., например,:
ls -lib
268947 -rw-r--r-- 1 root root 8 Dez 20 12:32 app
268944 -rw-r--r-- 1 root root 24 Dez 20 12:33 aрр
Это в моей системе(Linux debian 4.9.0-7-amd64 #1 SMP Debian 4.9.110-3+deb9u2 (2018-08-13) x86_64 GNU/Linux
).
У меня локаль UTF -8, и символ p
в приведенном выше выводе отличается, но выглядит похоже. В первой строке это LATIN SMALL LETTER P
, а во второй строкеCYRILLIC SMALL LETTER ER
(см.https://unicode.org/cldr/utility/confusables.jsp?a=p&r=None). Это просто пример, это может быть любой символ в имени файла, даже точка.
Когда я использую локаль UTF -8, моя оболочка выдает приведенный выше вывод. Но если я использую локаль, в которой есть не все символы Юникода, например локаль по умолчанию c
, то вывод выглядит следующим образом (вы можете изменить локаль, установивLC_ALL
):
LC_ALL=c ls -lib
268947 -rw-r--r-- 1 root root 8 Dec 20 12:32 app
268944 -rw-r--r-- 1 root root 24 Dec 20 12:33 a\321\200\321\200
Это связано с тем, что CYRILLIC SMALL LETTER ER
отсутствует в ASCII.