获取本地IP
172.17 是docker的虚拟IP,因此将它排除掉。
localip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v 172.17|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
echo $localip
获取本地IP的子网掩码
与获取本地IP的原理差不多。
localmask=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v 172.17|grep -v inet6|awk '{print $4}'|tr -d "addr:"`
echo $localmask
获取本地IP的网关服务器IP
关键点是UG。
localgateway=`route -n|grep 0.0.0.0|grep UG|awk '{print $2}'`
echo $localgateway
获取本地DNS
如果有多个结果会造成awk的结果也是多个,而tail表示从第几行开始,head表示输出前几行,因此两个命令结合,就可以实现,输出第X行到Y行的结果。
DNS在DHCP时,默认会有两条记录,因此可以获取两条DNS服务器IP。
localdns1=`grep nameserver /etc/resolv.conf|awk ' {print $2}' |tail -n +1|head -n 1`
localdns2=`grep nameserver /etc/resolv.conf|awk ' {print $2}' |tail -n +2|head -n 1`
echo "dns1:$localdns1"
echo "dns2:$localdns2"
一键将本地DHCP信息转换为静态IP配置
变量取值是来源于前面的命令。
sed -i "s/dhcp/static/g" /etc/sysconfig/network-scripts/ifcfg-eth0 \
&& echo "" >> /etc/sysconfig/network-scripts/ifcfg-eth0 \
&& echo "IPADDR=$localip" >> /etc/sysconfig/network-scripts/ifcfg-eth0 \
&& echo "NETMASK=$localmask" >> /etc/sysconfig/network-scripts/ifcfg-eth0 \
&& echo "GATEWAY=${localgateway}" >> /etc/sysconfig/network-scripts/ifcfg-eth0 \
&& echo "DNS1=$localip" >> /etc/sysconfig/network-scripts/ifcfg-eth0
使网卡配置信息生效
在rocky linux里面没有生效,最直接的办法就是重启操作系统。
systemctl restart network>/dev/null
nmcli connection reload>/dev/null