我正在寻找一个命令行解决方案,将返回我的主(第一个)IP地址的本地主机,而不是127.0.0.1

该解决方案至少适用于Linux (Debian和RedHat)和OS X 10.7+

我知道在这两个平台上都可以使用ifconfig,但是它的输出在这些平台之间并不一致。


当前回答

在linux系统上获取本地ipv4地址的最短方法:

hostname -I | awk '{print $1}'

其他回答

不确定这是否适用于所有操作系统,尝试一下。

ifconfig | awk -F"[ :]+" '/inet addr/ && !/127.0/ {print $4}'

下面的代码可以在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

下面这个比较容易读: Ifconfig | grep 'inet addr:' |/usr/bin/awk '{print $2}' | tr -d addr:

适用于Mac, Linux和Docker容器内部:

$ hostname——ip-address 2> /dev/null || (ifconfig | sed -En 's/127.0.0.1//;* inet (addr) ?(([0 - 9] * \){3}[0 - 9] *)。*/\2/p' | awk '{打印$1;退出}”)

也适用于Makefile:

LOCAL_HOST:= ${shell主机名——ip-address 2> /dev/null || (ifconfig | sed -En 's/127.0.0.1//;* inet (addr) ?(([0 - 9] * \){3}[0 - 9] *)。*/\2/p' | awk '{打印$1;退出}”)}

使用grep从ifconfig中过滤IP地址:

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//;* inet (addr) ?(([0 - 9] * \){3}[0 - 9] *)。* / \ 2 / p”

如果你只对某些接口感兴趣,比如wlan0、eth0等,那么:

ifconfig wlan0 | ...

例如,您可以在.bashrc中使用别名来创建自己的命令myip。

别名myip =“ifconfig | sed -En’s / 127 . 0 0。1;s /。* inet(键入https://www.bittrex.com:) ?(0 - 9) *[\。)0 - 9]{3}[*)* \ 2 / p’”。

一个更简单的方法是hostname -I (hostname -I用于旧版本的hostname,但请参阅注释)。但是,这仅适用于Linux。