Centos 網絡卡命名規範及資訊檢視(物理網絡卡,虛擬網絡卡)
阿新 • • 發佈:2020-09-03
背景
之前寫的指令碼中獲取 IP 地址時,未考慮虛擬網絡卡的情況(docker 建立的虛擬網絡卡),導致指令碼失敗,故總結下網絡卡相關知識。
一致網路裝置命名規範
Centos 6及之前的版本網絡卡命名格式:eth[0123…]
。
Centos 7為了方便定位和區分網路裝置,採用一致網路裝置命名(CONSISTENT NETWORK DEVICE NAMING)
規範,支援 biosdevname
和 net.ifnames
兩種命名規範。
biosdevname
biosdevname 命名規範
裝置 | 舊名稱 | 新名稱 | 示例 |
---|---|---|---|
內嵌網路介面(LOM) | eth[0123…] | em[1234…][a] | em1 |
PCI 卡網路介面 | eth[0123…] | p |
p3p4 |
虛擬功能 | eth[0123…] | p |
p3p4_1 |
注: 新列舉從 1 開始。
net.ifnames
net.ifnames 命名規範為:裝置型別 + 裝置位置 + 數字
裝置型別
en
代表乙太網wl
代表無線區域網(WLAN)ww
代表無線廣域網(WWAN)
裝置命名
格式 | 描述 |
---|---|
o<index> | 板載裝置索引號 |
s<slot>[f<function>][d<dev_id>] | 熱插拔插槽索引號 |
x<MAC> | MAC 地址 |
p<bus>s<slot>[f<function>][d<dev_id>] | PCI 地理位置 |
p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>] | USB 埠鏈 |
示例
eno1
板載1號網絡卡enp0s2
PCI擴充套件卡的2號埠ens33
熱插拔插槽3號PCI-E插槽的3號埠wlp3s0
第3號PCI擴充套件卡的0號埠
系統預設命名規則
預設情況下,systemd
會使用以下策略,採用支援的命名方案為介面命名:
- 方案 1:如果韌體或 BIOS 資訊適用且可用,則使用整合了為板載裝置提供索引號的韌體或 BIOS 的名稱(例如:
eno1
),否則請使用方案 2。 - 方案 2:如果韌體或 BIOS 資訊適用且可用,則使用整合了為 PCI 快速熱插拔插槽提供索引號的韌體或 BIOS 名稱(例如
ens1
),否則請使用方案 3。 - 方案 3:如果硬體聯結器物理位置資訊可用,則使用整合了該資訊的名稱(例如:enp2s0),否則請使用方案 5。
- 方案 4:預設不使用整合介面 MAC 地址的名稱(例如:
enx78e7d1ea46da
),但使用者可選擇使用此方案。 - 方案 5:傳統的不可預測的核心命名方案,在其他方法均失敗後使用(例如:
eth0
)。
這個策略(如上所述)是預設策略。如果該系統已啟用 biosdevname,則會使用該方案。
注:啟用 biosdevname 需要新增 biosdevname=1
作為命令列引數(Dell 系統除外),此時只要安裝 biosdevname,就會預設使用該方案。如果使用者已新增 udev 規則,該規則會更改核心裝置名稱,則會優先使用這些規則。
檢視網絡卡、獲取 IP
# 全部網絡卡
$ ls /sys/class/net/
或
$ ifconfig -a
或
$ ip a
# 虛擬網絡卡
$ ls /sys/devices/virtual/net/
# 物理網絡卡
$ ls /sys/class/net/ | grep -v "$(ls /sys/devices/virtual/net/)"
# 獲取本機所有 IP
$ ifconfig -a |grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
# 獲取物理網絡卡的 IP
$ ifconfig $(ls /sys/class/net/ | grep -v "$(ls /sys/devices/virtual/net/)") |grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
參考資料
微信公眾號:daodaotest