使用sed工具处理/etc/fstab配置文件
背景:某行有一百多台服务器需要重新配置文件系统,原有的文件系统的内容如下:
/dev/sdb1 /data/ssd1 /dev/sdc1 /data/ssd2 /dev/sdd1 /data/disk /dev/sde1 /data/disk2 /dev/sdf1 /data/disk3 /dev/sdg1 /data/disk4 /dev/sdh1 /data/disk5 /dev/sdi1 /data/disk6 /dev/sdj1 /data/disk7 /dev/sdk1 /data/disk8 /dev/sdl1 /data/disk9 /dev/sdm1 /data/disk10
现要求将其改为如下内容:
/dev/sdb /data/ssd1 /dev/sdc /data/ssd2 /dev/sdd /data/disk /dev/sde /data/disk2 /dev/sdf /data/disk3 /dev/sdg /data/disk4 /dev/sdh /data/disk5 /dev/sdi /data/disk6 /dev/sdj /data/disk7 /dev/sdk /data/disk8 /dev/sdl /data/disk9 /dev/sdm /data/disk10
由于服务器数量较多和客户要求尽快处理,鉴于此,我使用shell脚本与expect脚本结合的方法进行处理,具体步骤如下:
先建立一个ip地址文件,内容如下:
[root@ceshiji xgfs]# cat ip.txt 192.168.100.114 192.168.100.113 192.168.100.112 192.168.100.111 192.168.100.110 。。。。。
由于是实验,我将/etc/fstab文件复制一份到/oldboy/kewai/xgfs/pfzh,下面是expect脚本,用于完成交互,内容如下:
[root@ceshiji xgfs]# cat fs.exp #!/usr/bin/expect set ip [lindex $argv 0] set timeout 60 set password "root" spawn ssh root@$ip {sed -i -r 's#/dev/sd([a-z]).* (.*)#/dev/sd\1 \2#' /oldboy/kewai/xgfs/pfzh} expect { "yes/no" {exp_send "yes\r";exp_continue} "*password:" {exp_send "$password\r"} } expect eof exit
shell脚本使用for循环,脚本内容如下:
说明:实际生产中要使用mount -a重新挂载下文件系统,使用df -Th查看下文件系统挂载情况!
[root@ceshiji xgfs]# cat fs.sh #!/bin/bash for ip in $(cat /oldboy/kewai/xgfs/ip.txt) do expect fs.exp $ip cat /oldboy/kewai/xgfs/pfzh #mount -a #df -Th done
执行sh -x fs.sh即可
转载于:https://blog.51cto.com/wutengfei/1958205