ifconfig
명령에서 첫 번째 IP 주소를 캡처하는 방법은 무엇입니까 ?
ifconfig -a
enw178032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 100.14.22.12 netmask 255.255.0.0 broadcast 100.14.255.255
inet6 fe80::250:56ff:fe9c:158a prefixlen 64 scopeid 0x20<link>
ether 00:10:56:9c:65:8a txqueuelen 1000 (Ethernet)
RX packets 26846250 bytes 12068811576 (11.2 GiB)
RX errors 0 dropped 58671 overruns 0 frame 0
TX packets 3368855 bytes 1139160934 (1.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
예상되는 결과:
IP=100.14.22.12
답변1
ifconfig
일부 배포판(예: 기본적으로 더 이상 설치하지 않는 CentOS 및 기타 배포판)에서는 더 이상 사용되지 않으므로 IP 주소를 얻기 위해 스크립트에서 이를 사용 하지 않는 것이 가장 좋습니다 .
다른 시스템에서는 ifconfig의 출력이 배포판에 따라 다릅니다(예를 들어 ifconfig
출력/간격/필드가 Debian 8과 Debian 9에서 다릅니다).
IP 주소 가져오기를 사용하려면 ip
비슷한 방식으로 요청할 수 있습니다.
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
아니면 더 나은 방법은 다음과 같습니다.
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
또는 "IP="라고 요청한 대로
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
@Roman의 아이디어를 뻔뻔하게 적용
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
일반 출력:
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
에서 man ip
:
-o, -oneline
각 레코드를 한 줄에 출력하고 줄 바꿈을 "\" 문자로 바꿉니다. 이는 wc(1) 또는 grep(1) 출력을 사용하여 레코드 수를 계산하려는 경우 편리합니다.
ifconfig
이것이 권장되지 않는 이유에 대한 예를 참조하십시오 .BBB: "bbb-conf --check"는 IP 주소를 "inet"로 표시합니다. - ifconfig 문제
ifconfig
종료가 임박한 이유를 이해하려면 다음을 참조하세요."ifconfig"와 "ip" 명령의 차이점
ifconfig
net-tools에서 나온 이 도구는 오랫동안 Linux 네트워킹 스택을 완전히 따라갈 수 없었습니다. 또한 네트워크 구성을 위해 여전히 ioctl을 사용하는데, 이는 커널과 상호 작용하는 추악하고 약한 방법입니다.2005년경에 네트워크 스택을 제어하기 위한 새로운 메커니즘인 netlink 소켓이 도입되었습니다.
iproute2
전이중 netlink 소켓 메커니즘을 활용하고ifconfig
ioctl 시스템 호출에 의존 하도록 네트워크 인터페이스를 구성합니다 .
답변2
Awk
해결책:
ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'
예제 출력:
IP=10.0.2.15
답변3
ip addr | grep -v 127.0.0.1 | grep 'inet ' | \
awk {'print $2'} | awk -F "/" {'print "IP="$1'}