显示未连接的网络接口的终端命令

显示未连接的网络接口的终端命令
  • 使用终端模式我想显示计算机上当前未连接的网络接口。

  • 我曾经ifconfig查找已连接的接口及其 IP 地址,但不知道如何仅显示那些未连接的接口。

答案1

你可以这样做:

$ ip link show

获取接口列表(包括其状态)。您可以在命令grep DOWN之后通过管道过滤未使用的设备的结果ip

$ ip link show | grep DOWN

答案2

ip link show |
awk '/^[1-9]/ && $0 !~ "LOWER_UP" { inf=$2; sub(":","",inf); print inf; }' |
while read iface; do
    [[ $(readlink /sys/class/net/$iface) =~ devices/virtual ]] || echo $iface
done

第一部分 ( ip link show | awk) 获取 L2 驱动程序报告它们已连接的所有接口。第二部分丢弃所有虚拟接口,因为“未连接”对它们来说没有多大意义。

答案3

使用ifconfig(因为这是你说你知道如何使用的命令)和bashwith diffand sed

diff <( ifconfig ) <( ifconfig -a ) | sed -nE 's/^> ([^[:blank:]]+).*/\1/p'

这会将 的输出ifconfig与 的输出进行比较ifconfig -a。从该输出中,任何以>(表示它们仅在ifconfig -a输出中)开头的行都将与非“UP”的接口相关。该sed表达式解析出接口名称。

结果将是未启动的接口列表。


sed表达方式s/^> ([^[:blank:]]+).*/\1/p

这是一个替代。它将匹配以>空格开头的任何行。之后,它将捕获任何非空白字符串。然后,将其与该行的其余部分一起替换为捕获的非空白字符字符串,并打印结果。与输出中的正则表达式匹配的唯一行diff是在行开头>和空格之后提及接口名称的行。

答案4

您可以从文件中检查网络接口的状态/sys/class/net/$interface/carrier。 ( 1= 已连接 , 0= 已断开连接)

要获取断开连接的网络接口:

for i in $( ls /sys/class/net );do 
    if grep -q 0 /sys/class/net/$i/carrier; then
        echo $i; 
    fi
done

相关内容