File "hosts" di Mac OS X, posso includere altri file con esso?


10

Sto lavorando ad alcuni script di automazione per configurare le impostazioni della mia rete, i contenuti dei file host e i file / etc / resolver, quando accedo a reti diverse tra cui frequento.

Esistono alcune combinazioni che possono richiedere modifiche al file hosts e vorrei evitare di dover impostare una matrice di combinazioni diverse, duplicando le impostazioni condivise ovunque.

Ad esempio, potrei essere sulla rete di lavoro, ad es. nell'edificio, oppure potrei accedervi tramite VPN. In entrambi i casi, devo aggiungere alcune impostazioni al file hosts affinché la rete funzioni correttamente, alcune sono condivise, altre no. Inoltre, se sono più di VPN, posso essere a casa, nel qual caso ci sono alcune altre impostazioni nei file hosts ho anche voglia di aggiungere.

In quanto tale, speravo che invece di creare un file per "casa, accedere al lavoro tramite VPN" rispetto a "casa, non accedere al lavoro", ecc., C'è un modo per me di includere altri file?

Ad esempio, supponiamo che la seguente sintassi funziona:

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

127.0.0.1 localhost
::1 localhost

In questo modo, potrei semplicemente cancellare il contenuto di uno, o entrambi, di quei due file extra e lasciare il resto.

Oppure, a parte questo, c'è un modo migliore per farlo che creare un piccolo script che concatena file come quelli in un nuovo file host e, come parte della mia configurazione di automazione, desidero prima cancellare alcuni di quei file extra, e quindi invoco lo script per ricostruire il singolo file hosts da quei file extra?


Sei sicuro di aver bisogno di modifiche al file hosts invece di modificare dscldirettamente le voci dell'host ?
Daniel Beck

Non ero a conoscenza del dsclcomando, dovrò fare ricerche anche su quello.
Lasse V. Karlsen,

Vedi ad esempio qui . Internamente, OS X utilizza i suoi servizi di directory, che puoi controllare utilizzando dscl, per i quali /etc/hostsè semplicemente una delle fonti di dati disponibili, fornendo (ovviamente) mappature nome host / indirizzo IP. L'impostazione di uno script che scrive dscle svuota la cache potrebbe funzionare meglio nella tua situazione rispetto a conservare più copie del file hosts o riscriverlo continuamente.
Daniel Beck

@DanielBeck: buon punto! Non ero a conoscenza di tutte le funzionalità di dscl.
Karolos,

Fammi sapere come funziona, se vuoi provare a farlo in questo modo. Non l'ho provato da solo, quindi non lo pubblico come risposta. In bocca al lupo!
Daniel Beck

Risposte:


7

Non sono a conoscenza di alcuna possibilità di inclusione. Quello che farei, tuttavia, è creare sezioni nel mio file hosts e quindi utilizzare uno script per commentare le righe di ciascuna sezione usando, ad esempio, sed.

In questo modo il tuo file sarebbe simile

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

Modifica: aggiunta in un rapido tentativo di modificare i campi.

Rimozione del commento per HOME.HOSTS

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

Restituzione dei commenti per HOME.HOSTS

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

Questa è una versione base e deve essere adattata alle tue esigenze.


Ciao Karolos, potresti descrivere di più sul comando: sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostse sulla sezione nel file hosts per favore. Non capisco davvero perché :(
Toan Nguyen il

@NNToan: quando la linea fa è dire seddi aggiungere o rimuovere un # all'inizio delle linee tra due # %%% linee. Questo commenterà o non commenterà le righe. L'esempio mostra come commentare la sezione HOME.HOSTS usando # %%% HOME.HOSTS; dovresti usare # %%% WORK.HOSTS invece nel comando sed per commentare o annullare il commento alla sezione WORK.HOSTS.
Karolos,

0

Poiché dscl non funziona più a causa del passaggio a OpenDirectoryService, un'opzione è usare ghost:

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

... aggiungerà questa sezione in / etc / hosts:

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

Per cancellare la sezione #ghost dell'uso del file hosts (questo semplifica la sostituzione dell'elenco degli host con uno nuovo):

sudo ghost empty

Puoi trovare maggiori informazioni su ghost qui: https://github.com/bjeanes/ghost


0

Ho avuto un caso d'uso simile quando avevo bisogno di accedere ai servizi in tre luoghi diversi utilizzando diverse impostazioni LAN / WAN nel file hosts. La risposta di Karolos sopra è una possibile soluzione. Il mio approccio è qui.

1- fare riferimento a http://apple.stackexchange.com/q/139267/74657

2- file host creati per ogni posizione (hosts.work, hosts.home, hosts.vendor)

3- Usando lo script di soloz, qui ( https://github.com/slozo/Network-listener ) ogni volta che mi collego alla rete domestica, eseguo un semplice script per cambiare il file hosts.

sarebbe il metodo più semplice

mv hosts.home /etc/hosts

in alternativa puoi automatizzare la risposta di Karolos sopra usando sed per aggiornare il file esistente al momento della connessione a un SSID specifico che puoi rilevare ed eseguire facilmente usando lo script di soloz menzionato sopra.

spero che questo aiuti chiunque inciampi sulla questione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.