/etc/hosts 파일에 dig ​​출력을 쓰는 방법은 무엇입니까?

/etc/hosts 파일에 dig ​​출력을 쓰는 방법은 무엇입니까?

저는 쉘 초보자이고 이것은 예제이며 구현 방법을 모르겠습니다.

어떤 도움이라도 미리 감사드립니다!

1단계: 도메인 이름 확인 A 레코드를 얻습니다 dig.

dig @8.8.8.8 liveproduseast.akamaized.net +short | tail -n1

2단계: 획득한 IP 주소와 도메인 이름을 아래와 같이 한 줄로 결합합니다.

23.1.236.106 liveproduseast.akamaized.net

3단계: 파일의 마지막 줄에 추가합니다 /etc/hosts.

127.0.0.1  localhost loopback
::1        localhost
23.1.236.106 liveproduseast.akamaized.net

4단계: 작업을 자동화하고 6시간마다 실행하도록 설정합니다. 파싱된 IP가 변경되면 파일로 업데이트합니다 /etc/hosts(이전에 추가한 IP를 교체).

crontab -e
6 * * * * /root/test.sh 2>&1 > /dev/null

답변1

한 가지 방법은 이전 IP를 새 IP로 바꾸는 것입니다.

$ cat /root/test.sh
#!/bin/sh

current_ip=$(awk '/liveproduseast.akamaized.net/ {print $1}' /etc/hosts)
new_ip=$(dig @8.8.8.8 liveproduseast.akamaized.net +short | tail -n1 | grep '^[.0-9]*$')

[[ -z $new_ip ]] && exit

if sed "s/$current_ip/$new_ip/" /etc/hosts > /tmp/etchosts; then
    cat /tmp/etchosts > /etc/hosts
    rm /tmp/etchosts
fi

sed 부분에서 GNU를 사용하는 경우 간단히 다음을 수행할 수 있습니다.

sed -i "s/$current_ip/$new_ip/" /etc/hosts

아니면 이미 moreutils설치 되어 있는 경우

sed "s/$current_ip/$new_ip/" /etc/hosts | sponge /etc/hosts

설명하다

grep '^[.0-9]*$'IP 주소를 캡처하고 그렇지 않은 경우 아무것도 인쇄하지 않습니다.

awk '/liveproduseast.akamaized.net/ {print $1}' /etc/hosts

"liveproduseeast.akamaized.net"이 포함된 행을 찾아 첫 번째 열인 IP를 가져옵니다.

sed "s/what to replace/replacement/" file

대체할 내용의 첫 번째 항목을 대체 값으로 바꿉니다.

이 작업을 수행할 수 없다는 점은 주목할 가치가 있습니다.

sed "s/what to replace/replacement/" file > file

자세한 내용은:https://stackoverflow.com/questions/6696842/how-can-i-use-a-file-in-a-command-and-redirect-output-to-the-same-file-without-t

관련 정보