Arquivo "hosts" do Mac OS X, posso incluir outros arquivos nele?

Arquivo "hosts" do Mac OS X, posso incluir outros arquivos nele?

Estou trabalhando em alguns scripts de automação para definir minhas configurações de rede, hospedar conteúdo de arquivos e arquivos /etc/resolver, ao acessar diferentes redes que frequento.

Podem ocorrer algumas combinações que exigem alterações no arquivo hosts, e eu gostaria de evitar ter que configurar uma matriz de combinações diferentes, duplicando as configurações compartilhadas em todo o lugar.

Por exemplo, eu posso estarsobrea rede de trabalho, ou seja. no prédio, ou posso acessá-lo por VPN. Em ambos os casos, preciso adicionar algumas configurações ao arquivo hosts para que a rede funcione corretamente, algumas são compartilhadas, outras não. Além disso, se eu estiver usando VPN, posso estar em casa; nesse caso, há algumas outras configurações no arquivo hosts que eutambémdeseja adicionar.

Como tal, eu esperava que, em vez de criar um arquivo para "casa, acessando o trabalho pela VPN" versus "casa, não acessando o trabalho", etc., existisse uma maneira de incluir outros arquivos?

Por exemplo, digamos que a seguinte sintaxe hipotética funcione:

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

127.0.0.1 localhost
::1 localhost

Dessa forma, eu poderia simplesmente limpar o conteúdo de um ou de ambos os dois arquivos extras e deixar o resto como está.

Ou, exceto isso, existe uma maneira melhor de fazer isso do que apenas construir um pequeno script que concatena arquivos como esses em um novo arquivo hosts e, como parte da minha configuração de automação, primeiro limpo alguns desses arquivos extras, e então invoco o script para reconstruir o arquivo hosts único a partir desses arquivos extras?

Responder1

Não tenho conhecimento de nenhuma possibilidade de inclusão. O que eu faria, entretanto, é criar seções no meu arquivo hosts e, em seguida, usar um script para comentar as linhas de cada seção usando, por exemplo, sed.

Desta forma, seu arquivo ficaria assim

#%%%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

Editar:Adicionando uma tentativa rápida de modificar os campos.

Removendo o comentário para HOME.HOSTS

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

Colocando de volta os comentários para HOME.HOSTS

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

Esta é uma versão básica e precisa ser ajustada às suas necessidades.

Responder2

Como o dscl não está mais funcionando devido à mudança para OpenDirectoryService, uma opção é usar o ghost:

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

... adicionará esta seção no /etc/hosts:

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

Para limpar a seção #ghost do arquivo hosts, use (isso facilita a substituição da lista de hosts por uma nova):

sudo ghost empty

Você pode encontrar mais informações sobre fantasma aqui: https://github.com/bjeanes/ghost

Responder3

Tive um caso de uso semelhante quando precisei acessar serviços em três locais diferentes usando diferentes configurações de LAN/WAN no arquivo hosts. A resposta de Karolos acima é uma solução possível. Minha abordagem está aqui.

1- ref parahttp://apple.stackexchange.com/q/139267/74657

2- arquivos hosts criados para cada local (hosts.work, hosts.home, hosts.vendor)

3- Usando o script do soloz, aqui (https://github.com/slozo/Network-listener) sempre que me conecto à rede doméstica, executo um script simples para alternar o arquivo hosts.

o método mais simples seria

mv hosts.home /etc/hosts

alternativamente, você pode automatizar a resposta de Karolos acima usando sed para atualizar o arquivo existente ao conectar-se a um SSID específico que você pode detectar e executar facilmente usando o script do soloz mencionado acima.

espero que ajude alguém que se depara com o assunto.

informação relacionada