如何在Centos 7中使用bash获取服务器的IP地址

72

之前我在bash中使用以下命令来查找我的服务器的主IP地址:

ipaddr=$(/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}' | grep -v '127.0.0.1')

但在Centos7中,由于ifconfig不可用,即使我使用yum install net-tools安装ifconfig,该命令也不再起作用。

在Centos 7中,相当的命令是什么?

非常感谢。


2
我认为最好在其他地方提出这个问题,比如Superuser或Unix和Linux。 - Avinash Raj
@Cryrus,你能把命令作为答案发布吗? - user2650277
ip addr show 命令的输出对您有用吗?当然,您需要调整解析方式... - twalberg
11个回答

122
您可以使用 hostname 命令:
ipaddr=$(hostname -I)

-i, --ip-address: 显示主机的IP地址。请注意,仅当主机名能够解析时才有效。

-I, --all-ip-addresses: 显示主机的所有网络地址。此选项枚举所有网络接口上配置的地址。环回接口和IPv6链接本地地址被省略。与选项-i相反,此选项不依赖于名称解析。请勿对输出顺序做任何假设。


15
对于多个接口(如docker、flocker等),使用命令echo $(hostname -I | cut -d" " -f 1)。第一个是默认接口。 - user2363318
1
“-f 1” 并不总是有效。在我的虚拟机上,它会给我返回 127.0.0.1。因此,我必须使用“-f 2” 才能获取正确的 IP 地址。如果还有一个 IPv6 地址,那么它是否能够获取正确的 IP 就值得怀疑了。 - fred
1
为了在Docker中使用,我使用$(hostname -i)。它只给我一个IP地址。 - SuperShalabi
这个对我也起作用了: dig +short myip.opendns.com @resolver1.opendns.com. ; - edwardsmarkf
1
第一个IP地址是: ipaddr=$(hostname -I|awk '{print $1}') - Dudi Boy
这会获取所有的IP地址。 - WesternGun

37

你有感觉了吗? - brainLoop
一个仙女在我的梦中告诉我这个。 - Siraj Alam
什么软件包含有 ip - phreed

36

在控制台输入命令 ip addr

输入图像描述


5

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


4
像这样 - 对 @maarten-vanlinthout 答案的改编。
ip  -f inet a show eth0| grep inet| awk '{ print $2}' | cut -d/ -f1

2
在没有给出原因的情况下,对答案进行负评是最糟糕的。请提供一个理由并进行负评,或者只提供您对答案有问题的原因。 - demented hedgehog
1
这个版本在现代Linux发行版上不再适用,因为设备名称已经改变。eth0、eth1等名称不再使用,至少在Red Hat 8、新的Fedora、Opensuse等发行版中不再使用。 - Tuxinose

3
SERVER_IP="$(ip addr show ens160 | grep 'inet ' | cut -f2 | awk '{ print $2}')"

将ens160替换为您的接口名称


1
我认为在这个命令中,cut -f2 没有任何作用。awk 应该足够了。 - datakid

3

实际上,在您不想使用外部资源(或无法使用)时,我建议:

DEVICE=$(ls -l /sys/class/net | awk '$NF~/pci0/ { print $(NF-2); exit }')
IPADDR=$(ip -br address show dev $DEVICE | awk '{print substr($3,1,index($3,"/")-1);}')

第一行获取PCI总线上第一台网络设备的名称,第二行提供其IP地址。

顺便说一下,ps ... | grep ... | awk ... 很烂。awk不需要grep。


到目前为止,这是最好的一个。同时,在CentOS 8上也可以工作。但是,如果使用多个PCI卡,它将不会显示IP地址。以下是我使用awk的版本,并显示所有已启用接口的IP IPADDR=$(ip -br address show | awk '$2 == "UP" {print substr($3,1,index($3,"/")-1);}') - Orsiris de Jong
我的版本旨在产生第一张卡,这就是第一行要处理的内容。如果该设备没有启动,您可能会没有IP地址。 - Tuxinose

3

您可以运行简单的命令,例如:

curl ifconfig.co

curl ifconfig.me

wget -qO - icanhazip.com

3

有点晚了,但我使用

curl -4 icanhazip.com 

返回服务器的主IP地址。


0

我认为获取外部服务器IP地址最可靠的方法是使用外部服务。

ipaddr=$(curl -s http://whatismyip.akamai.com/)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接