Mac OS X "Hosts" -Datei, kann ich andere Dateien hinzufügen?

10

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?

Lasse V. Karlsen
quelle
Sind Sie sicher, dass Sie Änderungen an der Hosts-Datei benötigen, anstatt beispielsweise die Host-Einträge dscldirekt über zu ändern ?
Daniel Beck
Ich war mir des dsclBefehls nicht bewusst , ich werde auch darüber recherchieren müssen.
Lasse V. Karlsen
Siehe zB hier . Intern verwendet OS X seine Verzeichnisdienste, die Sie verwenden steuern kann dscl, für die /etc/hostsnur eine der verfügbaren Datenquellen ist, die Bereitstellung (natürlich) Hostname / IP - Adresszuordnungen. Das Einrichten eines Skripts, das in dsclden 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.
Daniel Beck
@ DanielBeck: Guter Punkt! Ich war mir nicht aller Fähigkeiten von dscl bewusst.
Karolos
Lassen Sie mich wissen, wie es funktioniert, wenn Sie es so versuchen möchten. Ich habe es nicht selbst versucht, deshalb poste ich es nicht als Antwort. Viel Glück!
Daniel Beck

Antworten:

7

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

#%%%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, die Felder zu ändern.

Kommentar für HOME.HOSTS entfernen

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

Kommentare für HOME.HOSTS zurücksetzen

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

Dies ist eine Basisversion und muss an Ihre Bedürfnisse angepasst werden.

Karolos
quelle
Hallo Karolos, könnten Sie sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostsbitte mehr über den Befehl und den Abschnitt in der Hosts-Datei beschreiben? Ich verstehe wirklich nicht warum :(
Toan Nguyen
@NNToan: Wenn die Zeile sedein # 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.
Karolos
0

Da dscl aufgrund des Wechsels zu OpenDirectoryService nicht mehr funktioniert, besteht eine Option 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 in der Hosts-Datei zu löschen, verwenden Sie (dies erleichtert das Ersetzen der Liste der Hosts durch eine neue):

sudo ghost empty

Weitere Informationen zu Ghost finden Sie hier: https://github.com/bjeanes/ghost

Campell
quelle
0

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.

user728650
quelle