仅列出所有可用网络接口的设备名称

fti*_*sem 25 networking linux grep sed cat

我想获取 Linux 服务器上所有可用网络设备名称的列表。我想

ifconfig
Run Code Online (Sandbox Code Playgroud)

可以完成这项工作,但是 ifconfig 会产生相当多的输出:

eth0      Link encap:Ethernet  Hardware Adresse 08:00:27:fc:5c:98  
          inet Adresse:192.168.2.222  Bcast:192.168.2.255  Maske:255.255.255.0
          inet6-Adresse: fe80::a00:27ff:fefc:5c98/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:329 errors:0 dropped:0 overruns:0 frame:0
          TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:41496 (40.5 KiB)  TX bytes:32503 (31.7 KiB)

eth1      Link encap:Ethernet  Hardware Adresse 08:00:27:e9:35:7d  
          [...]

eth2      Link encap:Ethernet  Hardware Adresse 08:00:27:ff:db:fe  
          [...]

lo        Link encap:Lokale Schleife  
          [...]
Run Code Online (Sandbox Code Playgroud)

我想要实现的是一个列表

eth0
eth1
eth2
lo
Run Code Online (Sandbox Code Playgroud)

甚至更好

eth0
eth1
eth2
Run Code Online (Sandbox Code Playgroud)

我认为这可以通过“cat”、“sed”和“grep”的组合来完成,但我根本不知道如何去除不必要的信息。

jwe*_*ich 30

另一种选择是:

ip -o link show | awk -F': ' '{print $2}'
Run Code Online (Sandbox Code Playgroud)

或者可能:

ls /sys/class/net
Run Code Online (Sandbox Code Playgroud)


tek*_*ver 21

只需使用 /sys/class/net 并去掉路径:

$ basename -a /sys/class/net/*
eth0
eth1
lo
ppp0
tun0
Run Code Online (Sandbox Code Playgroud)

更现代的方法是使用 iproute json 输出和解析器,例如:

$ ip -j link |jq -r '.[].ifname'
lo
wlp0s20f3
enp0s31f6
virbr0
virbr0-nic
Run Code Online (Sandbox Code Playgroud)

这允许您过滤掉环回接口:

$ ip -j link |jq -r '.[].ifname | select(. != "lo")'
wlp0s20f3
enp0s31f6
virbr0
virbr0-nic
Run Code Online (Sandbox Code Playgroud)


Den*_*son 17

试试这个:

ifconfig -a | sed 's/[ \t].*//;/^$/d'
Run Code Online (Sandbox Code Playgroud)

这将省略lo

ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'
Run Code Online (Sandbox Code Playgroud)

  • `ifconfig` 已弃用,请使用 `ip` 代替 (3认同)

Dou*_*ris 6

尝试这个:

ifconfig | cut -c 1-8 | sort | uniq -u
Run Code Online (Sandbox Code Playgroud)
  • cut -c 1-8 提取每行的前 8 个字符
  • sort 对行进行排序
  • uniq -u 只打印唯一的行,这将删除描述行的空行,这些行的前八个字符只有空格

这适用于我尝试过的两台 linux 机器,但在我的 MacBookPro (OS X 10.6.4) 上,ifconfig使用制表符而不是空格,所以它有点复杂:

ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}'
Run Code Online (Sandbox Code Playgroud)
  • expand 将制表符转换为空格
  • awk -F: '{print $1;}' 打印冒号前的第一个字段。


wWo*_*ich 5

ls /sys/class/net/
eth0  eth1  eth2  lo
Run Code Online (Sandbox Code Playgroud)

或者如果您只需要 eth*

ls /sys/class/net/eth*
eth0
eth1
eth2
Run Code Online (Sandbox Code Playgroud)