1. 程式人生 > 實用技巧 >Centos 網絡卡命名規範及資訊檢視(物理網絡卡,虛擬網絡卡)

Centos 網絡卡命名規範及資訊檢視(物理網絡卡,虛擬網絡卡)

背景

之前寫的指令碼中獲取 IP 地址時,未考慮虛擬網絡卡的情況(docker 建立的虛擬網絡卡),導致指令碼失敗,故總結下網絡卡相關知識。

一致網路裝置命名規範

Centos 6及之前的版本網絡卡命名格式:eth[0123…]

Centos 7為了方便定位和區分網路裝置,採用一致網路裝置命名(CONSISTENT NETWORK DEVICE NAMING)規範,支援 biosdevnamenet.ifnames 兩種命名規範。

biosdevname

biosdevname 命名規範

裝置 舊名稱 新名稱 示例
內嵌網路介面(LOM) eth[0123…] em[1234…][a] em1
PCI 卡網路介面 eth[0123…] pp[b] p3p4
虛擬功能 eth[0123…] pp_[c] 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