通过 IP 地址查找网络接口 - Linux/Bash

问题描述 投票:0回答:5

我想知道如何使用 sed 通过 IP 地址进行查询,它会显示正在使用它的接口名称。

例如..

ipconfig -a | grep 10.0.0.10

我希望它能带着 ETH0 回来

linux ubuntu
5个回答
6
投票
ifconfig | grep -B1 10.0.0.10 | grep -o "^\w*"

4
投票
ip -br -4 a sh | grep 10.0.0.10 | awk '{print $1}'

3
投票

你应该使用这个命令:

ifconfig | grep -B1 "inet addr:10.0.0.10" | awk '$1!="inet" && $1!="--" {print $1}'

希望这有帮助!


0
投票

如果您想要 sed 特定的解决方案,您可以尝试这个。理解它是如何工作的有点困难,但最终这个组合起作用了。

 ifconfig | sed -n '/addr:10.0.0.10/{g;H;p};H;x' | awk '{print $1}'

如果您想通过脚本将其作为参数,请使用“$1”左右,而不是 10.0.0.10。

Sed 手册供参考:http://www.gnu.org/software/sed/manual/sed.html#tail


0
投票

iproute2-4.14.0
中,他们添加了
-json
参数:

[公告] iproute2 4.14.1
ip:添加新的命令行参数-json(与-color互斥)
ip: ipaddress.c: 添加对json输出的支持

这些天(

6.11.0
)你可以做:

$ ip -json address \
    | jq -r 'map(select((.addr_info | first).local == "192.168.122.5"))[0].ifname'
br-433ed67eb05d

ip -json address
输出的形式为:

[
  {
    "ifname": "br-433ed67eb05d",
    "addr_info": [
      {
        "local": "192.168.122.5",
        ...
      }
    ],
    ...
  },
  ...
]

map(f)
f
应用于输入数组的项目 (
{"ifname": ...}
)。如果 select(f)
 是该输入的 
{"ifname": ...}
,则
f
 返回其输入 (
true
)。
(.addr_info | first).local
local
中第 first 项的
.addr_info
字段。然后
[0].ifname
使其返回第一个结果的
ifname
字段,并且
-r
按原样输出字符串,而不是作为 JSON 值(带引号)。

或者以不太可靠的方式:

$ ip address | grep -FB2 'inet 192.168.122.5' | head -1 \
    | awk '{print $2}' | sed -E 's/:$//'
br-433ed67eb05d

-br[ief]
解决方案已经发布,所以我只想提一下它(
-br[ief]
)已添加到
4.2.0
中:

[公告] iproute2 4.2.0
添加对链接和地址的简短输出的支持

并且

sh
(
ip -br -4 a sh
) 是可选的。

© www.soinside.com 2019 - 2024. All rights reserved.