/etc/hosts 파일은 다른 구성 파일을 참조합니다.

/etc/hosts 파일은 다른 구성 파일을 참조합니다.

/etc/hosts호스트 목록을 얻기 위해 이 파일이 다른 구성 파일을 참조하도록 하려면 어떻게 해야 합니까 ?

/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

구성 파일.txt

##My additional Hosts
1.1.1.1 SomeLocation.com
2.2.2.2 AnotherLocation.com

/etc/hostsConfigFile.txt가 로드되도록 파일에 대한 링크/참조를 어떻게 추가합니까 ?

답변1

당신은 할 수 없습니다. 형식은 /etc/hosts매우 간단하며 추가 파일 포함을 지원하지 않습니다.

사용할 수 있는 방법에는 여러 가지가 있습니다.

  • (로컬 전용일 수도 있음) DNS 서버를 설정합니다. 그 중 일부는 주어진다많은유연성을 통해 호스트 파일을 여러 파일 또는 컴퓨터에 분산시킬 수 있습니다. dnsmasq와 같은 다른 것들은 유연성이 떨어지지만(여전히 충분함) 설정이 쉽습니다. 여러 컴퓨터에 동일한 호스트 목록을 포함시키려는 경우 아마도 DNS가 정답일 것입니다.

  • 다른 이름 서비스(NIS, LDAP 등)를 설정합니다. 지원되는 내용을 보려면 glibc NSS 설명서를 확인하세요. 개인적으로 대부분의 경우 DNS를 사용해야 한다고 생각합니다.

  • 자신을 디렉토리나 이와 유사한 것으로 만들고 /etc/hosts.d스크립트를 작성하여 함께 결합하고(가장 쉬운 방법: cat /etc/hosts.d/*.conf > /etc/hosts현재 로케일에 따른 기본 정렬을 재정의하는 등 좀 더 나은 방법을 원할 수도 있음) 시작 시 또는 cron에서 해당 스크립트를 실행하거나 다음과 같은 경우 수동으로 해당 스크립트를 실행합니다. 파일을 업데이트합니다.

개인적으로 집에서든 직장에서든 모든 장치에서 컴퓨터 이름을 확인하도록 하려면 BIND 9를 실행합니다. 하지만 몇 시간의 공부가 필요합니다.

답변2

형식은 일반적으로 플랫폼의 libc에 깊이 인코딩되어 있기 때문에 이는 불가능합니다. 그러나 그것은상상할 수 있듯이 운영 체제는 이 기능을 추가하여 크로스 플랫폼이 아닌 솔루션으로 만들었습니다.

또는 호스트 파일의 특정 블록을 자동으로 업데이트할 수 있습니다. 이는 프로젝트의 호스트 항목을 동적으로 출력하는 스크립트(IP 변경 가능)가 있는 경우 특히 유용합니다.

예는 다음과 같습니다. 다음을 통해 Terraform 상태에서 호스트를 생성하려고 합니다.terraform-inventory.

관련 인벤토리 출력(예: 각각 하나의 호스트만 포함하는 그룹에 EC2 "이름" 태그 매핑):

$ terraform-inventory --list | jq 'with_entries(select(.key | match("^name_")))'
{
  "name_myhost-a": [
    "10.101.118.131"
  ],
  "name_myhost-b": [
    "10.101.111.189"
  ]
}

업데이트된 호스트 항목 인쇄.sh

#!/bin/sh
exec terraform-inventory --list | \
    jq -r 'to_entries |
           map(select(.key | match("^name_"))) |
           map(.value[0] + " " + .key[5:]) |
           join("\n")'

스크립트 출력:

./print-updated-hosts-entries.sh
10.101.118.131 myhost-a
10.101.111.189 myhost-b

게다가/etc/hosts스크립트 출력을 사용하여 표식기 블록을 업데이트하기 위한 명령줄:

sudo cp /etc/hosts "/etc/hosts.bak.$(date +%Y%m%d%H%M%S)" && \
    (
        sed -n '1,/^# MYMARKER BEGIN/{/^# MYMARKER BEGIN/!p;}' /etc/hosts; \
        echo "# MYMARKER BEGIN"; \
        ./print-updated-hosts-entries.sh; \
        echo "# MYMARKER END"; \
        sed -n '/^# MYMARKER END/,${/^# MYMARKER END/!p;}' /etc/hosts; \
    ) | \
    sudo tee /etc/hosts.new | \
    sed -n '/^# MYMARKER BEGIN/,/^# MYMARKER END/p' && \
        sudo mv /etc/hosts.new /etc/hosts

설명하다:

  • 첫 번째 줄은 분명히 백업을 생성합니다.
  • 괄호 안의 서브셸에는 sed시작/끝 표시 앞과 뒤의 모든 줄을 인쇄하는 두 가지 호출이 있습니다. 그럼에도 불구하고 우리는 이 줄 사이에 스크립트 출력을 배치하기 위해 마커를 삽입할 것입니다. 스크립트가 실패하더라도 콘텐츠 문제를 해결해야 하며 /etc/hosts재해 발생 시 백업해야 합니다.
  • sudo tee /etc/hosts.new새 파일에 파이프 내용 쓰기
  • sed -n '/^# MYMARKER BEGIN/,/^# MYMARKER END/p'편의를 위해 업데이트된 블록 인쇄
  • sudo mv /etc/hosts.new /etc/hosts새 파일을 제자리로 이동합니다. 파이프 버퍼의 공간이 부족하면 tee /etc/hosts기존 콘텐츠를 읽는 동안 파일 쓰기가 시작되므로 이 작업은 별도의 단계에서 수행해야 합니다.

답변3

저는 비슷한 요구 사항을 가지고 있으며 특히 가상 머신을 사용하기 때문에 다양한 위치에서 원활하게 작업하려면 동적 IP를 사용해야 합니다. 이에 대한 나의 간단한 해결책은 다음과 같습니다.

  1. 각 엔터티의 호스트 항목을 업데이트하는 스크립트를 만듭니다. 예를 들어, 하위 도메인이 "app.myhost.net"인 "myhost.net"이라는 호스트가 있는 경우 스크립트를 호출하고 각 도메인에 대해 작성되고 저장될 IP 주소를 "myhosts"라는 호스트 파일에 제공합니다. ". 동일한 스크립트에는 단일 호스트 파일을 삭제하거나 업데이트하기 위한 플래그가 있습니다.

  2. 이러한 파일을 /etc/hosts에 병합하는 다른 스크립트를 만듭니다. 이 스크립트는 생성한 모든 호스트 파일을 찾아 /etc/hosts에 있는 단일 호스트 파일로 병합합니다.

이것은 나에게 매우 효과적입니다. 나는 원격으로 일하며 때때로 어떤 이유로든 위치 간에 이동해야 하고 파일을 여러 번 편집해야 한다는 부담감을 느낄 수 있습니다. 대신 스크립트를 실행합니다. 예, 스크립트입니다. 첫 번째 스크립트는 자동으로 다른 스크립트를 실행하여 병합을 자동화합니다.

답변4

다음은 몇 가지 간단한 팁입니다.

"개인 호스트"라는 파일을 만듭니다.

모든 사용자 정의 호스트를 이 파일에 저장합니다.

그런 다음 텍스트 파일을 "호스트"에 추가합니다.

cat personal-hosts >> hosts

이 간단한 방법은 호스트 목록이 120,000개가 넘는 매우 큰 호스트에 번거로움 없이 서버를 추가하는 데 도움이 되었습니다.

관련 정보