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?
źródło
dscl
Bezpośrednio modyfikować wpisy hosta ?dscl
poleceniu, będę musiał to również zbadać.dscl
, dla których/etc/hosts
jest po prostu jednym z dostępnych źródeł danych, zapewniając (oczywiście) mapowanie nazwy hosta / adresu IP. Skonfigurowanie skryptu, który zapisujedscl
i 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.Odpowiedzi:
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
Edycja: dodanie szybkiej próby modyfikacji pól.
Usuwanie komentarza do HOME.HOSTS
Odkładanie komentarzy do HOME.HOSTS
To jest wersja podstawowa i musi być dostosowana do twoich potrzeb.
źródło
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
i na temat sekcji w pliku hosts proszę. Naprawdę nie rozumiem, dlaczego :(sed
aby 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.Ponieważ dscl nie działa już z powodu przejścia na OpenDirectoryService, jedną z opcji jest użycie ducha:
... doda tę sekcję do / etc / hosts:
Aby wyczyścić sekcję #ghost w pliku hosts użyj (ułatwia to zamianę listy hostów na nową):
Więcej informacji o duchach można znaleźć tutaj: https://github.com/bjeanes/ghost
źródło
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.
źródło