我正在寻找一个命令行解决方案,将返回我的主(第一个)IP地址的本地主机,而不是127.0.0.1
该解决方案至少适用于Linux (Debian和RedHat)和OS X 10.7+
我知道在这两个平台上都可以使用ifconfig,但是它的输出在这些平台之间并不一致。
我正在寻找一个命令行解决方案,将返回我的主(第一个)IP地址的本地主机,而不是127.0.0.1
该解决方案至少适用于Linux (Debian和RedHat)和OS X 10.7+
我知道在这两个平台上都可以使用ifconfig,但是它的输出在这些平台之间并不一致。
当前回答
对于linux,你需要的是这个命令:
ifconfig $1|sed -n 2p|awk '{ print $2 }'|awk -F : '{ print $2 }'
在你的shell中输入这个,你就会知道你的ip。
其他回答
使用其他方法您可能会输入系统上定义了多个IP地址的冲突。 这一行总是获得默认使用的IP地址。
ip route get 8.8.8.8 | head -1 | awk '{print $7}'
只针对Ubuntu的某些版本。尽管它可能只告诉你127.0.0.1:
hostname -i
or
hostname -I
linux下也可以通过该命令获取eth0的IP地址
/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
我提取我对这个答案的评论:
ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p'
它基于@CollinAnderson的答案,但对我来说没用。
下面的代码可以在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