Linux 显示/显示可用的网络接口
在Linux操作系统下可以使用以下命令查看所有网络接口:
- ip 命令——用于显示或操作路由、设备、策略路由和隧道。
- netstat 命令– 用于显示网络连接、路由表、接口统计信息、伪装连接和多播成员资格。
- ifconfig 命令——用于显示或配置网络接口。
- nmcli 命令– 用于显示或配置 Linux 上的网络接口的命令。
- tcpdump 命令– 打印系统上可用的网络接口列表。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 终端 |
类别 | 网络实用程序 |
操作系统兼容性 | Alma • Alpine • Arch • Debian • Fedora • Mint • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu • WSL |
预计阅读时间 | 4 分钟 |
在 Linux 上使用 ip 命令列出网络接口
键入以下ip 命令,输入:
$ ip link show
这是我们看到的(网络设备名称在您的裸机或云服务器上可能会有所不同):
1: lo:在哪里,mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc mq state UP qlen 1000 link/ether b8:ac:6f:65:31:e5 brd ff:ff:ff:ff:ff:ff 3: wlan0: mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 00:21:6a:ca:9b:10 brd ff:ff:ff:ff:ff:ff 4: vboxnet0: mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff 5: pan0: mtu 1500 qdisc noop state DOWN link/ether c2:10:fa:55:8e:32 brd ff:ff:ff:ff:ff:ff 6: vmnet1: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 00:50:56:c0:00:01 brd ff:ff:ff:ff:ff:ff 7: vmnet8: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 00:50:56:c0:00:08 brd ff:ff:ff:ff:ff:ff 11: ppp0: mtu 1496 qdisc pfifo_fast state UNKNOWN qlen 3 link/ppp
- lo– 环回接口。
- eth0– 我在 Linux 上的第一个以太网网络接口。在现代 Linux 发行版中,eth0 可能会被重命名,具体enp0s31f6取决于您的驱动程序。
- wlan0– Linux 中的无线网络接口。同样,WiFi 设备可能会根据wlp82s0您的驱动程序重命名。
- ppp0– 点对点协议网络接口,可供拨号调制解调器、PPTP vpn 连接或 3G 无线 USB 调制解调器使用。
- vboxnet0,,vmnet1–vmnet8在Linux上以桥接模式或NAT模式工作的虚拟机接口。
Linux 使用 nmcli 显示可用的网络接口
可以列出 Linux 上可用的设备及其状态,运行:
$ nmcli device status
或者
$ nmcli connection show
Linux 使用 nmcli 和 ip 命令列出所有网络接口
在 Linux 中使用 netstat 命令显示所有网络接口的表
键入以下 netstat 命令:
$ netstat -i
我们看到的是:
Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 2697347 0 0 0 2630262 0 0 0 BMRU lo 16436 0 2840 0 0 0 2840 0 0 0 LRU ppp0 1496 0 102800 0 0 0 63437 0 0 0 MOPRU vmnet1 1500 0 0 0 0 0 49 0 0 0 BMRU vmnet8 1500 0 0 0 0 0 49 0 0 0 BMRU
使用 tcpdump 检查 Linux 上的网络接口
键入以下 tcpdump 命令,对于每个 Linux 网络接口,都会打印一个编号和接口名称,后面可能跟着该接口的文本描述,如下所示:
$ tcpdump --list-interfaces
输出:
1.lxdbr0 [Up, Running] 2.wg1 [Up, Running] 3.enp0s31f6 [Up, Running] ...
使用 ifconfig 命令列出 Linux ip 接口
键入以下 ifconfig 命令:
$ /sbin/ifconfig -a
示例输出:
eth0 Link encap:Ethernet HWaddr b8:ac:6f:65:31:e5 inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::baac:6fff:fe65:31e5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2697529 errors:0 dropped:0 overruns:0 frame:0 TX packets:2630541 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2159382827 (2.0 GiB) TX bytes:1389552776 (1.2 GiB) Interrupt:17 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2849 errors:0 dropped:0 overruns:0 frame:0 TX packets:2849 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2778290 (2.6 MiB) TX bytes:2778290 (2.6 MiB) ppp0 Link encap:Point-to-Point Protocol inet addr:10.1.3.105 P-t-P:10.0.31.18 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1 RX packets:102800 errors:0 dropped:0 overruns:0 frame:0 TX packets:63437 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:148532544 (141.6 MiB) TX bytes:4425518 (4.2 MiB) vmnet1 Link encap:Ethernet HWaddr 00:50:56:c0:00:01 inet addr:192.168.47.1 Bcast:192.168.47.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fec0:1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:49 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) vmnet8 Link encap:Ethernet HWaddr 00:50:56:c0:00:08 inet addr:172.16.232.1 Bcast:172.16.232.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fec0:8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:49 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
如何在 Linux 上查看路由表?
使用以下ip 命令:
$ ip r
示例输出:
0.0.0.0/1 via 10.8.0.1 dev tun0 default via 192.168.2.254 dev enp6s0 proto static metric 100 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 128.0.0.0/1 via 10.8.0.1 dev tun0 139.59.1.155 via 192.168.2.254 dev enp6s0 169.254.0.0/16 dev virbr0 scope link metric 1000 linkdown 192.168.2.0/24 dev enp6s0 proto kernel scope link src 192.168.2.24 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
如何在 Linux 上查看连接到我的 NIC 的 arp 缓存?
运行 arp 命令:
输出:
$ arp
$ arp -a
$ arp -e
$ arp -n
# On modern Linux distros use the ip command #
$ ip neigh
$ ip -s neigh
Address HWtype HWaddress Flags Mask Iface centos7 ether 00:01:c0:1c:09:4c C enp6s0 freebsd11-box ether 00:01:c0:1c:09:4c C enp6s0 192.168.2.203 ether 00:01:c0:1c:09:4c C enp6s0 fw0-pfsense-sg-3100.swe ether 00:08:a2:0d:05:41 C enp6s0 192.168.2.205 ether 00:01:c0:1c:09:4c C enp6s0 192.168.2.202 ether 00:01:c0:1c:09:4c C enp6s0
如何列出 Linux 中连接到 PCI 总线的所有网络设备
使用 lspci 命令如下:
看来我已经将英特尔以太网(00:1f.6)和 Wifi(52:00.0)设备连接到我的 PCI 总线:
$ sudo lspci
# Filter out results using the "grep" or "egrep" #
$ sudo lspci | grep -Ei 'eth|network|ethernet|wireless|wifi'
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (7) I219-LM (rev 10) 52:00.0 Network controller: Intel Corporation Wi-Fi 6 AX200 (rev 1a)
想要了解有关这些设备及其驱动程序的更多信息?尝试将-vss {ID}选项传递给 lscpi 命令:
$ sudo lspci -vvs 00:1f.6
我看到的是:
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (7) I219-LM (rev 10) Subsystem: Lenovo Ethernet Connection (7) I219-LM Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 0 Interrupt: pin A routed to IRQ 178 Region 0: Memory at ee500000 (32-bit, non-prefetchable) [size=128K] Capabilities: [c8] Power Management version 3 Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+) Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=1 PME- Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+ Address: 00000000fee00998 Data: 0000 Kernel driver in use: e1000e Kernel modules: e1000e
如何使用lshw、inxi或hwinfo命令列出 Linux 中所有物理安装的网卡
默认情况下,您的系统可能未安装lshw、inxi 和 hwinfo命令。因此,请使用Alpine Linux 上的apk 命令、 RHEL 及 co 上的dnf 命令/ yum 命令、Debian、Ubuntu 及 co 上的apt 命令/ apt-get 命令、SUSE/OpenSUSE 上的 zypper 命令、Arch Linux 上的 pacman 命令来安装 lshw、inxi 和 hwinfo。
$ sudo apt install lshw inxi hwinf
现在按如下方式使用它们来列出 NIC:
$ sudo hwinfo --short --netcard
$ sudo lshw -C network -short
$ sudo inxi -N
使用/proc/net/dev文件查看 Linux 中可用的网络接口
/proc/net/dev文件是一个特殊文件,其中包含有关网络设备状态的信息。此信息包括接收和发送的数据包数、发生的错误和冲突数以及其他基本统计信息。使用“ cat ”、“ bat ”、“ more ”或“ less ”查看它。例如:以下输出表明我的WireGuard 服务器
$ cat /proc/net/dev
上有 lo、eth0 和 wg0 网络接口:
Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 164243 1526 0 0 0 0 0 0 164243 1526 0 0 0 0 0 0 eth0: 2372840589 2027484 0 0 0 0 0 0 2467369079 2428370 0 0 0 0 0 0 wg0: 203283936 601457 640 0 0 640 0 0 2201800868 1830420 0 1061 0 0 0 0
您还可以使用 ls 命令通过 /sys/class/net/ 目录列出相同的信息。例如:
$ ls -l /sys/class/net/
输出:
total 0 lrwxrwxrwx 1 root root 0 Jun 17 13:30 eth0 -> ../../devices/pci0000:00/0000:00:04.0/virtio2/net/eth0 lrwxrwxrwx 1 root root 0 Jun 17 13:30 lo -> ../../devices/virtual/net/lo lrwxrwxrwx 1 root root 0 Jun 17 13:31 wg0 -> ../../devices/virtual/net/wg0
从 /sys/class/net 获取接口名称
下面是bash for 循环示例,以良好的格式列出这些内容:
list=$(find /sys/class/net -type l) for nic in $list do echo "*** [ NIC: $nic ] ***" cat "${nic}/uevent" echo "" done
它是如何工作的?
- list =$(find /sys/class/net -type l)行使用 find 命令在/sys/class/net目录中搜索符号链接 ( -type l ) 。 find 命令的输出包含 NIC 列表,存储在$list shell 变量中。
- for nic in $list这行启动一个 bash for 循环,该循环遍历列表变量中的每个元素。换句话说,每个元素代表一个$nic变量。
- $ nic是 shell 变量。它保存着当前 NIC 的名称。
- echo "*** [ NIC: $nic ] ***"行作为标题,指示当前正在处理的 NIC。
- 最后,cat "${nic}/uevent"行读取并输出与当前 NIC 关联的 uevent 文件的内容。uevent 文件提供有关 NIC 和相关属性的信息。“ ${nic}/uevent ”符号使用$nic变量的值来形成cat 命令的文件路径。
- 最后一行echo ""添加了一行空行来分隔每个 NIC 的输出,使得使用 echo 命令在 Linux 终端上读取更加容易。
当您在 Linux 终端中运行这些命令时,您将获得有关 Linux 系统中网络接口的以下信息:
结论
您学习了如何使用命令行显示 Linux 上所有可用的网络接口。使用 man 命令/help 命令查看以下文档:
$ man ip
$ ip --help
$ man ifconfig
$ man nmcli
$ man arp