Je travaille sur certains scripts d'automatisation pour configurer mes paramètres réseau, le contenu des fichiers hôtes et / etc / resolver, lors de l'accès à différents réseaux que je fréquente entre.
Il peut y avoir certaines combinaisons qui nécessitent toutes des modifications du fichier hosts, et j'aimerais éviter d'avoir à configurer une matrice de combinaisons différentes, en dupliquant les paramètres partagés partout.
Par exemple, je peux être sur le réseau de travail, ce est à dire. dans le bâtiment, ou je peux y accéder via VPN. Dans les deux cas, j'ai besoin d'ajouter certains paramètres au fichier hosts pour que le réseau fonctionne correctement, certains sont partagés, d'autres non. De plus, si je suis sur VPN, je peux être à la maison, auquel cas il y a d'autres paramètres dans le fichier hosts que je veux également ajouter.
En tant que tel, j'espérais qu'au lieu de créer un fichier pour "maison, accéder au travail via VPN" vs "maison, ne pas accéder au travail", etc., est-il possible pour moi d'inclure d'autres fichiers?
Par exemple, supposons que la syntaxe hypothétique suivante fonctionne:
#!include home.hosts
#!include work.hosts
127.0.0.1 localhost
::1 localhost
De cette façon, je pourrais simplement effacer le contenu d'un ou des deux de ces deux fichiers supplémentaires et laisser le reste.
Ou, sauf cela, y a-t-il une meilleure façon de le faire que de simplement créer un petit script qui concatène des fichiers tels que ceux dans un nouveau fichier d'hôtes, et dans le cadre de ma configuration d'automatisation, j'efface d'abord certains de ces fichiers supplémentaires, puis j'invoque le script pour reconstruire le fichier d'hôtes unique à partir de ces fichiers supplémentaires?
la source
dscl
directement les entrées d'hôte via ?dscl
commande, je devrai également faire des recherches à ce sujet.dscl
, pour lesquels il/etc/hosts
s'agit simplement d'une des sources de données disponibles, fournissant (bien sûr) des mappages de nom d'hôte / adresse IP. La configuration d'un script qui écritdscl
et vide le cache peut fonctionner mieux dans votre situation que de conserver plusieurs copies du fichier hosts ou de le réécrire tout le temps.Réponses:
Je ne suis au courant d'aucune possibilité d'inclusion. Ce que je ferais, cependant, est de créer des sections dans mon fichier hosts, puis d'utiliser un script pour commenter les lignes de chaque section en utilisant, par exemple, sed.
De cette façon, votre fichier ressemblerait
Modifier: ajout d'une tentative rapide de modification des champs.
Suppression du commentaire pour HOME.HOSTS
Remettre les commentaires pour HOME.HOSTS
Il s'agit d'une version de base et doit être adaptée à vos besoins.
la source
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
et sur la section du fichier hosts s'il vous plaît. Je ne comprends vraiment pas pourquoi :(sed
d'ajouter ou de supprimer un # au début des lignes entre deux # %%% lignes. Cela commentera ou dé-commentera les lignes. L'exemple montre comment commenter la section HOME.HOSTS en utilisant # %%% HOME.HOSTS; vous devez utiliser # %%% WORK.HOSTS à la place dans la commande sed pour commenter ou annuler le commentaire de la section WORK.HOSTS.Étant donné que dscl ne fonctionne plus en raison du passage à OpenDirectoryService, une option consiste à utiliser fantôme:
... ajoutera cette section dans / etc / hosts:
Pour effacer la section #ghost du fichier d'hôtes, utilisez (cela facilite le remplacement de la liste des hôtes par une nouvelle):
Vous pouvez trouver plus d'informations sur fantôme ici: https://github.com/bjeanes/ghost
la source
J'ai eu un cas d'utilisation similaire lorsque j'avais besoin d'accéder à des services sur trois endroits différents en utilisant différents paramètres LAN / WAN dans le fichier hosts. La réponse de Karolos ci-dessus est une solution possible. Mon approche est ici.
1- ref à http://apple.stackexchange.com/q/139267/74657
2- Fichiers hôtes créés pour chaque emplacement (hosts.work, hosts.home, hosts.vendor)
3- En utilisant le script de soloz, ici ( https://github.com/slozo/Network-listener ) chaque fois que je me connecte au réseau domestique, j'exécute un script simple pour changer le fichier hosts.
la méthode la plus simple serait
mv hosts.home /etc/hosts
Alternativement, vous pouvez automatiser la réponse de Karolos ci-dessus en utilisant sed pour mettre à jour le fichier sortant lors de la connexion à un SSID spécifique que vous pouvez détecter et exécuter facilement en utilisant le script de soloz mentionné ci-dessus.
espérons que cela aide toute personne à tomber sur le sujet.
la source