Mac OS X“호스트”파일, 다른 파일을 포함 할 수 있습니까?


10

나는 자주 사용하는 다른 네트워크에 액세스 할 때 네트워크 설정, 호스트 파일 내용 및 / etc / resolver 파일을 구성하기 위해 일부 자동화 스크립트를 작성하고 있습니다.

모든 호스트 파일을 변경해야 할 수있는 몇 가지 조합이 있으며, 여러 조합의 매트릭스를 설정하지 않고 공유 설정을 복제하는 것을 피하고 싶습니다.

예를 들어, 나는 직장 네트워크 있을 수 있습니다 . 건물에서 또는 VPN을 통해 액세스 할 수 있습니다. 두 경우 모두 네트워킹이 제대로 작동하고 일부는 공유되고 일부는 공유되지 않도록 호스트 파일에 일부 설정을 추가해야합니다. 내가 VPN을 통해 해요 경우 또한, 나는이 경우가 호스트에서 다른 설정은 내가 파일, 집에있을 수 추가 할.

따라서 "홈, VPN을 통한 작업 액세스"대 "집, 작업에 액세스하지 않음"등에 대해 하나의 파일을 만드는 대신 다른 파일을 포함 할 수있는 방법이있을 것으로 기대했습니다.

예를 들어 다음과 같은 가상 구문이 작동한다고 가정 해 보겠습니다.

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

127.0.0.1 localhost
::1 localhost

이렇게하면 두 파일의 내용 중 하나 또는 둘 다의 내용을 지우고 나머지는 그대로 둘 수 있습니다.

또는 파일을 새 호스트 파일로 연결하는 작은 스크립트를 작성하고 자동화 설정의 일부로 작은 스크립트를 작성하는 것보다이 방법을 사용하는 것이 더 좋습니다. 그런 다음 스크립트를 호출하여 추가 파일에서 단일 호스트 파일을 다시 작성합니까?


예를 들어 dscl직접 호스트 항목을 수정하는 것과 달리 hosts 파일을 변경해야 합니까?
Daniel Beck

나는 그 dscl명령을 알지 못했고 그것에 대해서도 연구해야 할 것입니다.
Lasse V. Karlsen

예를 들어 여기를 참조 하십시오 . 내부적으로, OS X는 사용을 제어 할 수의 디렉토리 서비스를 사용 dscl하는, /etc/hosts단순히 사용 가능한 데이터 소스 중 하나입니다 호스트 이름 / IP 주소 매핑 (물론)를 제공합니다. dscl캐시에 쓰고 플러시 하는 스크립트를 설정 하면 호스트 파일의 여러 사본을 유지하거나 항상 다시 쓰는 것보다 상황에 더 효과적 일 수 있습니다.
Daniel Beck

@DanielBeck : 좋은 지적입니다! dscl의 모든 기능을 알지 못했습니다.
Karolos

그런 식으로 해보고 싶다면 어떻게 작동하는지 알려주세요. 직접 시도하지 않았으므로 답변으로 게시하지 않습니다. 행운을 빕니다!
Daniel Beck

답변:


7

나는 포함 가능성을 모른다. 그러나 내가 할 일은 호스트 파일에 섹션을 만든 다음 스크립트를 사용하여 sed와 같은 각 섹션의 줄을 주석 처리하는 것입니다.

이런 식으로 파일은 다음과 같습니다

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

편집 : 필드를 빠르게 수정하려고 추가합니다.

HOME.HOSTS에 대한 주석 제거

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

HOME.HOSTS에 대한 의견 올리기

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

이것은 기본 버전이며 필요에 따라 조정해야합니다.


Karolos 님,이 명령에 대해 더 자세히 설명해 주 sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts시겠습니까? 호스트 파일의 섹션을 참조하십시오. 나는 왜 그런지 모르겠다 :(
Toan Nguyen

@NNToan : 행이 수행 sed하는 동안 두 # %%% 행 사이의 행 시작 부분에 #을 추가하거나 제거 하라고 지시합니다. 줄을 주석 처리하거나 주석을 해제합니다. 이 예는 # %%% HOME.HOSTS를 사용하여 HOME.HOSTS 섹션을 주석 처리하는 방법을 보여줍니다. sed 명령 대신 # %%% WORK.HOSTS를 사용하여 WORK.HOSTS 섹션을 주석 처리하거나 주석 처리를 제거해야합니다.
Karolos

0

OpenDirectoryService 로의 전환으로 인해 dscl이 더 이상 작동하지 않기 때문에 고스트를 사용하는 옵션이 있습니다.

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

...이 섹션을 / etc / hosts에 추가합니다 :

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

hosts 파일 사용의 #ghost 섹션을 지우려면 호스트 목록을 새로운 것으로 쉽게 대체 할 수 있습니다.

sudo ghost empty

유령에 대한 자세한 정보는 https://github.com/bjeanes/ghost 에서 확인할 수 있습니다.


0

호스트 파일에서 다른 LAN / WAN 설정을 사용하여 세 곳의 서비스에 액세스해야 할 때도 비슷한 사용 사례가있었습니다. 위의 Karolos의 대답은 가능한 해결책 중 하나입니다. 내 접근 방식은 여기에 있습니다.

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

각 위치 (hosts.work, hosts.home, hosts.vendor)에 대해 2 개의 호스트 파일 생성

3- 홈 네트워크에 연결할 때마다 여기 ( https://github.com/slozo/Network-listener ) soloz의 스크립트를 사용 하여 호스트 파일을 전환하는 간단한 스크립트를 실행합니다.

가장 간단한 방법은

mv hosts.home /etc/hosts

또는 위에서 언급 한 soloz의 스크립트를 사용하여 쉽게 감지하고 실행할 수있는 특정 SSID에 연결할 때 종료 파일을 업데이트하기 위해 sed를 사용하여 Karolos의 답변을 자동화 할 수 있습니다.

모든 사람이 주제 문제를 해결하는 데 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.