Ich arbeite an einigen Automatisierungsskripten zum Konfigurieren meiner Netzwerkeinstellungen, Hostdateiinhalte und /etc/Resolver-Dateien beim Zugriff auf die verschiedenen Netzwerke, zwischen denen ich häufig wechsele.
Es gibt einige Kombinationen, die alle Änderungen an der Hosts-Datei erfordern, und ich möchte vermeiden, eine Matrix mit unterschiedlichen Kombinationen einrichten zu müssen und die gemeinsamen Einstellungen überall zu duplizieren.
Ich könnte zum BeispielAndas Arbeitsnetzwerk, d. h. im Gebäude, oder ich kann über VPN darauf zugreifen. In beiden Fällen muss ich der Hosts-Datei einige Einstellungen hinzufügen, damit das Netzwerk ordnungsgemäß funktioniert. Einige werden gemeinsam genutzt, andere nicht. Wenn ich über VPN bin, bin ich möglicherweise zu Hause. In diesem Fall gibt es einige andere Einstellungen in der Hosts-Datei.Auchhinzufügen möchten.
Daher hoffte ich, dass es für mich eine Möglichkeit gibt, andere Dateien einzubinden, anstatt eine Datei für „Zuhause, Zugriff auf die Arbeit über VPN“ vs. „Zuhause, kein Zugriff auf die Arbeit“ usw. zu erstellen.
Nehmen wir zum Beispiel an, dass die folgende hypothetische Syntax funktioniert:
#!include home.hosts
#!include work.hosts
127.0.0.1 localhost
::1 localhost
Auf diese Weise könnte ich einfach den Inhalt einer oder beider dieser beiden zusätzlichen Dateien löschen und den Rest so lassen, wie er ist.
Oder gibt es, abgesehen davon, eine bessere Möglichkeit, dies zu tun, als einfach ein kleines Skript zu erstellen, das solche Dateien zu einer neuen Hosts-Datei zusammenfügt, und als Teil meiner Automatisierungseinrichtung zuerst einige dieser zusätzlichen Dateien lösche und dann das Skript aufrufe, um die einzelne Hosts-Datei aus diesen zusätzlichen Dateien neu zu erstellen?
Antwort1
Mir ist keine Include-Möglichkeit bekannt. Ich würde jedoch Abschnitte in meiner Hosts-Datei erstellen und dann ein Skript verwenden, um die Zeilen in jedem Abschnitt zu kommentieren, z. B. mit sed.
So würde Ihre Datei aussehen
#%%%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
Bearbeiten:Hinzufügen eines schnellen Versuchs zum Ändern der Felder.
Entfernen des Kommentars für HOME.HOSTS
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
Die Kommentare für HOME.HOSTS wiederherstellen
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^\([^#]\)/#\1/g' hosts
Dies ist eine Basisversion und muss an Ihre Bedürfnisse angepasst werden.
Antwort2
Da dscl aufgrund der Umstellung auf OpenDirectoryService nicht mehr funktioniert, besteht eine Möglichkeit darin, ghost zu verwenden:
sudo gem install ghost
sudo ghost add fw.test.se 10.0.0.1
... fügt diesen Abschnitt in /etc/hosts hinzu:
# ghost start
10.0.0.1 fw.start.se
# ghost end
Um den Abschnitt #ghost der Hosts-Datei zu löschen, verwenden Sie Folgendes (so lässt sich die Hostliste ganz einfach durch eine neue ersetzen):
sudo ghost empty
Weitere Informationen zu Ghost findet ihr hier: https://github.com/bjeanes/ghost
Antwort3
Ich hatte einen ähnlichen Anwendungsfall, als ich auf Dienste an drei verschiedenen Orten zugreifen musste und dabei unterschiedliche LAN-/WAN-Einstellungen in der Hosts-Datei verwendete. Karolos‘ Antwort oben ist eine mögliche Lösung. Mein Ansatz ist hier.
1- vgl.http://apple.stackexchange.com/q/139267/74657
2- Hosts-Dateien für jeden Standort erstellt (hosts.work, hosts.home, hosts.vendor)
3- Verwenden Sie hier das Skript von Soloz (https://github.com/slozo/Network-listener) immer wenn ich mich mit dem Heimnetzwerk verbinde, führe ich ein einfaches Skript aus, um die Hosts-Datei zu wechseln.
einfachste Methode wäre
mv hosts.home /etc/hosts
Alternativ können Sie die obige Antwort von Karolos automatisieren, indem Sie sed verwenden, um die vorhandene Datei beim Verbinden mit einer bestimmten SSID zu aktualisieren. Dies können Sie mithilfe des oben erwähnten Skripts von Soloz leicht erkennen und ausführen.
hoffe, das hilft jedem, der über das Thema stolpert.