使用Debian系linux脚本修改interfaces文件实现永久修改ip地址
一、功能简述
将修改网络参数的指令写入脚本,通过向脚本传参数的方式设置各种参数(IP、子网掩码、网关、DNS)。
二、实现方式
1.脚本通过执行ifconfig和ip命令的方式,实现对网络参数的即时修改;
2.脚本通过编辑interfaces文件(路径:/etc/network/interfaces)的方式,实现对网络参数的永久修改。
备注:此处仅适用于Debian系的网卡配置。Debian系的网卡配置跟Redhat系很不一样,Redhat是放在/etc/sysconfig/network-scripts目录下面的一大堆文件里面。Debian系的则是存在/etc/network/interfaces文件里。
三、修改网络参数(IP、子网掩码、网关、DNS)
1.查看网络状态
(1)ifconfig命令
(2)ip命令
ip route/ip route show/ip route list可显示网络接口信息
(3)route命令
2.即时修改
(1)ifconfig命令
(2)ip命令
3.永久修改
(1)interfaces文件
在Debian系的网卡中,interfaces文件一个基本的配置大概是下面这个样子:
#The loopback interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.200.1
netmask 255.255.255.0
gatway 192.168.200.254
dns-nameservers 8.8.8.8
auto eth1
iface eth1 inet static
address 18.0.139.55
netmask 255.255.255.0
gateway 18.0.138.254
(2)修改ip
第2行,第5行和第11行说明lo接口,eth0接口和eth1接口会在系统启动时被自动配置;
第3行将lo接口设置为一个本地回环(loopback)地址;
第6行和第11行指出eth0和eth1接口具有一个静态的(static)IP配置;
第7行-第10行分别设置eth0接口的ip、子网掩码、网关和DNS地址;
第12行-第15行分别设置eth1接口的ip、子网掩码、网关和DNS地址。
若要修改网络参数,修改上述对应数据即可。
(3)vi命令
格式:
vi 文件路径加文件名
示例:
编辑网卡配置文件interfaces,其路径为:/ect/network/interfaces
vi /etc/network/interfaces
三种模式:命令模式、输入模式、操作模式
命令模式:输入上述指令后便直接进入命令模式,此时无法对文件内容进行操作。无论处于哪种模式下,按下“ESC”键即可返回命令模式。
输入模式:在命令模式中按下“i”或“a”或“o”键即可进入输入模式,在输入模式下可对文件内容进行编辑。
操作模式:在命令模式中按下“:”键即可进入操作模式。常用命令为“:wq”保存并退出,“:q”直接退出,“:q!”强制退出。
更多vi命令细节问题及操作请访问:
vi/vim命令
四、制作脚本
1.创建脚本文件
事先可先创建存放脚本的文件夹:
mkdir /shell01
当前目录切换到shell01文件夹下:
cd /shell01/
用vi命令对sh文件进行创建与编辑:
vi ip_shell.sh
由于涉及到interfaces文件的编辑,需要对脚本赋予权限:
chmod 777 /shell01/ip_shell.sh
2.编写脚本文件
shell脚本如下:
#!/usr/bin/env bash
eth1=/etc/network/interfaces
ipa=$(grep 'address' $eth1|sed -n '2p'|awk '{print $2}')
maska=$(grep 'netmask' $eth1|sed -n '2p'|awk '{print $2}')
gwa=$(grep 'gateway' $eth1|sed -n '2p'|awk '{print $2}')
dnsa=$(grep 'dns' $eth1|sed -n '2p'|awk '{print $2}')
ipb=$1
maskb=$2
gwb=$3
dnsb=$4
sed -i '/iface eth1/,/address/s/'$ipa'/'$ipb'/g' $eth1
sed -i '/iface eth1/,/netmask/s/'$maska'/'$maskb'/g' $eth1
sed -i '/iface eth1/,/gateway/s/'$gwa'/'$gwb'/g' $eth1
sed -i '/iface eth1/,/dns-nameservers/s/'$dnsa'/'$dnsb'/g' $eth1
ifconfig eth1 $ipb netmask $maskb
ip route add default via $gwb dev eth1
以修改eth1接口的ip为例:
大致思路是将interfaces文件中‘address’字符串的那一行用grep提取出,用sed提出代表eth1的第二行,再用awk提出第二个字符串,即得到具体的ip地址;之后用sed指令定位到eth1接口的address那一行,用想要修改的新ip替换掉原来的旧ip,完成对ip的永久修改;最后用ifconfig命令完成对ip的即时修改。
其余子网掩码、网关、DNS同理。
3.执行脚本
输入:/shell01/ip_shell.sh 新ip 新子网 新网关 新DNS
如:/shell01/ip_shell.sh 18.0.139.55 255.255.255.0 18.0.139.254 8.8.8.8
如下图所示:
通过cat命令可看出,interfaces文件已被修改,即ip地址、子网掩码、网关、DNS已被永久修改成新的。
接着通过ifconfig和ip route命令可确认,当前ip地址、子网掩码、网关、DNS也已被修改成新的。
五、使用node-red调用脚本
在node-red中使用exec节点可实现对脚本的调用。
1.exec节点
调用一个系统命令,并提供3个输出:stdout,stderr和返回码。 默认情况下,使用调用命令的exec()在等待完成时阻塞,然后一次返回完整的结果以及任何错误。
2.在node-red中创建流
编辑exec节点:
注意事项:
1.应在linux系统下执行node-red,否则在本机环境下无法调用sh脚本;
2.inject节点应设置为注入空字符,否则注入时间戳将无法调用sh脚本。