Вопрос: как изменить / etc / hosts из сценариев оболочки?


Мне нужно изменить hosts записи - например, есть желание обновить hosts иметь active.vm хост соответствует IP-адресу загруженной в данный момент виртуальной машины (с некоторым тестирующим устройством). Гость программного обеспечения в VM сообщает адрес машины обратно на хост, и мне нужно обновить / etc / hosts на основе этой информации - всегда есть время для написания другого демона / cronjob, но хотелось использовать что-то существующее для исправления hosts записи с немым синтаксисом hostname current_ip,

Кто-то рекомендовал мне bind-tools пакет, но - его nsupdate|host вообще не подходят к этой задаче. ..

Обновление: все еще ищет что-то из набора связок, но по крайней мере динамическая регенерация кажется лучшим решением, и augtool тоже хорош.

Обновление: из-за моей лень динамическая регенерация не планируется использовать прямо сейчас, поэтому начал использовать augtool на cronjob, который читает журналы доступа веб-сервера для последнего IP-адреса - на виртуальных машинах, которые запускают Windows, решение для всего решения - это просто веб-браузер, который загружает конкретный URL-адрес от хост-машины и имеет небольшой интервал перезагрузки


5
2018-06-19 18:34


Источник




Ответы:


Взгляни на Авгий, Он имеет готовый синтаксический анализатор / сериализатор для файла hosts (это даже в их кратком путеводителе) и поставляется с простым инструментом для внесения изменений (augtool).


7
2018-06-19 19:26



hm, это в дереве переноса Gentoo, так что попробуем ... но почему-то я чувствую, что синтаксис augtool> set /files/etc/hosts/*[alias[1] = 'active.vm']/ipaddr 1.1.1.1 это не будет терпимо. Будет проверять .. - kagali-san
он действительно работал, но должен был использовать alias = вместо адресации alias[1] или alias[2].. он их не поддерживал, поэтому редактирование записи, отличное от имени, было невозможным (не проблема, но будет запрашивать правильный синтаксис в списке) - kagali-san
Когда вы используете alias в этом выражении это соответствует Любые  alias subnode, а не только первый первый. - ℝaphink
есть даже brew для этого. - chovy


Я бы предпочел не трогать /etc/hosts с точки зрения разбора и т. д. Я бы просто создал /etc/hosts.d составляют какой-то скрипт, который принимает:

  • IP
  • имя
  • псевдонимы

создает один (1) файл с одной (1) строкой. Имя файла будет <ip>.host а потом cat /etc/hosts.d/*host > /tmp/hosts.new ** mv /tmp/hosts.new /etc/hosts, Возможно, добавьте событие incron, которое следит за /etc/hosts.d каталог и восстанавливается всякий раз, когда что-то происходит, таким образом вы также избавитесь от старых записей.


8
2018-06-19 18:39



это очень хорошая идея, с полной регенерацией, сэр - по крайней мере, это избавляет от наличия пустых файлов hosts - kagali-san