Plik „hosts” w systemie Mac OS X, czy mogę dołączyć do niego inne pliki?

10

Pracuję nad niektórymi skryptami automatyzacji, aby skonfigurować moje ustawienia sieciowe, zawartość plików hostów i pliki / etc / resolver, podczas uzyskiwania dostępu do różnych sieci, z których często korzystam.

Mogą wystąpić pewne kombinacje, które wymagają zmian w pliku hosts, i chciałbym uniknąć konieczności konfigurowania macierzy różnych kombinacji, powielając ustawienia wspólne w całym miejscu.

Na przykład mogę być w sieci służbowej, tj. w budynku lub mogę uzyskać do niego dostęp przez VPN. W obu przypadkach muszę dodać pewne ustawienia do pliku hosts, aby sieć działała poprawnie, niektóre są udostępniane, inne nie. Dodatkowo, jeśli jestem na VPN, czy mogę być w domu, w którym to przypadku są jakieś inne ustawienia w pliku hosts ja też chce dodać.

W związku z tym miałem nadzieję, że zamiast utworzyć jeden plik dla „domu, dostępu do pracy przez VPN” vs. „domu, bez dostępu do pracy” itp., Czy jest sposób, aby dołączyć inne pliki?

Załóżmy na przykład, że działa następująca hipotetyczna składnia:

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

127.0.0.1 localhost
::1 localhost

W ten sposób mogłem po prostu wyczyścić zawartość jednego lub obu tych dwóch dodatkowych plików, a resztę pozostawić.

Poza tym istnieje lepszy sposób na zrobienie tego niż zbudowanie małego skryptu, który łączy pliki takie jak te w nowy plik hosts, a w ramach mojej konfiguracji automatyzacji najpierw usuwam niektóre z tych dodatkowych plików, a następnie wywołuję skrypt, aby odbudować pojedynczy plik hosts z tych dodatkowych plików?

Lasse V. Karlsen
źródło
Czy na pewno potrzebujesz zmian w pliku hosts, a nie np. dsclBezpośrednio modyfikować wpisy hosta ?
Daniel Beck
Nie wiedziałem o tym dsclpoleceniu, będę musiał to również zbadać.
Lasse V. Karlsen
Zobacz np . Tutaj . Wewnętrznie OS X korzysta z usług katalogowych, którymi można sterować dscl, dla których /etc/hostsjest po prostu jednym z dostępnych źródeł danych, zapewniając (oczywiście) mapowanie nazwy hosta / adresu IP. Skonfigurowanie skryptu, który zapisuje dscli opróżnia pamięć podręczną, może działać lepiej w danej sytuacji niż przechowywanie wielu kopii pliku hosts lub przepisywanie go przez cały czas.
Daniel Beck
@DanielBeck: Dobra uwaga! Nie wiedziałem o wszystkich możliwościach dscl.
Karolos,
Daj mi znać, jak to działa, jeśli chcesz spróbować to zrobić w ten sposób. Sam tego nie próbowałem, więc nie zamieszczam tego jako odpowiedzi. Powodzenia!
Daniel Beck

Odpowiedzi:

7

Nie znam żadnej możliwości uwzględnienia. Chciałbym jednak utworzyć sekcje w pliku hosts, a następnie użyć skryptu, aby skomentować linie w każdej sekcji, używając np. Sed.

Tak wyglądałby twój plik

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

Edycja: dodanie szybkiej próby modyfikacji pól.

Usuwanie komentarza do HOME.HOSTS

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

Odkładanie komentarzy do HOME.HOSTS

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

To jest wersja podstawowa i musi być dostosowana do twoich potrzeb.

Karolos
źródło
Witaj Karolos, czy mógłbyś opisać więcej na temat polecenia: sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostsi na temat sekcji w pliku hosts proszę. Naprawdę nie rozumiem, dlaczego :(
Toan Nguyen
@NNToan: Co robi linia, mówi, sedaby dodać lub usunąć # na początku linii między dwiema liniami # %%%. To skomentuje lub cofnie komentarz linii. Przykład pokazuje, jak komentować sekcję HOME.HOSTS za pomocą # %%% HOME.HOSTS; powinieneś użyć # %%% WORK.HOSTS zamiast tego w poleceniu sed, aby skomentować lub cofnąć komentarz do sekcji WORK.HOSTS.
Karolos,
0

Ponieważ dscl nie działa już z powodu przejścia na OpenDirectoryService, jedną z opcji jest użycie ducha:

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

... doda tę sekcję do / etc / hosts:

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

Aby wyczyścić sekcję #ghost w pliku hosts użyj (ułatwia to zamianę listy hostów na nową):

sudo ghost empty

Więcej informacji o duchach można znaleźć tutaj: https://github.com/bjeanes/ghost

Campell
źródło
0

Miałem podobny przypadek użycia, gdy potrzebowałem uzyskać dostęp do usług w trzech różnych miejscach, używając różnych ustawień LAN / WAN w pliku hosts. Powyższa odpowiedź Karolosa jest jednym z możliwych rozwiązań. Moje podejście jest tutaj.

1 - patrz: http://apple.stackexchange.com/q/139267/74657

2- utworzone pliki hostów dla każdej lokalizacji (hosts.work, hosts.home, hosts.vendor)

3- Korzystając ze skryptu soloz, tutaj ( https://github.com/slozo/Network-listener ) za każdym razem, gdy łączę się z siecią domową, uruchamiam prosty skrypt, aby przełączyć plik hosts.

najprostsza metoda byłaby

mv hosts.home /etc/hosts

alternatywnie możesz zautomatyzować powyższą odpowiedź Karolosa za pomocą sed, aby zaktualizować wychodzący plik po podłączeniu do określonego identyfikatora SSID, który możesz łatwo wykryć i uruchomić za pomocą wyżej wspomnianego skryptu soloz.

nadzieję, że pomoże każdemu natknąć się na ten temat.

użytkownik728650
źródło