127.0.0.1 이외의 로컬 호스트의 기본 (첫 번째) IP 주소를 반환하는 명령 줄 솔루션을 찾고 있습니다.
이 솔루션은 적어도 Linux (Debian 및 RedHat) 및 OS X 10.7 이상에서 작동해야합니다.
나는 ifconfig
둘 다에서 사용할 수 있지만 그 플랫폼간에 그 출력이 일관성이 없다는 것을 알고 있습니다.
curl -4 ifconfig.co
. 외부 IP4 주소로 응답합니다.
127.0.0.1 이외의 로컬 호스트의 기본 (첫 번째) IP 주소를 반환하는 명령 줄 솔루션을 찾고 있습니다.
이 솔루션은 적어도 Linux (Debian 및 RedHat) 및 OS X 10.7 이상에서 작동해야합니다.
나는 ifconfig
둘 다에서 사용할 수 있지만 그 플랫폼간에 그 출력이 일관성이 없다는 것을 알고 있습니다.
curl -4 ifconfig.co
. 외부 IP4 주소로 응답합니다.
답변:
다음 grep
에서 IP 주소를 필터링하는 데 사용 합니다 ifconfig
.
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
또는과 sed
:
ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'
특정 인터페이스 wlan0, eth0 등에 관심이있는 경우 :
ifconfig wlan0 | ...
예를 들어, 자신 의 명령에 별명을 지정 하여 자신 만의 명령 .bashrc
을 작성할 수 있습니다 myip
.
alias myip="ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'"
훨씬 간단한 방법은 hostname -I
( hostname -i
이전 버전의 hostname
경우 주석 참조)입니다. 그러나 이것은 Linux에만 있습니다.
-E
GNU 스타일 -r
옵션이 아닌 Extended RE 옵션을 사용합니다 .
-E
. 최신 버전의 FreeBSD는 스크립트 이식성을 용이하게하기 위해 -r
별명으로 옵션을 추가 -E
했지만, 업데이트는 아직 OSX로 가져 오지 않았으며, 마지막으로 몇 년 전에 FreeBSD 릴리스의 sed 버전을 사용하고 있습니다. OSX가 수년 동안 FreeBSD 소스 코드를 몇 차례 도핑했기 때문에 정확히 어느 것이 확실하지 않습니다. 나는의 사용이 의 선택에 -E
필적 할 것이라고 생각했다 . 왜 GNU 사람들이 대신을 선택했는지 모르겠습니다 . grep
-E
-r
-E
, 당신이 그렇게 생각 거라고 확신 이동성의 수 --help
와는 man pages
그 사용 이전에 다른 질문에 나를 위해 약간의 혼란이 원인했다 .. 업데이트 될 것입니다-E
다음은 Linux에서는 작동하지만 OSX에서는 작동하지 않습니다.
이것은 전혀 DNS에 의존하지 않으며 /etc/hosts
올바르게 설정되지 않은 경우에도 작동 합니다 (의 1
약어 1.0.0.0
).
ip route get 1 | awk '{print $NF;exit}'
또는 명확성 awk
을 8.8.8.8
위해 Google의 공개 DNS를 피하고 사용하는 행위 :
ip route get 8.8.8.8 | head -1 | cut -d' ' -f8
덜 신뢰할 수있는 방법 : (아래 주석 참조)
hostname -I | cut -d' ' -f1
hostname -I
(문서에 따르면) 주소 순서에 대한 가정을 할 수 없기 때문에 에서 생성 한 첫 번째 주소를 얻는 방법 은 신뢰할 수 없습니다. 따라서 가상 머신이 상주하는 네트워크와 같은 내부 네트워크 일 수도 있습니다. 다른 방법은 좋은 것 같습니다.
ip route get 1 | awk '{print $(NF-2);exit}'
내가 outptut에 추가 된 uid를 얻는 동안 나를 위해 일한다
ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p'
Linux 머신 (OS X 아님)의 경우 :
hostname --ip-address
hostname -i
에 해당하는 짧은 형태는
hostname
GNU Coreutils 버전 8.26 에서는 Linux에서 작동하지 않습니다 .
hostname -i
있는 동안, 로컬 IP를 제공합니다 hostname -I
다른 모든 IP를 제공합니다
리눅스에서
hostname -I
macOS에서
ipconfig getifaddr en0
hostname -I
신뢰할 수없는 순서 (참조에 여러 개의 주소를 반환 할 수 맨 페이지 ), 그러나 저 그것은 단지 반환을위한 , 이는 당신이 원하는 것입니다.hostname
192.168.1.X
hostname -i
더 낮은 I와 함께했다.
-i
플래그에 는 다음과 같이 말합니다 Avoid using this option; use hostname -I instead
.
$ ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p'
192.168.8.16
네트워크 정보를 쿼리 하는 올바른 방법은 다음을 사용하는 것입니다 ip
.
-o
한 줄 출력route get to
실제 커널 경로를 목적지로 가져 오기8.8.8.8
Google IP이지만 도달하려는 실제 IP를 사용할 수 있습니다예 : ip
출력 :
8.8.8.8 via 192.168.8.254 dev enp0s25 src 192.168.8.16 uid 1000 \ cache
src
ip 를 추출하려면 sed
가장 적고 정규식 지원과 가장 호환됩니다.
-n
기본적으로 출력이 없습니다's/pattern/replacement/p'
패턴 일치 및 인쇄 교체 만.*src \([0-9.]\+\).*
커널이 사용하는 src IP와 일치하여 8.8.8.8
예 : 최종 출력 :
192.168.8.16
앞의 답변 중 어느 것도 최근 컴퓨터 (Gentoo 2018)에서 작동하지 않기 때문에 나에게 충분하지 않다고 생각합니다.
이전 답변에서 찾은 문제 :
ifconfig
은 더 이상 사용되지 않으며 예를 들어 여러 IP를 나열하지 않습니다.awk
sed가 더 잘 처리 할 수있는 간단한 작업에 ;ip route get 1
명확하지 않으며 실제로는 ip route get to 1.0.0.0
hostname
이없고 제 경우에는 -I
반환 되는 명령 사용 127.0.0.1
.더 많은 구성과 각 인터페이스에 많은 IP가 구성된 더 강력한 구성을 위해 올바른 인터페이스 와 ip를 기반으로 하는 순수한 bash 스크립트를 기반으로하지 않았습니다 . 나는이 답변을 맨 아래 에이 스크립트를 게시합니다.127.0.0.1
default route
두 Os 모두가 세게 때리다 기본적으로 설치되면 Mac과 Linux 모두에 대한 bash 팁이 있습니다.
로케일 문제는 다음을 사용하여 방지됩니다 LANG=C
.
myip=
while IFS=$': \t' read -a line ;do
[ -z "${line%inet}" ] && ip=${line[${#line[1]}>4?1:2]} &&
[ "${ip#127.0.0.1}" ] && myip=$ip
done< <(LANG=C /sbin/ifconfig)
echo $myip
최소 :
getMyIP() {
local _ip _line
while IFS=$': \t' read -a _line ;do
[ -z "${_line%inet}" ] &&
_ip=${_line[${#_line[1]}>4?1:2]} &&
[ "${_ip#127.0.0.1}" ] && echo $_ip && return 0
done< <(LANG=C /sbin/ifconfig)
}
간단한 사용 :
getMyIP
192.168.1.37
getMyIP() {
local _ip _myip _line _nl=$'\n'
while IFS=$': \t' read -a _line ;do
[ -z "${_line%inet}" ] &&
_ip=${_line[${#_line[1]}>4?1:2]} &&
[ "${_ip#127.0.0.1}" ] && _myip=$_ip
done< <(LANG=C /sbin/ifconfig)
printf ${1+-v} $1 "%s${_nl:0:$[${#1}>0?0:1]}" $_myip
}
용법:
getMyIP
192.168.1.37
또는 동일한 기능을 실행하지만 인수가 있습니다.
getMyIP varHostIP
echo $varHostIP
192.168.1.37
set | grep ^varHostIP
varHostIP=192.168.1.37
참고 : 인수가 없으면이 함수는 STDOUT, IP 및 newline 에서 인수와 함께 출력되며 아무 것도 인쇄되지 않지만 arguments라는 변수가 만들어지고 newline 없이 IP가 포함 됩니다.
Nota2 : Debian, LaCie hacked nas 및 MaxOs에서 테스트되었습니다. 이것이 귀하의 환경에서 작동하지 않으면 피드백에 매우 관심이 있습니다!
(기반이 아니기 때문에 삭제 sed
되지 않았습니다 bash
.)
경고 : 로케일에 대한 문제가 있습니다!
빠르고 작은 :
myIP=$(ip a s|sed -ne '/127.0.0.1/!{s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p}')
폭발 (일도한다)
myIP=$(
ip a s |
sed -ne '
/127.0.0.1/!{
s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p
}
'
)
편집하다:
어떻게! 이것은 Mac OS에서 작동하지 않는 것 같습니다 ...
좋아, 이것은 내 리눅스 에서 와 맥 OS 에서 작동하는 것처럼 보인다 .
myIP=$(LANG=C /sbin/ifconfig | sed -ne $'/127.0.0.1/ ! { s/^[ \t]*inet[ \t]\\{1,99\\}\\(addr:\\)\\{0,1\\}\\([0-9.]*\\)[ \t\/].*$/\\2/p; }')
쪼개짐 :
myIP=$(
LANG=C /sbin/ifconfig |
sed -ne $'/127.0.0.1/ ! {
s/^[ \t]*inet[ \t]\\{1,99\\}\\(addr:\\)\\{0,1\\}\\([0-9.]*\\)[ \t\/].*$/\\2/p;
}')
이 스크립트는 먼저 사용 된 기본 경로 및 인터페이스 를 찾은 다음 게이트웨이의 로컬 IP 일치 네트워크를 검색 하고 변수를 채 웁니다. 마지막 두 줄은 다음과 같이 인쇄됩니다.
Interface : en0
Local Ip : 10.2.5.3
Gateway : 10.2.4.204
Net mask : 255.255.252.0
Run on mac : true
또는
Interface : eth2
Local Ip : 192.168.1.31
Gateway : 192.168.1.1
Net mask : 255.255.255.0
Run on mac : false
글쎄요 :
#!/bin/bash
runOnMac=false
int2ip() { printf ${2+-v} $2 "%d.%d.%d.%d" \
$(($1>>24)) $(($1>>16&255)) $(($1>>8&255)) $(($1&255)) ;}
ip2int() { local _a=(${1//./ }) ; printf ${2+-v} $2 "%u" $(( _a<<24 |
${_a[1]} << 16 | ${_a[2]} << 8 | ${_a[3]} )) ;}
while IFS=$' :\t\r\n' read a b c d; do
[ "$a" = "usage" ] && [ "$b" = "route" ] && runOnMac=true
if $runOnMac ;then
case $a in
gateway ) gWay=$b ;;
interface ) iFace=$b ;;
esac
else
[ "$a" = "0.0.0.0" ] && [ "$c" = "$a" ] && iFace=${d##* } gWay=$b
fi
done < <(/sbin/route -n 2>&1 || /sbin/route -n get 0.0.0.0/0)
ip2int $gWay gw
while read lhs rhs; do
[ "$lhs" ] && {
[ -z "${lhs#*:}" ] && iface=${lhs%:}
[ "$lhs" = "inet" ] && [ "$iface" = "$iFace" ] && {
mask=${rhs#*netmask }
mask=${mask%% *}
[ "$mask" ] && [ -z "${mask%0x*}" ] &&
printf -v mask %u $mask ||
ip2int $mask mask
ip2int ${rhs%% *} ip
(( ( ip & mask ) == ( gw & mask ) )) &&
int2ip $ip myIp && int2ip $mask netMask
}
}
done < <(/sbin/ifconfig)
printf "%-12s: %s\n" Interface $iFace Local\ Ip $myIp \
Gateway $gWay Net\ mask $netMask Run\ on\ mac $runOnMac
sbin
내 전체 $PATH
경로가 지정 되어 있지 않아도 MacOS에도 동일한 경로가 존재해야합니다. :-)
time
당신이 너무 오래 사용하는 것이 어떤 선택 ...
우분투의 특정 빌드에만 해당합니다. 그것은 단지 당신에게 말할 수 있지만 127.0.0.1
:
hostname -i
또는
hostname -I
$ hostname --ip-address
그냥 날 수 있습니다 127.0.0.1
아치 리눅스에
Linux에서이 명령을 사용하여 eth0의 IP 버전 4 주소를 얻을 수도 있습니다.
/sbin/ip -4 -o addr show dev eth0| awk '{split($4,a,"/");print a[1]}'
출력은 다음과 같습니다
[root@localhost Sathish]# /sbin/ip -4 -o addr show dev eth0| awk '{split($4,a,"/");print a[1]}'
192.168.1.22
기본 경로와 연결된 인터페이스를 가져옵니다.
NET_IF=`netstat -rn | awk '/^0.0.0.0/ {thif=substr($0,74,10); print thif;} /^default.*UG/ {thif=substr($0,65,10); print thif;}'`
위에서 발견 한 인터페이스를 사용하여 IP 주소를 얻습니다.
NET_IP=`ifconfig ${NET_IF} | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'`
uname -a
다윈 노트북 14.4.0 다윈 커널 버전 14.4.0 : 5 월 28 일 목요일 11:35:04 PDT 2015; 루트 : xnu-2782.30.5 ~ 1 / RELEASE_X86_64 x86_64
echo $NET_IF
en5
echo $NET_IP
192.168.0.130
uname -a
Linux dev-cil.medfx.local 2.6.18-164.el5xen 1 SMP Thu Sep 3 04:03:03 EDT 2009 x86_64 x86_64 x86_64 GNU / Linux
echo $NET_IF
eth0
echo $NET_IP
192.168.46.10
| head -1
기본 인터페이스를 얻으려면 첫 번째 줄의 끝에 a 가 필요 하고 나머지는 좋습니다.
다른 방법 중 일부 사용 시스템에 여러 IP 주소가 정의 된 경우 충돌이 발생할 수 있습니다. 이 줄은 항상 기본적으로 사용되는 IP 주소를 가져옵니다.
ip route get 8.8.8.8 | head -1 | awk '{print $7}'
ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}'
bash
별명 으로 만들고 싶다면alias myip="ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk '{print \$2}'"
리눅스 시스템에서 로컬 ipv4 주소를 얻는 가장 짧은 방법 :
hostname -I | awk '{print $1}'
기본 게이트웨이 인 네트워크에서이 컴퓨터의 IP 주소를 찾습니다 (예 : 모든 가상 네트워크, 도커 브리지 제외). 인터넷 게이트웨이, 와이파이 게이트웨이, 이더넷
ip route| grep $(ip route |grep default | awk '{ print $5 }') | grep -v "default" | awk '/scope/ { print $9 }'
Linux에서 작동합니다.
테스트:
➜ ~ ip route| grep $(ip route |grep default | awk '{ print $5 }') | grep -v "default" | awk '/scope/ { print $9 }'
192.168.0.114
➜ reverse-networking git:(feature/type-local) ✗ ifconfig wlp2s0
wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.114 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::d3b9:8e6e:caee:444 prefixlen 64 scopeid 0x20<link>
ether ac:x:y:z txqueuelen 1000 (Ethernet)
RX packets 25883684 bytes 27620415278 (25.7 GiB)
RX errors 0 dropped 27 overruns 0 frame 0
TX packets 7511319 bytes 1077539831 (1.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ifconfig
Linux와 OSX에서 모두 작동하는 또 다른 변형 :
ifconfig | grep "inet " | cut -f2 -d' '
ifconfig | grep '\<inet\>' | cut -d ' ' -f2 | grep -v '127.0.0.1'
나는 많은 링크 (StackExchange, AskUbuntu, StackOverflow 등)를 거쳐 모든 최고의 솔루션을 하나의 쉘 스크립트로 결합하기로 결정했습니다.
제 생각에는이 두 가지 품질 관리가 가장 좋습니다.
쉘 스크립트에서 외부 IP 주소를 얻으려면 어떻게해야합니까? https://unix.stackexchange.com/q/22615
내부 IP 주소는 어떻게 찾습니까? https://askubuntu.com/a/604691
다음은 rsp가 자신의 저장소 ( https://github.com/rsp/scripts/ ) 에서 공유 한 아이디어를 기반으로 한 솔루션 입니다.
여러분 중 일부는이 스크립트가 매우 간단한 작업을 위해 매우 크다고 말할 수 있지만 가능한 한 쉽고 유연하게 사용하고 싶습니다. 기본값을 재정의 할 수있는 간단한 구성 파일을 지원합니다.
Cygwin, MINGW 및 Linux (Red Hat)에서 성공적으로 테스트되었습니다.
내부 IP 주소 표시
myip -i
외부 IP 주소 표시
myip -e
https://github.com/ildar-shaimordanov/tea-set/blob/master/home/bin/myip 링크를 통해 소스 코드를 볼 수도 있습니다 . 구성 파일의 예는 기본 스크립트 옆에 있습니다.
#!/bin/bash
# =========================================================================
#
# Getting both internal and external IP addresses used for outgoing
# Internet connections.
#
# Internal IP address is the IP address of your computer network interface
# that would be used to connect to Internet.
#
# External IP address is the IP address that is visible by external
# servers that you connect to over Internet.
#
# Copyright (C) 2016 Ildar Shaimordanov
#
# =========================================================================
# Details of the actual implementation are based on the following QA:
#
# How can I get my external IP address in a shell script?
# https://unix.stackexchange.com/q/22615
#
# How do I find my internal ip address?
# https://askubuntu.com/a/604691
# =========================================================================
for f in \
"$( dirname "$0" )/myip.conf" \
~/.myip.conf \
/etc/myip.conf
do
[ -f "$f" ] && {
. "$f"
break
}
done
# =========================================================================
show_usage() {
cat - <<HELP
USAGE
$( basename "$0" ) [OPTIONS]
DESCRIPTION
Display the internal and external IP addresses
OPTIONS
-i Display the internal IP address
-e Display the external IP address
-v Turn on verbosity
-h Print this help and exit
HELP
exit
}
die() {
echo "$( basename "$0" ): $@" >&2
exit 2
}
# =========================================================================
show_internal=""
show_external=""
show_verbose=""
while getopts ":ievh" opt
do
case "$opt" in
i )
show_internal=1
;;
e )
show_external=1
;;
v )
show_verbose=1
;;
h )
show_usage
;;
\? )
die "Illegal option: $OPTARG"
;;
esac
done
if [ -z "$show_internal" -a -z "$show_external" ]
then
show_internal=1
show_external=1
fi
# =========================================================================
# Use Google's public DNS to resolve the internal IP address
[ -n "$TARGETADDR" ] || TARGETADDR="8.8.8.8"
# Query the specific URL to resolve the external IP address
[ -n "$IPURL" ] || IPURL="ipecho.net/plain"
# Define explicitly $IPCMD to gather $IPURL using another tool
[ -n "$IPCMD" ] || {
if which curl >/dev/null 2>&1
then
IPCMD="curl -s"
elif which wget >/dev/null 2>&1
then
IPCMD="wget -qO -"
else
die "Neither curl nor wget installed"
fi
}
# =========================================================================
resolveip() {
{
gethostip -d "$1" && return
getent ahostsv4 "$1" \
| grep RAW \
| awk '{ print $1; exit }'
} 2>/dev/null
}
internalip() {
[ -n "$show_verbose" ] && printf "Internal: "
case "$( uname | tr '[:upper:]' '[:lower:]' )" in
cygwin* | mingw* | msys* )
netstat -rn \
| grep -w '0.0.0.0' \
| awk '{ print $4 }'
return
;;
esac
local t="$( resolveip "$TARGETADDR" )"
[ -n "$t" ] || die "Cannot resolve $TARGETADDR"
ip route get "$t" \
| awk '{ print $NF; exit }'
}
externalip() {
[ -n "$show_verbose" ] && printf "External: "
eval $IPCMD "$IPURL" $IPOPEN
}
# =========================================================================
[ -n "$show_internal" ] && internalip
[ -n "$show_external" ] && externalip
# =========================================================================
# EOF
내가 사용 단지 네트워크 인터페이스 이름 , 내 사용자 지정 명령은
[[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p' || ip addr show dev eth0 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p'
내 노트에
[flying@lempstacker ~]$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[flying@lempstacker ~]$ [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p' || ip addr show dev eth0 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p'
192.168.2.221
[flying@lempstacker ~]$
그러나 네트워크 인터페이스가 하나 이상의 IP를 소유 한 경우 모든 IP가 자신의 IP를 나타냅니다
예를 들어
우분투 16.10
root@yakkety:~# sed -r -n 's@"@@g;s@^VERSION=(.*)@\1@p' /etc/os-release
16.04.1 LTS (Xenial Xerus)
root@yakkety:~# [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p' || ip addr show dev eth0 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p'
178.62.236.250
root@yakkety:~#
데비안 제시
root@jessie:~# sed -r -n 's@"@@g;s@^PRETTY_NAME=(.*)@\1@p' /etc/os-release
Debian GNU/Linux 8 (jessie)
root@jessie:~# [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p' || ip addr show dev eth0 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p'
192.81.222.54
root@jessie:~#
CentOS 6.8
[root@centos68 ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@centos68 ~]# [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p' || ip addr show dev eth0 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p'
162.243.17.224
10.13.0.5
[root@centos68 ~]# ip route get 1 | awk '{print $NF;exit}'
162.243.17.224
[root@centos68 ~]#
페도라 24
[root@fedora24 ~]# cat /etc/redhat-release
Fedora release 24 (Twenty Four)
[root@fedora24 ~]# [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p' || ip addr show dev eth0 | sed -n -r 's@.*inet (.*)/.*brd.*@\1@p'
104.131.54.185
10.17.0.5
[root@fedora24 ~]# ip route get 1 | awk '{print $NF;exit}'
104.131.54.185
[root@fedora24 ~]#
링크 가 ip route get 1 | awk '{print $NF;exit}'
제공 하는 명령 이 더 정확하고 더 짧아 보입니다 .
이것이 모든 OS에서 작동하는지 확실하지 않으면 시도하십시오.
ifconfig | awk -F"[ :]+" '/inet addr/ && !/127.0/ {print $4}'
ip route get 1 | awk '{print $NF;exit}'
. 대부분의 시스템에서 작동합니다.
ip route get 1 | awk '{print $NF;exit}'
작동
ifconfig | grep "inet addr:" | grep -v "127.0.0.1" | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1
Mac, Linux 및 Docker 컨테이너 내부에서 작동합니다.
$ hostname --ip-address 2> /dev/null || (ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | awk '{print
$ 1; 출구}')
또한 다음과 Makefile
같이 작동합니다 .
LOCAL_HOST := ${shell hostname --ip-address 2> /dev/null || (ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | awk '{print $1; exit}')}
hostname --ip-address
=>hostname: illegal option -- -
리눅스의 경우 다음 명령이 필요합니다.
ifconfig $1|sed -n 2p|awk '{ print $2 }'|awk -F : '{ print $2 }'
이것을 쉘에 입력하면 IP를 알 수 있습니다.
이것은 읽기 쉽다 :
ifconfig | grep 'inet addr:' |/usr/bin/awk '{print $2}' | tr -d addr: