ifconfig 명령에서 첫 번째 IP 주소를 캡처하는 방법은 무엇입니까?

ifconfig 명령에서 첫 번째 IP 주소를 캡처하는 방법은 무엇입니까?

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" 명령의 차이점

ifconfignet-tools에서 나온 이 도구는 오랫동안 Linux 네트워킹 스택을 완전히 따라갈 수 없었습니다. 또한 네트워크 구성을 위해 여전히 ioctl을 사용하는데, 이는 커널과 상호 작용하는 추악하고 약한 방법입니다.

2005년경에 네트워크 스택을 제어하기 위한 새로운 메커니즘인 netlink 소켓이 도입되었습니다.

iproute2전이중 netlink 소켓 메커니즘을 활용하고 ifconfigioctl 시스템 호출에 의존 하도록 네트워크 인터페이스를 구성합니다 .

답변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'}

관련 정보