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

gol*_*cks 100 linux networking udev devices systemd

这是关于 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上?

Ell*_*sch 100

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

ifconfig -a
Run Code Online (Sandbox Code Playgroud)

编辑

如果你在一个已经过时的系统上,你可以使用

ip link show
Run Code Online (Sandbox Code Playgroud)

  • ifconfig 已被弃用,TMK,所以我们应该尝试使用 `ip` 显示示例。请参阅 ifconfig 维基百科文章:https://en.wikipedia.org/wiki/Ifconfig。 (7认同)
  • ifconfig 已弃用?来吧。这个命令已经存在了大约 30 年。 (7认同)
  • @slm 虽然问题是(是)特定于 linux 的,但使用 *both* 的示例似乎很好,因为 BSD 用户可能习惯于查看“linux”页面——事实上,我将把 linux 从标题中去掉,稍微编辑一下(最初这是自我回答的,我认为没有可移植的方法)。 (4认同)
  • 如果我只看手册页!有趣的是知道 `ip` 是否有并行,因为据说 ifconfig 正在“过时”,以支持(IMO)更迟钝且用户友好的命令。 (3认同)
  • 我的 `man ifconfig` 中的第一件事:“注意这个程序已经过时了!替换检查 ip...”这可能是特定于 linux 的。希望他们必须保留它以向后兼容某些东西。 (3认同)

gol*_*cks 82

内核按名称/sys分别在(例如)PCI 设备树中列出它们——尽管如果您不知道它们从哪里开始,在那里找到它们并不简单——并且通过/sys/class/net. 例如:

> ls /sys/class/net
em1 lo wlp6so
Run Code Online (Sandbox Code Playgroud)

另一个例子:

> ls /sys/class/net
lo p6s1 wlan0
Run Code Online (Sandbox Code Playgroud)

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

ifconfig [name] up 
Run Code Online (Sandbox Code Playgroud)

或者:

ip link set [name] up
Run Code Online (Sandbox Code Playgroud)

然后看看ifconfig(没有论据)列出的(相当清楚的)线索。从 Freedesktop.org 文档链接的 systemd 源代码也参考:

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

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

  • @kaushalmodi `eth` 是一个 linux 内核的东西;systemd 通过 udev Freedesktop.org 的 *可预测* 接口名称实现——内核的接口名称在同一意义上是不可预测的,这是所有混乱的原因。上面的引用被明确地剪切和粘贴 [from here](http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20)。还有更多的东西,因为我没有任何 systemd 机器使用 `en` 作为以太网;最接近的是`em`,其他则完全不同。您可以自己阅读问题中的 Freedesk.org 链接以获得更多解释。 (4认同)
  • [稍后] 去年某个时候 Fedora 或 systemd 纠正了这个问题?我的 PCI 以太网现在是 `eno1`。 (4认同)

Moh*_*iee 11

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

  • 但这仅提供活动接口,而不是所有接口 (5认同)

小智 6

ifconfig= Solaris
ipconfig= Windows
ip= Linux

我知道,但我当然愿意添加和更正。

  • @fpmurphy1 在 Linux 系统上阅读 `man ifconfig` 的第一段(在概要之后)。 (5认同)
  • 嗯?ifconfig 也是 Linux。 (2认同)