使用终端模式我想显示计算机上当前未连接的网络接口。
我曾经
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
(因为这是你说你知道如何使用的命令)和bash
with diff
and 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