하드웨어 장치를 통해 MAC 주소를 쉽게 볼 수 있는 방법이 있습니까? 이를 수행하기 위해 여러 Bash 로직을 sed와 결합할 수 있다는 것을 알고 있지만, 이 정보를 얻는 더 쉬운 방법이 있어야 한다고 생각합니다. 예를 들어, 여러 개의 네트워크 카드가 있는 서버가 있고 장치별로 MAC 주소를 보고 싶습니까? 수동으로 상호 연관시키는 방법을 알아낼 수도 있고 IPMI에서 정보를 추출할 수도 있지만 Linux는 항상 작업을 수행하는 빠른 방법을 갖고 있는 것 같습니다. 이 경우에는 그게 무엇인지 모르겠습니다. 내가 찾고 있는 것은 이것이다:
<Some command>
NIC 1 - Intel x710
<its MACs>
NIC 2 - MLX5
<its MACs>
NIC 3 - Broadcom Whatever
<its MACs>
그런 것. 네트워크 카드의 모델(Mellanox MLX5, Intel x710 등)을 결정하는 것이 중요합니다.
답변1
ip link
이것만 보여줍니다. 내 것은 대략 다음과 같습니다.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 4000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether aa:aa:bb:bb:cc:dd brd ff:ff:ff:ff:ff:ff
3: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 00:01:02:03:04:05 brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
link/ether 10:0F:0E:0D:0C:0B brd ff:ff:ff:ff:ff:ff
Linux 네트워크 인터페이스를 "장치 이름"(예: "NIC 1 - Intel x710")에 매핑하는 "많은 쉘 논리 없이" 방법은 없습니다. 특히 x710과 같은 다중 포트 SFP+ 카드의 경우에는 더욱 그렇습니다. 가상 기능을 제공하기 위해 "Linux 네트워크 장치가 하드웨어 장치에 속함" 매핑이 어느 방향으로도 작동하지 않습니다.
답변2
다음과 같은 방법으로 네트워크 카드의 모든 MAC 주소를 얻을 수 있습니다.
$ cat /sys/class/net/*/address
c8:5b:76:9e:65:9a
22:60:04:08:f0:37
00:00:00:00:00:00
34:f3:9a:01:e6:22
따라서 이를 다음과 같이 쉽게 확장할 수 있습니다.
$ ( cd /sys/class/net/ && for i in *; do printf '%s: %s\n' "$i" $(cat "$i"/address); done )
enp0s31f6: c8:5b:76:9e:65:9a
ipv6leakintrf0: 22:60:04:08:f0:37
lo: 00:00:00:00:00:00
tun0:
wlp3s0: 34:f3:9a:01:e6:22
ip
그러나 실제로 명령의 출력을 구문 분석하면마커스 뮬러가 제공하는최선의 선택입니다:
$ ip link | awk '$1~/^[0-9]*:/{printf "%s ", $2} /^ /{print $2}'
lo: 00:00:00:00:00:00
enp0s31f6: c8:5b:76:9e:65:9a
wlp3s0: 34:f3:9a:01:e6:22
ipv6leakintrf0: 22:60:04:08:f0:37
tun0:
단일 명령으로 사용하려면 별칭으로 만드세요. 쉘의 초기화 파일에 다음 행을 추가하십시오( ~/.bashrc
사용된 경우 bash
).
alias getMac="ip link | awk '\$1~/^[0-9]*:/{printf \"%s \", \$2} /^ /{print \$2}'"
그런 다음 새 터미널을 열고 다음을 수행하십시오.
$ getMac
lo: 00:00:00:00:00:00
enp0s31f6: c8:5b:76:9e:65:9a
wlp3s0: 34:f3:9a:01:e6:22
ipv6leakintrf0: 22:60:04:08:f0:37
tun0:
답변3
누군가가 더 깔끔한 것을 생각해 낼 경우를 대비해 이것을 열어 두겠습니다. 그러나 결국 내가 한 일은 다음 lspci
과 결합하는 것이었습니다 ethtool
.
[root@gputest ~]# lspci -v | grep Ethernet
04:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 Gigabit Ethernet PCIe
04:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 Gigabit Ethernet PCIe
31:00.0 Ethernet controller: Intel Corporation Ethernet Controller E810-XXV for SFP (rev 02)
Subsystem: Intel Corporation Ethernet 25G 2P E810-XXV OCP
31:00.1 Ethernet controller: Intel Corporation Ethernet Controller E810-XXV for SFP (rev 02)
Subsystem: Intel Corporation Ethernet 25G 2P E810-XXV OCP
98:00.0 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
98:00.1 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
b1:00.0 Ethernet controller: Mellanox Technologies MT28800 Family [ConnectX-5 Ex]
b1:00.1 Ethernet controller: Mellanox Technologies MT28800 Family [ConnectX-5 Ex]
[root@gputest ~]# ethtool -i eno8303
driver: tg3
version: 4.18.0-348.2.1.el8_5.x86_64
firmware-version: FFV21.81.3 bc 5720-v1.39
expansion-rom-version:
bus-info: 0000:04:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
[root@gputest ~]# ethtool -i eno8403
driver: tg3
version: 4.18.0-348.2.1.el8_5.x86_64
firmware-version: FFV21.81.3 bc 5720-v1.39
expansion-rom-version:
bus-info: 0000:04:00.1
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
[root@gputest ~]# ethtool -i eno12399
driver: ice
version: 4.18.0-348.2.1.el8_5.x86_64
firmware-version: 3.00 0x80008943 20.5.13
expansion-rom-version:
bus-info: 0000:31:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
도메인/버스/기능 번호를 확인하여 lspci
이를 출력과 비교 ethtool
하고 어떤 장치 이름이 어떤 카드 모델과 연관되어 있는지 확인하고 거기에서 MAC 주소를 결정할 수 있습니다.