ハードウェアデバイスを介して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アドレスを決定できます。