내가 지정하는 장치의 IP(v4) 주소가 필요합니다. 이 응답은 나중에 스크립트에서 사용됩니다. 이것이 내가 가진 것입니다:
$ IFACE=eth1
$ ifconfig $IFACE |grep "inet " | awk '{print $2}'
10.0.0.33
이 작업을 수행하는 더 깔끔한(더 짧은) 방법이 있나요?
편집하다:데이터라면나에게 딱 필요한 것. 여기에서 해결책을 찾으세요:https://unix.stackexchange.com/a/84263/126008
답변1
ip
깨끗하지도 짧지도 않지만 대신 사용해야 한다고 생각합니다 ifconfig
. 최신 상태이고 유지 관리되며 아마도 더 중요한 것은 일관되고 구문 분석 가능한 출력을 생성한다는 것입니다.
IPv4 주소를 원하는 경우 eth0
:
$ ip -4 -o addr show eth0 | awk '{print $4}'
192.168.1.166/24
CIDR 표기법을 사용하세요. CIDR 표기법이 필요하지 않으면 제거할 수 있습니다.
$ ip -4 -o addr show eth0 | awk '{print $4}' | cut -d "/" -f 1
192.168.1.166
귀하의 질문은 인터페이스의 주소를 지정하고 싶다는 것을 나타냅니다. 위의 답변이 이를 제공한다고 생각하지만 현재 호스트의 IPv4 주소를 원한다면 아마도 hostname
더 쉽고 간단할 것입니다.
$ hostname --all-ip-addresses | awk '{print $1}'
또는 IPv6 주소를 원하는 경우:
$ hostname --all-ip-addresses | awk '{print $2}'
마지막으로 IMHO의 "가장 우아한" 또 다른 옵션은 지정된 원격 호스트(이 경우 8.8.8.8)에 연결하는 데 사용되는 인터페이스의 IPv4 주소를 가져오는 것입니다. 작성자: @gatoatigrado이 답변:
$ ip route get 8.8.8.8 | awk '{ print $NF; exit }'
192.168.1.166
스크립트로:
$ RHOST=8.8.8.8
$ ip route get $RHOST | awk '{ print $NF; exit }'
이는 여러 인터페이스와 라우팅 사양이 있는 호스트에 유용할 수 있습니다.