Файл "хост" Mac OS X, чи можу я включити до нього інші файли?


10

Я працюю над деякими сценаріями автоматизації, щоб налаштувати свої мережеві параметри, вміст файлів хостів та / etc / Resolver-файли, коли я отримую доступ до різних мереж.

Можуть виникнути деякі комбінації, які вимагають змін у файлі хостів, і я хотів би уникати того, щоб встановлювати матрицю різних комбінацій, дублюючи загальні налаштування в усьому місці.

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

Як такий, я сподівався, що замість того, щоб створити один файл для "домашнього доступу, доступу до роботи через VPN" проти "домашнього, не доступного до роботи" тощо, чи є для мене спосіб включити інші файли?

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

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

127.0.0.1 localhost
::1 localhost

Таким чином я міг просто очистити вміст одного або обох цих двох зайвих файлів, а решту залишити.

Або, заборонивши це, чи є кращий спосіб це зробити, ніж просто створити невеликий скрипт, який об'єднує такі файли, як ці, у новий файл хостів, і в рамках моєї настройки автоматизації я спочатку очищую деякі додаткові файли, а потім я запускаю скрипт, щоб відновити єдиний файл хостів із цих зайвих файлів?


Ви впевнені, що вам потрібні зміни у файлі хостів на відміну, наприклад, наприклад, змінити записи хоста через dsclбезпосередньо?
Даніель Бек

Я не знав dsclкоманди, мені доведеться досліджувати і це.
Лассе В. Карлсен

Дивіться, наприклад, тут . Внутрішньо OS X використовує свої служби каталогів, якими ви можете керувати, використовуючи dscl, що /etc/hostsє просто одним із доступних джерел даних, надаючи (звичайно) відображення імені хоста / IP-адреси. Налаштування сценарію, який записує dsclта очищає кеш, може працювати краще у вашій ситуації, ніж зберігання декількох копій файлу хостів або весь час його переписування.
Даніель Бек

@DanielBeck: Добрий момент! Мені не було відомо про всі можливості dscl.
Каролос

Дайте мені знати, як це працює, якщо ви хочете спробувати зробити це саме так. Я сам не пробував цього, тому не ставлю це як відповідь. Удачі!
Даніель Бек

Відповіді:


7

Я не знаю жодної можливості включення. Однак я б це створив розділи у своєму файлі хостів, а потім використовувати сценарій для коментування рядків у кожному розділі, використовуючи, наприклад, 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

Це основна версія, і її потрібно адаптувати до ваших потреб.


Здрастуйте, Каролос, чи можете ви описати детальніше про команду: sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostsта про розділ у файлі хостів, будь ласка. Я справді не розумію, чому :(
Toan Nguyen

@NNToan: Хто робить рядок, це сказати sedдодати або видалити # на початку рядків між двома рядками # %%%. Це буде коментувати або не коментувати рядки. На прикладі показано, як коментувати розділ HOME.HOSTS за допомогою # %%% HOME.HOSTS; ви повинні використовувати # %%% WORK.HOSTS замість команди sed, щоб коментувати або не коментувати розділ WORK.HOSTS.
Каролос

0

Оскільки 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 у файлі хостів (це полегшує заміну списку хостів на новий):

sudo ghost empty

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


0

У мене був подібний випадок використання, коли мені потрібно було отримати доступ до служб у трьох різних місцях, використовуючи різні настройки LAN / WAN у файлі хостів. Відповідь Каролоса вище - одне можливе рішення. Мій підхід тут.

1- посилання на http://apple.stackexchange.com/q/139267/74657

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

3- Використовуючи сценарій soloz, тут ( https://github.com/slozo/Network-listener ) кожного разу, коли я підключаюся до домашньої мережі, я виконую простий скрипт, щоб переключити файл хостів.

найпростіший метод був би

mv hosts.home /etc/hosts

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

сподіваємось, що допоможе комусь, хто натрапив на цю тему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.