Файл «hosts» Mac OS X. Могу ли я включить в него другие файлы?

Файл «hosts» Mac OS X. Могу ли я включить в него другие файлы?

Я работаю над некоторыми скриптами автоматизации для настройки параметров сети, содержимого файлов hosts и файлов /etc/resolver при доступе к различным сетям, между которыми я часто бываю.

Существуют некоторые комбинации, которые могут потребовать внесения изменений в файл hosts, и мне бы хотелось избежать необходимости настраивать матрицу различных комбинаций, дублируя общие настройки повсюду.

Например, я могу бытьнарабочая сеть, т. е. в здании, или я могу получить к ней доступ через VPN. В обоих случаях мне нужно добавить некоторые настройки в файл hosts для правильной работы сети, некоторые из них общие, некоторые нет. Кроме того, если я использую VPN, я могу быть дома, в этом случае в файле hosts есть некоторые другие настройки, которые ятакжехочу добавить.

Таким образом, я надеялся, что вместо создания одного файла для «дома, доступ к работе через VPN» и «дома, нет доступа к работе» и т. д., есть ли способ включить другие файлы?

Например, предположим, что работает следующий гипотетический синтаксис:

#!include home.hosts
#!include work.hosts

127.0.0.1 localhost
::1 localhost

Таким образом, я мог бы просто очистить содержимое одного или обоих из этих двух дополнительных файлов, а остальное оставить как есть.

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

решение1

Я не знаю о возможности включения. Однако я бы сделал разделы в моем файле hosts, а затем использовал бы скрипт для комментирования строк в каждом разделе, используя, например, sed.

Таким образом, ваш файл будет выглядеть так

#%%%HOME.HOSTS%%%
#Put here the contents of home.hosts
#%%%WORK.HOSTS%%%
#Put here the contents of work.hosts

#%%%ALWAYS_ON%%%
127.0.0.1 localhost
::1 localhost

Редактировать:Добавляю быструю попытку изменить поля.

Удаление комментария для HOME.HOSTS

 sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts

Возвращаем комментарии для HOME.HOSTS

 sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^\([^#]\)/#\1/g' hosts

Это базовая версия, которую необходимо настроить в соответствии с вашими потребностями.

решение2

Поскольку dscl больше не работает из-за перехода на OpenDirectoryService, одним из вариантов является использование ghost:

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

...добавит этот раздел в /etc/hosts:

# ghost start
10.0.0.1 fw.start.se
# ghost end

Чтобы очистить раздел #ghost файла hosts, используйте (это позволит легко заменить список хостов новым):

sudo ghost empty

Более подробную информацию о привидении можно найти здесь: https://github.com/bjeanes/ghost

решение3

У меня был похожий случай использования, когда мне нужно было получить доступ к службам в трех разных местах, используя разные настройки LAN / WAN в файле hosts. Ответ Каролоса выше — одно из возможных решений. Мой подход здесь.

1- ссылка наhttp://apple.stackexchange.com/q/139267/74657

2- созданы файлы хостов для каждого местоположения (hosts.work, hosts.home, hosts.vendor)

3- Используя скрипт soloz, здесь (https://github.com/slozo/Network-listener) всякий раз, когда я подключаюсь к домашней сети, я запускаю простой скрипт для переключения файла hosts.

Самый простой метод —

mv hosts.home /etc/hosts

в качестве альтернативы вы можете автоматизировать ответ Каролоса выше, используя sed для обновления существующего файла при подключении к определенному SSID, который вы можете легко обнаружить и запустить с помощью скрипта soloz, упомянутого выше.

надеюсь, это поможет любому, кто столкнется с этой проблемой.

Связанный контент