如何找到可用的网络接口?

如何找到可用的网络接口?

这是关于 linux 的,但如果有人知道通用的 *nix 方法那就太好了。

我昨天启动了一个插入以太网电缆的系统。“NetworkManager”没有安装,所以一旦它启动,我就去寻找以太网接口的名称来手动ifconfig启动 DHCP 客户端,但它没有显示除lo

NIC 通过 列出lspci,并加载了适当的内核驱动程序。系统通常使用 wifi,我记得它的接口名称是wlan0。当我尝试时ifconfig wlan0 upwlan0出现了。但我能记得的唯一以太网接口名称是eth[N]em[N]- 两者都不起作用。

这个文件指的是“可预测的接口名称”,但没有很好地用简单的术语解释它们可能是什么。它确实引用了一段源代码,这意味着本例中的名称可能是从 PCI 总线和插槽号推断出来的,这似乎是一个不必要的复杂麻烦。

其他搜索让我相信这可能是由 与systemd结合确定的udev,但是里面有近 100 个文件/usr/lib/udev/rules.d,我花了一个小时试图确定在哪里(并且如果)有一个 systemd 配置文件,这似乎也很荒谬。

如果能确定它们是否可用,而不仅仅是它们的命名方式,那就太好了如果是的,所以我可以排除硬件问题等。难道没有一种简单的方法来查找 Linux 上可用网络接口的名称吗?

答案1

我知道列出所有接口的最简单方法是

ifconfig -a

编辑

如果您使用的系统已过时,您可以使用

ip link show

答案2

内核在 中按名称列出它们/sys,两者分别在(例如)PCI 设备树中 - 尽管如果您不知道它们从哪里开始,在那里找到它们并不简单 - 并通过 中的符号链接一起列出/sys/class/net。例如:

> ls /sys/class/net
em1 lo wlp6so

另一个例子:

> ls /sys/class/net
lo p6s1 wlan0

如果您不确定哪个是哪个,您可以将它们全部放在一起:

ifconfig [name] up 

或者:

ip link set [name] up

然后看看ifconfig(没有参数)列出的(相当清晰的)线索。 Freedesktop.org 文档链接的 systemd 源代码还引用了:

Two character prefixes based on the type of interface:
 *   en -- ethernet
 *   sl -- serial line IP (slip)
 *   wl -- wlan
 *   ww -- wwan

尽管在上述情况之一 ( p6s1) 中没有前缀。

答案3

我总是cat /proc/net/dev这样做简单易记

答案4

当系统中没有 时ifconfig,帮助我在 Ubuntu 上获取 IP 地址的一种可用方法是:ip

hostname -i

正如评论中指出的,该机制依赖于 DNS 主机名解析,并且不会为所有可用网络接口提供权威结果。

尽管如此,此命令可能有助于对容器(Docker、LXC)场景进行故障排除,在这些场景中系统工具通常不可用。至少在某些情况下,它会显示容器 IP,这可能会有所帮助,具体取决于您的目标。

相关内容