Linux 및 OS X에서 로컬 머신의 프라이머리 IP 주소를 취득하는 방법
127.0.0.1 이외의 로컬호스트의 프라이머리(첫 번째) IP 주소를 반환하는 명령줄 솔루션을 찾고 있습니다.
이 솔루션은 적어도 Linux(Debian 및 RedHat) 및 OS X 10.7 이상에서는 동작해야 합니다.
나는 알고 있다ifconfig
는 양쪽 플랫폼에서 모두 사용할 수 있지만 그 출력은 이들 플랫폼 간에 그다지 일관성이 없습니다.
사용하다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 상에서만 가능합니다.
다음은 Linux에서는 동작하지만 OSX에서는 동작하지 않습니다.
이것은 DNS에 전혀 의존하지 않으며, 또한/etc/hosts
올바르게 설정되어 있지 않다(1
의 줄임말이다1.0.0.0
):
ip route get 1 | awk '{print $NF;exit}'
또는 회피하고 있다awk
구글의 퍼블릭 DNS를 사용하여8.8.8.8
알기 쉽게:
ip route get 8.8.8.8 | head -1 | cut -d' ' -f8
신뢰성이 낮은 방법: (아래 코멘트 참조)
hostname -I | cut -d' ' -f1
Linux 머신의 경우(OS X가 아님):
hostname --ip-address
솔루션
$ 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
는 regex 지원과의 호환성이 가장 높고 가장 높은 것입니다.
-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
저 같은 경우에는요.
Linux 상에서
hostname -I
MacOS에서
ipconfig getifaddr en0
hostname -I
신뢰할 수 없는 순서로 여러 주소를 반환할 수 있지만(manpage 참조), 나에게는 그냥 반환됩니다.192.168.1.X
그게 네가 원하던 거야
편집(2014-06-01 2018-01-09 2021-07-25)
언제부터인가 새로운 것을 사용하고 있습니다. ip
도구. 하지만 bash 아래에서, 나는 간단히 할 것이다:
read -r _{,} gateway _ iface _ ip _ < <(ip r g 1.0.0.0)
그리고나서
printf '%-12s %s\n' gateway $gateway iface $iface ip $ip
gateway 192.168.1.1
iface eth0
ip 192.168.1.37
여기서부터 마스크는 다음과 같습니다.
while IFS=$' /\t\r\n' read lne lip lmask _;do
[ "$lne" = "inet" ] && [ "$lip" = "$ip" ] && mask=$lmask
done < <(ip a s dev $iface)
echo Mask is $mask bits.
Mask is 24 bits.
마스크를 IP로 표시하는 경우:
printf -v msk '%*s' $mask ''
printf -v msk %-32s ${msk// /1}
echo $((msk=2#${msk// /0},msk>>24)).$((msk>>16&255)).$((msk>>8&255)).$((msk&255))
255.255.255.0
편집(2014-06-01 2018-01-09)
각 인터페이스에 다수의 인터페이스와 다수의 IP가 설정되어 있는, 보다 강력한 설정을 위해서, 에 근거해 올바른 인터페이스와 IP를 검출하기 위한 순수 bash 스크립트를 작성합니다.이 스크립트는 이 답변의 맨 아래에 게재합니다.
도입부
두 OS 모두 기본적으로 bash가 설치되어 있으므로 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 및 줄바꿈으로 출력되며, 아무것도 출력되지 않지만 인수라는 이름의 변수가 생성되어 줄바꿈 없이 IP가 포함됩니다.
Nota2: 이것은 Debian, LaCie가 해킹한 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에서는 작동하지 않는 것 같은데...
Mac OS에서도 Linux에서와 동일하게 작동합니다.
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;
}')
내 스크립트(2018년 1월):
이 스크립트는 처음에 사용되는 기본 경로와 인터페이스를 찾은 후 게이트웨이의 로컬 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
우분투가 되다 '아까'라고 말할지도 127.0.0.1
:
hostname -i
또는
hostname -I
또한 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
Linux 및 OSX에서 동작합니다.
그러면 디폴트루트에 관련되어 있는 인터페이스가 취득됩니다.
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'`
OSX
uname -a
Darwin 노트북 14.4.0 Darwin 커널 버전14.4.0:2015년 5월 28일 (목)11:35:04 PDT;root:xnu-2782.30.5~1/RELELEASE_X86_64 x86_64
echo $NET_IF
en5
echo $NET_IP
192.168.0.130
CentOS Linux
uname -a
Linux dev-cil.medfx.local 2.6.18-164.el5xen 1 SMP 9월 3일 목요일 04:03:03 EDT 2009 x86_64 x86_64 GNU/Linux
echo $NET_IF
eth0
echo $NET_IP
192.168.46.10
다른 방법 사용 시스템에 여러 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}'
이 답변에 대한 제 코멘트를 요약합니다.
ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p'
그것은 @CollinAnderson의 대답에 근거하고 있지만, 내 경우에는 효과가 없었다.
다른 나라에서도 볼 수 있듯이 프라이머리 퍼블릭 IP가 필요한 경우 다음 중 하나를 시도해 보십시오.
wget http://ipecho.net/plain -O - -q
curl http://icanhazip.com
curl http://ifconfig.me/ip
기본 게이트웨이(예를 들어 모든 가상 네트워크, 도커 브리지 제외)인 네트워크에서 이 컴퓨터의 IP 주소를 찾습니다(예: 인터넷 게이트웨이, wifi 게이트웨이, 이더넷).
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
Linux 시스템에서 로컬 ipv4 주소를 얻는 가장 빠른 방법은 다음과 같습니다.
hostname -I | awk '{print $1}'
Collin Andersons의 답변에 덧붙이자면 이 메서드는 2개의 인터페이스가 있고 둘 다 표시되었을 경우에도 고려된다고 합니다.
ip route get 1 | awk '{print $NF;exit}'
저는 라즈베리파이로 어플리케이션 작업을 하고 있는데, 업 여부에 관계없이 실제로 사용되고 있는 IP 주소가 필요했습니다.그 외의 응답의 대부분은, 양쪽 모두의 IP 주소를 반환합니다.이것은 반드시 도움이 되는 것은 아닙니다.어쨌든 제 시나리오에서는 마찬가지입니다.
프라이머리 네트워크인터페이스 IP
ifconfig `ip route | grep default | head -1 | sed 's/\(.*dev \)\([a-z0-9]*\)\(.*\)/\2/g'` | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | head -1
ip addr show | grep -E '^\s*inet' | grep -m1 global | awk '{ print $2 }' | sed 's|/.*||'
하나ifconfig
와 의 모두에서 :Linux osx variant 。
ifconfig | grep "inet " | cut -f2 -d' '
이것이 모든 OS에서 작동하는지 잘 모르겠습니다. 시험해 보십시오.
ifconfig | awk -F"[ :]+" '/inet addr/ && !/127.0/ {print $4}'
많은 링크(StackExchange, AskUbuntu, StackOverflow 등)를 검토하여 모든 최적의 솔루션을 하나의 셸 스크립트로 통합하기로 결정했습니다.
제 생각에는 이 두 가지 QA가 가장 훌륭합니다.
셸 스크립트로 외부 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 ~]$
단, 네트워크인터페이스가 적어도1개의 IP를 소유하고 있는 경우, 모든 IP가 그 IP에 속하는 것으로 표시됩니다.
예를들면
Ubuntu 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}'
더 정확하고 더 짧습니다.
모든 일에는 노드 패키지가 있습니다.크로스플랫폼으로사용하기쉽습니다.
$ npm install --global internal-ip-cli
$ internal-ip
fe80::1
$ internal-ip --ipv4
192.168.0.3
이는 논란의 여지가 있는 접근 방식이지만, 좋든 싫든 간에 툴링에 npm을 사용하는 것이 점점 더 대중화되고 있습니다.
네트워크 인터페이스(eth0, wlan, tun0 등)를 알고 있는 경우:
ifconfig eth0 | grep addr: | awk '{ print $2 }' | cut -d: -f2
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
ifconfig $(netstat -rn | grep -E "^default|^0.0.0.0" | head -1 | awk '{print $NF}') | grep 'inet ' | awk '{print $2}' | grep -Eo '([0-9]*\.){3}[0-9]*'
Mac, Linux 및 내부 도커 컨테이너에서 작동합니다.
$ 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
exit1; exit)
하다, 하다, 하다, 하다, 하다.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}')}
Linux의 경우 다음 명령어가 필요합니다.
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:
「 」가 npm
★★★★★★★★★★★★★★★★★」node
: " " " 。npm install -g ip && node -e "const ip = require('ip'); console.log(ip.address())"
언급URL : https://stackoverflow.com/questions/13322485/how-to-get-the-primary-ip-address-of-the-local-machine-on-linux-and-os-x
'programing' 카테고리의 다른 글
ItemsControl DataTemplate에서 캔버스 속성 설정 (0) | 2023.04.18 |
---|---|
Git에서 처음 두 개의 커밋을 뭉개시겠습니까? (0) | 2023.04.18 |
문자열을 셀의 날짜로 변환 (0) | 2023.04.18 |
Windows에서 Python에서 Excel 구동 (0) | 2023.04.18 |
Python : dict(존재하는 경우) 목록. 새로운 dict를 추가하지 않으면 dict 값을 증가시킵니다. (0) | 2023.04.18 |