Mac OS X“hosts”文件,我可以将其他文件包含在其中吗?

Mac OS X“hosts”文件,我可以将其他文件包含在其中吗?

我正在编写一些自动化脚本来配置我的网络设置、主机文件内容和 /etc/resolver 文件,以便访问我经常访问的不同网络。

有一些组合可能会发生,所有这些组合都需要更改主机文件,并且我想避免必须设置不同组合的矩阵,从而在各处重复共享设置。

例如,我可能我可以使用工作网络(即在大楼内)或通过 VPN 访问。在这两种情况下,我都需要向 hosts 文件添加一些设置以使网络正常工作,有些设置是共享的,有些则不是。此外,如果我使用 VPN,我可能在家,在这种情况下,hosts 文件中还有一些其他设置我想添加。

因此,我希望,除了为“家庭,通过 VPN 访问工作”与“家庭,不访问工作”等创建一个文件外,有没有办法让我包含其他文件?

例如,假设以下假设语法有效:

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

127.0.0.1 localhost
::1 localhost

这样,我可以简单地清除这两个额外文件中的一个或两个的内容,而保留其余部分。

或者,除此之外,有没有更好的方法来做到这一点,而不是仅仅构建一个小脚本,将这些文件连接成一个新的主机文件,作为我的自动化设置的一部分,我首先清除一些额外的文件,然后我调用脚本从这些额外的文件中重建单个主机文件?

答案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

由于切换到 OpenDirectoryService 后 dscl 不再起作用,因此一个选项是使用 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

答案3

当我需要使用 hosts 文件中不同的 LAN / WAN 设置访问三个不同位置的服务时,我也遇到过类似的用例。Karolos 的上述回答是一种可能的解决方案。我的方法如下。

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 自动执行上述 Karolos 的回答,以在连接到特定 SSID 时更新现有文件,您可以使用上面提到的 soloz 脚本轻松检测和运行该文件。

希望这能帮助任何遇到该问题的人。

相关内容