Каков предел размера / etc / hosts?

Как определить или установить лимит размера /etc/hosts ? Сколько строк у него есть?

  • Как проверить, включена ли автопиляция для NTP?
  • Запрос наложения
  • Идеи для обеспечения безопасности OpenVPN на маршрутизаторе OpenWrt
  • Как я могу отфильтровать эти «Permission denied» из вывода вывода?
  • Как написать сценарий sed для удаления чисел из строки?
  • Автоматическое обновление на Scientific-linux 6.1 64bit
  • Почему Gnu сортирует сортировку по-разному на моей машине OSX и машине Linux?
  • Как скопировать файлы из локального центра обработки данных в локальный центр обработки данных и иметь некоторые отказоустойчивые случаи?
  • Эмуляция escape-последовательностей VT220 в Konsole keytab
  • Автоматическое монтирование HP USB Flash Drive Ошибка
  • Как я могу перечислить свои задания «at» по дате?
  • Как узнать, указывают ли два каталога на одно и то же место
  • 5 Solutions collect form web for “Каков предел размера / etc / hosts?”

    Проблемные эффекты включают медленное разрешение имени хоста (если ОС каким-то образом не преобразует линейный список в структуру с более быстрым поиском?), А потенциал для неожиданного взаимодействия с завершением вкладки оболочки значительно до достижения значимого размера файла.

    Например! Если в /etc/hosts помещается 500 000 записей /etc/hosts

     # perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts 

    для науки завершение закладки имени хоста по умолчанию в ZSH занимает около 25 секунд в моей системе, чтобы вернуть приглашение на завершение (предоставлено, это на ноутбуке с 2008 года с диском 5400 об / мин, но все же).

    Я не думаю, что он имеет ограничение по количеству строк.

    До DNS (который был введен в действие в 1985 году) именно этот файл служил единственным средством для поиска имен хостов, поэтому я предполагаю, что это означает, что файл должен иметь тысячи или не менее сотни записей для иметь возможность поддерживать наиболее хорошо подключенные интернет-узлы до 1985 года.

    Вот пример с 1985 года (формат несколько изменился): http://jim.rees.org/apollo-archive/hosts.txt Этот файл имеет 1680 строк, из которых 1325 – это строки хоста. Остальные 355 строк пусты, комментарии, сети или шлюзы 1 .

    Единственным реальным пределом, который я смог найти, было то, что в некоторых системах отдельные строки ограничены BUFSIZ (1024 на моей машине OpenBSD).

    Если в /etc/hosts содержится более нескольких десятков записей, вам следует подумать о настройке локального сервера имен, но это мое личное мнение.


    1 Спасибо Джеффу Шаллеру за то, что он выкопал это.

    Как определить предел размера / etc / hosts?

    Это обычный файл, поэтому предел будет соответствовать ограничениям базовой файловой системы (которые сами будут ограничены количеством дисков за ним), за исключением пространства, используемого любыми другими файлами в одной и той же (возможно, корневой ( / )) файловой системе :

    • ext2 / 3: 2 TiB
    • ext4: 16 TiB (с размером блока 4KiB по умолчанию)
    • xfs: 500 TiB

    Как установить ограничение размера / etc / hosts?

    Поскольку это отредактированный вручную файл, только вручную:

     sed -i '100,$d' /etc/hosts 

    (для удаления строк 100 и более).

    Пределы размера применяются только при распределении статических буферов. gethostbyname(3) , который анализирует записи в /etc/hosts , не выделяет статические буферы – и никогда не имеет. В оригинальной версии 1983 года алгоритма BSD 4.3 показан открытый файл, в то время как синтаксический анализ, шаблон закрытого файла:

     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(); 

    Современные реализации сохраняют это наследие во всех основных аспектах.

    В любом случае внутреннее семейство функций *hostent хранит указатель файла на текущую строку в файле. sethostent открывает файл и устанавливает позицию указателя на файл. gethostent получает данные и продвигает указатель. endhostent закрывает указатель файла. Библиотека GNU C предлагает подробную ссылку на эти функции.

    Как вы могли догадаться из реализации, записи, возникающие ранее в файле, решаются быстрее. Если ваш файл hosts огромен, это вступает в игру.

    Таким образом, независимо от того, насколько большой файл, ОС будет его потреблять. В конце концов, однако, вы столкнетесь с ограничениями файловой системы (за ответ Джеффа Шаллера ). У вас также есть максимальные ограничения по размеру линии (на ответ Кусалананды ). Но, в конце концов, вы можете сделать так, как хотите. Но, пожалуйста, не надо.

    … Я разбил свой мозг и для жизни, я не могу придумать ни одной ситуации или обстоятельств, когда вы подходите к какой-либо проблеме ограничения размера в /etc/hosts – вы столкнетесь с практическими такие проблемы, как серьезная производительность, попадают в семейство системных вызовов getaddrinfo() которые все должны проконсультироваться с файлом, прежде чем принимать решение о том, отправлять ли DNS-запрос, не говоря уже о проблемах с сохранением плоского текстового файла, размер которого.

    Я подозреваю, что то, что мы имеем здесь, – это неспособность общаться на более высоком уровне. Какую проблему вы пытаетесь решить с помощью гигантского файла /etc/hosts ? Я почти уверен, что есть лучшее решение, чем это.

    Linux и Unix - лучшая ОС в мире.