Jak sprawić, by /etc/hosts
plik odwoływał się do innego pliku konfiguracyjnego dla jego listy hostów?
Przykład /etc/hosts
:
## My Hosts
127.0.0.1 localhost
255.255.255.255 broadcasthost
#Other Configurations
<Link to /myPath/to/MyConfig/ConfigFile.txt>
#Other Addresses
3.3.3.3 MyAwesomeDomain.com
4.4.4.4 SomeplaceIWantToGoTo.com
ConfigFile.txt
##My additional Hosts
1.1.1.1 SomeLocation.com
2.2.2.2 AnotherLocation.com
Jak dodać łącze / odniesienie do /etc/hosts
pliku, aby plik ConfigFile.txt został załadowany?
LC_COLLATE
), więc zastrzeżenie w twojej odpowiedzi nie ma zastosowania.Nie jest to możliwe, ponieważ format jest zwykle głęboko zakodowany w libc platform. Jednak jest to sobie wyobrazić, że OS dodaje tej funkcji, co czyni go non rozwiązanie cross-platform.
Alternatywnie możesz automatycznie zaktualizować określony blok w pliku hosts. Jest to szczególnie przydatne, jeśli masz skrypt, który dynamicznie wyświetla wpisy hosta dla określonego projektu (prawdopodobnie ze zmieniającymi się adresami IP).
Oto przykład: chcesz utworzyć hosty ze stanu Terraform za pośrednictwem
terraform-inventory
.Odpowiednie wyniki inwentaryzacji (na przykład mapowanie znacznika EC2 „Nazwa” na grupy dokładnie jednego hosta):
print-updated-hosts-entries.sh
Wyjście skryptu:
I wiersz polecenia, aby zaktualizować zaznaczony blok w
/etc/hosts
wyniku działania skryptu :Wyjaśnienie:
sed
wywołania, aby wydrukować wszystkie linie odpowiednio przed i po początku / końcu znacznika. W każdym przypadku wstawiamy znaczniki, umieszczając wynik skryptu między tymi wierszami. Nawet jeśli skrypt nie powiedzie się, nadal musimy otoczyć zawartość/etc/hosts
(i kopię zapasową w katastrofalnym scenariuszu).sudo tee /etc/hosts.new
zapisuje potokową zawartość w nowym plikused -n '/^# MYMARKER BEGIN/,/^# MYMARKER END/p'
drukuje zaktualizowany blok dla wygodysudo mv /etc/hosts.new /etc/hosts
przenosi nowy plik na miejsce. Należy to zrobić w osobnym kroku, ponieważ jeśli w buforze potoku zabraknie miejsca,tee /etc/hosts
zacznie się zapisywać plik, gdy istniejąca zawartość jest nadal odczytywana.źródło
Mam podobny wymóg płynnej pracy z różnych lokalizacji z dynamicznymi adresami IP, zwłaszcza, że korzystam z maszyn wirtualnych. Moje proste rozwiązanie tego jest następujące:
Utwórz skrypt, aby zaktualizować wpisy hosta dla każdej jednostki. Na przykład, jeśli mam hosta o nazwie „myhost.net” z subdomenami „app.myhost.net”, wywołałbym ten skrypt i podałby adres IP, który zostanie zapisany dla każdej domeny i zapisany w pliku hosta o nazwie 'mój gospodarz'. Ten sam skrypt ma flagę do usunięcia lub aktualizacji jednego pliku hosta.
Utwórz kolejny skrypt, aby scalić te pliki w / etc / hosts. Ten skrypt znajdzie wszystkie utworzone pliki hosta i scali je w pojedynczy plik hosts w / etc / hosts.
To działało dla mnie idealnie. Pracuję zdalnie i czasami potrzebuję przemieszczać się między lokalizacjami z jakiegokolwiek powodu i byłbym obciążony potrzebą edytowania tego pliku tak wiele razy. Zamiast tego po prostu uruchamiam JEDEN skrypt. Tak, jeden skrypt. Pierwszy skrypt automatycznie uruchamia drugi, aby wykonać automatyczne scalanie.
źródło