tra-loi-cau-hoi-phat-trien-web.com

Làm thế nào tôi có thể tìm thấy các giao diện mạng có sẵn?

Điều này liên quan đến linux, nhưng nếu bất cứ ai biết về một phương pháp * nix chung sẽ tốt.

Tôi đã khởi động một hệ thống ngày hôm qua với cáp ethernet được cắm. "NetworkManager" chưa được cài đặt, vì vậy, khi nó bắt đầu, tôi đã tìm tên giao diện ethernet bằng ifconfig để khởi động máy khách DHCP một cách thủ công, nhưng nó đã không hiển thị bất cứ điều gì khác ngoài lo.

NIC được liệt kê qua lspci và trình điều khiển hạt nhân thích hợp đã được tải. Hệ thống thường sử dụng wifi và tôi có thể nhớ tên giao diện cho đó là wlan0. Khi tôi đã thử ifconfig wlan0 up, wlan0 đã xuất hiện. Nhưng tên giao diện ethernet duy nhất tôi có thể nhớ là eth[N]em[N] - không cái nào trong số đó hoạt động.

Tài liệu này đề cập đến "tên giao diện có thể dự đoán" nhưng không làm tốt công việc giải thích những gì họ có thể có trong các thuật ngữ đơn giản. Nó đề cập đến một đoạn mã nguồn ngụ ý tên trong trường hợp này có thể được suy ra từ bus PCI và số khe, có vẻ như là một rắc rối phức tạp không cần thiết.

Các tìm kiếm khác xung quanh khiến tôi tin rằng điều này có thể được xác định bởi systemd kết hợp với udev, nhưng có gần 100 tệp trong /usr/lib/udev/rules.d và dành một giờ cố gắng để xác định nơi (và if) có tệp cấu hình systemd cho việc này cũng có vẻ vô lý.

Cũng rất vui khi biết chắc chắn rằng chúng có sẵn, không chỉ là cách chúng có thể được đặt tên if chúng, vì vậy tôi có thể loại trừ các sự cố phần cứng, v.v. Không có cách nào đơn giản để tìm tên của các giao diện mạng khả dụng trên linux?

92
goldilocks

Phương pháp đơn giản nhất mà tôi biết để liệt kê tất cả các giao diện của bạn là

ifconfig -a

CHỈNH SỬA

Nếu bạn đang ở trên một hệ thống đã bị lỗi thời, bạn có thể sử dụng

ip link show
95
Elliott Frisch

Nhân liệt kê chúng theo tên trong /sys, cả hai đều riêng biệt trong (ví dụ) cây thiết bị PCI - mặc dù việc tìm thấy chúng ở đó nếu bạn không biết chúng bắt đầu từ đâu không đơn giản - và cùng nhau thông qua các liên kết tượng trưng trong /sys/class/net. Ví dụ.:

> ls /sys/class/net
em1 lo wlp6so

Một vi dụ khac:

> ls /sys/class/net
lo p6s1 wlan0

Nếu bạn không chắc chắn đó là cái gì, bạn có thể đặt tất cả chúng lên:

ifconfig [name] up 

Hoặc là:

ip link set [name] up

Và sau đó nhìn vào các đầu mối (khá rõ ràng) được liệt kê bởi ifconfig (không có đối số). Mã nguồn systemd được liên kết từ tài liệu Freedesktop.org cũng đề cập đến:

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

Mặc dù trong một trong những trường hợp trên (p6s1) không có tiền tố.

73
goldilocks

Tôi luôn luôn làm cat /proc/net/dev nó đơn giản và dễ nhớ

10
Mohammad Rafiee

ifconfig = Solaris
[.__.] ipconfig = Windows
[.__.] ip = Linux

Điều đó tôi biết, nhưng chắc chắn là mở để bổ sung và sửa chữa.

6
Mick Myhera