歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux腳本程序自動修改網卡配置文件中的MAC地址

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
 
Copyright © Linux教程網 All Rights Reserved