아래와 같이 IP 주소를 표시하고 싶습니다.
lo : 127.0.0.1
eth0 : 192.168.5.123
eth1 : 192.172.0.212
wlan0 : 10.1.0.124
모든 IP 주소를 인쇄할 수 있습니다 ifconfig | awk '/inet addr/{print substr($2,6)}'
. 하지만 IP만 인쇄합니다. 각 시스템에는 고유한 인터페이스 이름과 주소가 있습니다. 따라서 내 스크립트는 IP 주소와 관련된 인터페이스를 표시해야 합니다.
답변1
다음은 원하는 작업을 수행합니다.
$ ip addr | awk '
/^[0-9]+:/ {
sub(/:/,"",$2); iface=$2 }
/^[[:space:]]*inet / {
split($2, a, "/")
print iface" : "a[1]
}'
lo : 127.0.0.1
br0 : 10.1.10.12
답변2
ip -o addr | awk '{split($4, a, "/"); print $2" : "a[1]}'
또는 지역 주소에 관심이 없는 경우:
ip -o addr show scope global | awk '{split($4, a, "/"); print $2" : "a[1]}'
답변3
이 시도:
ip -o a show | cut -d ' ' -f 2,7
127.0.0.1/8
보세요::1/128
enp0s31f6 10.35.4.166/23
enp0s31f6 2620:52:0:2304:367:c01c:fe74:22ed/64
enp0s31f6 fe80::9a54:7adb:839e:fdb6/64
wlp58s0 10.201.132.132/22
wlp58s0 fe80::fa34:41ff:feb3:a06/64
virbr0 192.168.122.1/24
도커0 172.17.0.1/16
답변4
IPv4 주소의 경우에만 다음을 사용하십시오.
ip -o addr | awk '{split($4, a, "/"); print $2" : "a[1]}' | grep -v '::'
승인된 답변이 .bashrc 파일에 별칭으로 붙여넣는 것이 불편했기 때문에 이것을 생각해냈습니다.
매번 이렇게 긴 명령을 입력하는 것은 매우 힘든 작업입니다.
그래서 bashrc 파일에 별칭을 만들었습니다.
sudo nano ~/.bashrc
파일 끝에 이 줄을 추가하세요.
alias myip="ip -o addr | awk '{split(\$4, a, \"/\"); print \$2\" : \"a[1]}' | grep -v '::'"
Ctrl+O를 사용하여 저장한 다음 Ctrl+X를 사용하여 종료합니다.
source ~/.bashrc
위 명령 앞에 sudo를 붙여야 할 수도 있습니다.
이제 아래와 같이 터미널에 "myip" 명령을 입력할 수 있습니다.