Welcome 微信登录

首页 / 操作系统 / Linux / Linux脚本程序自动修改网卡配置文件中的MAC地址

在玩Linux虚拟机的时候,一个安装好linux系统的virtual HDD会用于创建多个虚拟机,这样就不需要在创建每个虚拟机都安装一遍系统了。virtual HDD加载到虚拟机后,新的虚拟机的MAC地址就会和virtual系统中ifcfg-eth[0-9]中的MAC地址不一样,进入系统后,ifconfig -a看到的网卡编号是接着原来系统中网卡序号编号的。假如原来系统中有四块网卡,那么对应的编号是:eth0,eth1,eth2,eth3;那么你用virtual HDD来创建一个新虚拟机,新的虚拟机同样配置了四块网卡,那么在进入系统后,用ifconfig -a 应该看到以下这样的网卡编号:eth4,eth5,eth6,eth7。我经常会遇到这样的问题,每次修复这类问题,都要花上很长时间,实在纠结。我不得不考虑自动化的问题。于是下面的这个脚本程序就诞生了。这个脚本程序主要修改以下两个文件: ifcfg-eth[0-9]:[0-9]是泛指,这是正则表达式的表示方法,别说看不懂。这些网卡配置文件中的MAC地址全部要修改为当前机器上网卡的MAC。 70-persistent-net.rules:决定网卡的编号。这个文件中的内容,是系统启动时检测到的网卡,是系统自动生成;这个文件可以直接清空,我这里为了练手,所以我也对其做了细化处理。执行完这个脚本后,重启系统,就一切OK了。就看到了熟悉的eth0,eth1……之类的了。此脚本程序适应于RHEL系列,CentOS。#!/bin/bash
#update:2012-12-16
#author:Sean_Gong
#version
#根据系统所识别到的网卡个数,决定修改ifcfg-eth$x文件,在修改这个网卡配置文件之前首先确定这个文件是否存在。
#如果存在,则把系统识别到的所有网卡的MAC地址写入该文件作为注释,便于记录和检查。
#在处理70-persistent-net.rules时,可以简单的把该文件清空。
#系统重启后,会自己把识别到的网卡添加到这个文件中,不需要人工干预。
#这里我之所以处理这个文件,是为了练习sed对文本的处理,和程序逻辑的锻炼,对程序整体的掌控能力。cdate=$(date "+%Y%m%d")
 
num=$(ifconfig -a | grep eth | wc -l)
 
 
 
for ((n=0;n<${num};n++))
 
    do
 
     j=$((n+1))
 
     [ -e 70-persistent-net.rules_${cdate} ] || cp -fa /etc/udev/rules.d/70-persistent-net.rules 70-persistent-net.rules_${cdate}
 
 
 
     if [ -e /etc/sysconfig/network-scripts/ifcfg-eth${n} ] ; then
 
         [ -e ifcfg-eth${n}_${cdate} ] || cp -fa /etc/sysconfig/network-scripts/ifcfg-eth${n} ./ifcfg-eth${n}_${cdate}
 
         cat ifcfg-eth${n}_${cdate} | sed "/^#eth.*$/d" > ifcfg-eth${n}_temp
 
         ifconfig -a | grep "HWaddr" | awk "{print "#"$1" : "$5}" >> ifcfg-eth${n}_temp
 
         newmac=$(ifconfig -a | grep "eth" | sort | awk "{print $5}" | nl -n ln | grep "^${j}" | awk "{print $2}")
 
         sed "s/HWADDR.*$/HWADDR=$newmac/g" ifcfg-eth${n}_temp > ifcfg-eth${n}_vi
 
         cp -fa ifcfg-eth${n}_vi /etc/sysconfig/network-scripts/ifcfg-eth${n} && rm -f ifcfg-eth${n}_temp
 
         grep -i ${newmac} 70-persistent-net.rules_${cdate} | sed "s/NAME=.*$/NAME="eth${n}"/g" >> 70-persistent-net.rules_temp
 
      else
 
         newmac=$(ifconfig -a | grep "eth" | sort | awk "{print $5}" | nl -n ln | grep "^${j}" | awk "{print $2}")
 
         grep -i ${newmac} 70-persistent-net.rules_${cdate} | sed "s/NAME=.*$/NAME="eth${n}"/g" >> 70-persistent-net.rules_temp
 
         continue
 
     fi
 
    done
 
 
 
cat 70-persistent-net.rules_temp > 70-persistent-net.rules_vi && rm -f 70-persistent-net.rules_temp
 
cp -fa 70-persistent-net.rules_vi /etc/udev/rules.d/70-persistent-net.rules Linux环境下模拟实现命令解释器在Linux(CentOS)上安装Thrift+Scribe相关资讯      Linux脚本  Linux 网卡MAC 
  • 获取Linux服务器基本信息脚本  (02月17日)
  • Linux 批量拷贝数据脚本  (03/05/2015 10:47:12)
  • 简单的Linux脚本程序  (11/10/2013 08:45:07)
  • Linux定时任务中用脚本代替可执行  (06/06/2015 06:37:39)
  • Linux下的flashback脚本  (05/21/2014 08:25:05)
  • Linux下记录所有用户操作的脚本  (07/29/2013 08:33:39)
本文评论 查看全部评论 (0)
表情: 姓名: 字数