Ich arbeite an einigen Automatisierungsskripten, um meine Netzwerkeinstellungen zu konfigurieren, Dateiinhalte zu hosten und / etc / resolver-Dateien, wenn ich auf verschiedene Netzwerke zugreife, zwischen denen ich häufig bin.
Es können einige Kombinationen auftreten, die alle Änderungen an der Hosts-Datei erfordern, und ich möchte vermeiden, dass Sie eine Matrix aus verschiedenen Kombinationen einrichten müssen, um die gemeinsam genutzten Einstellungen überall zu duplizieren.
Zum Beispiel kann ich sein , auf dem Firmennetzwerk, das heißt. 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 freigegeben, andere nicht. Wenn ich über VPN bin, bin ich möglicherweise zu Hause. In diesem Fall enthält die Hosts-Datei einige andere Einstellungen, die ich ebenfalls hinzufügen möchte.
Daher hatte ich gehofft, dass ich anstelle einer Datei für "Zuhause, Zugriff auf Arbeit über VPN" im Vergleich zu "Zuhause, kein Zugriff auf Arbeit" usw. eine Möglichkeit habe, andere Dateien einzuschließen?
Nehmen wir zum Beispiel an, 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 belassen.
Abgesehen davon gibt es eine bessere Möglichkeit, dies zu tun, als nur ein kleines Skript zu erstellen, das Dateien wie diese in eine neue Hosts-Datei verkettet. Im Rahmen meiner Automatisierungskonfiguration lösche ich zunächst einige dieser zusätzlichen Dateien. und dann rufe ich das Skript auf, um die einzelne Hosts-Datei aus diesen zusätzlichen Dateien neu zu erstellen?
quelle
dscl
direkt über zu ändern ?dscl
Befehls nicht bewusst , ich werde auch darüber recherchieren müssen.dscl
, für die/etc/hosts
nur eine der verfügbaren Datenquellen ist, die Bereitstellung (natürlich) Hostname / IP - Adresszuordnungen. Das Einrichten eines Skripts, das indscl
den Cache schreibt und diesen leert, funktioniert in Ihrer Situation möglicherweise besser, als mehrere Kopien der Hosts-Datei zu behalten oder sie ständig neu zu schreiben.Antworten:
Mir ist keine Einschlussmöglichkeit bekannt. Was ich jedoch tun würde, ist, Abschnitte in meiner Hosts-Datei zu erstellen und dann ein Skript zu verwenden, um die Zeilen in jedem Abschnitt mit z. B. sed zu kommentieren.
Auf diese Weise würde Ihre Datei aussehen
Bearbeiten: Hinzufügen eines schnellen Versuchs, die Felder zu ändern.
Kommentar für HOME.HOSTS entfernen
Kommentare für HOME.HOSTS zurücksetzen
Dies ist eine Basisversion und muss an Ihre Bedürfnisse angepasst werden.
quelle
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
bitte mehr über den Befehl und den Abschnitt in der Hosts-Datei beschreiben? Ich verstehe wirklich nicht warum :(sed
ein # am Anfang der Zeilen zwischen zwei # %%% Zeilen hinzufügt oder entfernt. Dadurch werden die Zeilen kommentiert oder nicht kommentiert. Das Beispiel zeigt, wie der Abschnitt HOME.HOSTS mit # %%% HOME.HOSTS kommentiert wird. Sie sollten stattdessen # %%% WORK.HOSTS im Befehl sed verwenden, um den Abschnitt WORK.HOSTS zu kommentieren oder zu entfernen.Da dscl aufgrund des Wechsels zu OpenDirectoryService nicht mehr funktioniert, besteht eine Option darin, Ghost zu verwenden:
... fügt diesen Abschnitt in / etc / hosts hinzu:
Um den Abschnitt #ghost in der Hosts-Datei zu löschen, verwenden Sie (dies erleichtert das Ersetzen der Liste der Hosts durch eine neue):
Weitere Informationen zu Ghost finden Sie hier: https://github.com/bjeanes/ghost
quelle
Ich hatte einen ähnlichen Anwendungsfall, als ich über verschiedene LAN / WAN-Einstellungen in der Hosts-Datei auf Dienste an drei verschiedenen Orten zugreifen musste. Karolos 'Antwort oben ist eine mögliche Lösung. Mein Ansatz ist hier.
1- Siehe http://apple.stackexchange.com/q/139267/74657
2- erstellte Hosts-Dateien für jeden Speicherort (hosts.work, hosts.home, hosts.vendor)
3- Wenn ich das Skript von soloz verwende ( https://github.com/slozo/Network-listener ), führe ich jedes Mal, wenn ich eine Verbindung zum Heimnetzwerk herstelle, ein einfaches Skript aus, um die Hosts-Datei zu wechseln.
einfachste Methode wäre
mv hosts.home /etc/hosts
Alternativ können Sie die Antwort von Karolos mithilfe von sed automatisieren, um die vorhandene Datei beim Herstellen einer Verbindung zu einer bestimmten SSID zu aktualisieren, die Sie mithilfe des oben erwähnten Soloz-Skripts leicht erkennen und ausführen können.
Ich hoffe, das hilft jedem, der über das Thema stolpert.
quelle