Ker*_*nic 1 linux networking network-interface
我需要在 Arch linux 中获取所有接口名称。如果我发出命令 ifconfig,我会得到以下响应:
[root@pi ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.154 netmask 255.255.255.0 broadcast 192.168.0.255
ether b8:27:eb:3c:03:fe txqueuelen 1000 (Ethernet)
RX packets 119099 bytes 96958556 (92.4 MiB)
RX errors 0 dropped 8 overruns 0 frame 0
TX packets 18304 bytes 5456443 (5.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 0 (Local Loopback)
RX packets 285 bytes 88221 (86.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 285 bytes 88221 (86.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Run Code Online (Sandbox Code Playgroud)
一切正常,但我只需要接口名称。我如何只获得接口名称?
一种方法是使用ifconfigwith -s(short list),然后剪掉你需要的部分:
$ ifconfig -a -s
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 1374267176 0 116420 0 2848281091 0 0 0 BMRU
lo 65536 0 761767047 0 0 0 761767047 0 0 0 LRU
vboxnet0 1500 0 0 0 0 0 0 0 0 0 BM
virbr0 1500 0 0 0 0 0 0 0 0 0 BMU
$ ifconfig -s -a | awk '$1 !~ /Iface/ {print $1}'
eth0
lo
vboxnet0
virbr0
Run Code Online (Sandbox Code Playgroud)
或类似的方法ip:
$ ip -o link show | awk -F': ' '{print $2}'
lo
eth0
virbr0
vboxnet0
Run Code Online (Sandbox Code Playgroud)
您可以解析 的输出ifconfig。这适用于许多 Unix 变体。
ifconfig -a | sed -n 's/^\([[:alnum:]]*\):.*/\1/p'
Run Code Online (Sandbox Code Playgroud)
如果您不介意严格只使用 Linux,则可以使用更简单的命令
ls /sys/class/net/
Run Code Online (Sandbox Code Playgroud)
如果您不想列出已关闭的接口,请使用ifconfig代替ifconfig -a。对于/sys,它更加晦涩:您需要检查是否IFF_UP为此接口设置了标志。由于IFF_UP是最低位,因此需要测试是否flags为奇数。
grep -l '[13579bdf]$' /sys/class/net/*/flags | sed 's!.*/!!'
Run Code Online (Sandbox Code Playgroud)