背景

之前写的脚本中获取 IP 地址时,未考虑虚拟网卡的情况(docker 创建的虚拟网卡),导致脚本失败,故总结下网卡相关知识。

一致网络设备命名规范

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

Centos 7为了方便定位和区分网络设备,采用一致网络设备命名(CONSISTENT NETWORK DEVICE NAMING)规范,支持 biosdevnamenet.ifnames 两种命名规范。

biosdevname

biosdevname 命名规范

centos 查看物理网卡(网卡命名规范及信息查看)(1)

注: 新枚举从 1 开始。

net.ifnames

net.ifnames 命名规范为:设备类型 设备位置 数字

设备类型

设备命名

centos 查看物理网卡(网卡命名规范及信息查看)(2)

示例

系统默认命名规则

默认情况下,systemd 会使用以下策略,采用支持的命名方案为接口命名:

这个策略(如上所述)是默认策略。如果该系统已启用 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:"

参考资料,