저는 쉘 초보자이고 이것은 예제이며 구현 방법을 모르겠습니다.
어떤 도움이라도 미리 감사드립니다!
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