【问题标题】:How to get ip address of a server on Centos 7 in bash如何在 bash 中获取 Centos 7 上服务器的 IP 地址
【发布时间】:2015-03-12 15:26:49
【问题描述】:

之前我在 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的等效命令是什么

非常感谢

【问题讨论】:

  • 我认为最好在超级用户或 Unix 和 Linux 等其他地方问这个问题。
  • @Cryrus 你可以发布命令作为答案吗?
  • ip addr show 的输出对您有用吗?当然,您必须调整解析它的方式...

标签: bash ip-address centos7


【解决方案1】:

参考:https://garbagevalue.com/blog/4-simle-ways-to-check-ip-adress-in-centos-7


我正在使用 CentOS 7 和命令

ip a

足以胜任这项工作。

编辑

只需从该测试中切出 IP 地址部分。

ip a | grep 192

【讨论】:

  • 你明白了吗?
  • 一位仙女来到我的梦中告诉我这件事。
【解决方案2】:

主机名-I | awk '{打印 $1}'

【讨论】:

    【解决方案3】:

    虽然我用有点晚了

    curl -4 icanhazip.com 
    

    返回服务器主 IP 地址。

    【讨论】:

      【解决方案4】:

      您可以使用hostname 命令:

      ipaddr=$(hostname -I)
      

      -i, --ip-address: 显示主机的 IP 地址。请注意,这仅在可以解析主机名时才有效。

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

      【讨论】:

      • 对于多个接口(docker、flocker等)使用 echo $(hostname -I | cut -d" " -f 1) 第一个是默认的。
      • -f 1 并不总是有效。在我的虚拟机上,它给了我 127.0.0.1。所以我必须使用 -f 2 来获得正确的 IP。如果还有一个 IP v6 地址,那么它是否获得了正确的 IP 也是值得怀疑的。
      • 为了在 docker 中使用,我使用 $(hostname -i) 代替。它只给了我一个 IP
      • 这对我也有用:dig +short myip.opendns.com @resolver1.opendns.com。 ;
      • 第一个IP是:ipaddr=$(hostname -I|awk '{print $1}')
      【解决方案5】:

      实际上,当您不想使用外部资源(或不能)时,我会建议:

      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);}')
      • 我的版本旨在产生 first 卡,这就是第一行负责的内容。如果该设备未启动,您可能会在没有 IP 地址的情况下结束。
      【解决方案6】:

      运行此命令以显示 ip4 和 ip6:

      ifconfig eth0 | grep inet | awk '{print $2}' | cut -d/ -f1
      

      【讨论】:

      • 问题明确指出ifconfig 已不再安装。
      【解决方案7】:

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

      curl ifconfig.co
      
      curl ifconfig.me
      
      wget -qO - icanhazip.com
      

      【讨论】:

        【解决方案8】:

        类似这样的东西 - @maarten-vanlinthout 的回答的即兴演奏

        ip  -f inet a show eth0| grep inet| awk '{ print $2}' | cut -d/ -f1
        

        【讨论】:

        • 没有什么比不给出理由就否决答案更糟糕的了。请提供理由并投反对票,或仅提供您对答案有疑问的原因。
        • 此版本不再适用于现代 Linux 发行版,因为该设备只是具有不同的名称。 eth0、eth1 等不再使用 - 至少在 Red Hat 8、较新的 Fedoras、Opensuse、...
        【解决方案9】:

        在控制台输入命令ip addr

        【讨论】:

          【解决方案10】:

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

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

          【讨论】:

            【解决方案11】:
            SERVER_IP="$(ip addr show ens160 | grep 'inet ' | cut -f2 | awk '{ print $2}')"
            

            将 ens160 替换为您的接口名称

            【讨论】:

            • 我认为 cut -f2 在这个命令中没有任何作用。 awk 应该足够了。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-04-05
            • 1970-01-01
            • 2011-07-01
            • 2011-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多