使用sed工具处理/etc/fstab配置文件
背景:某行有一百多台服务器需要重新配置文件系统,原有的文件系统的内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
/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
|
现要求将其改为如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
|
/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地址文件,内容如下:
-
1234567
[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脚本,用于完成交互,内容如下:
-
123456789101112
[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查看下文件系统挂载情况!
-
123456789
[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即可
本文转自品鉴初心51CTO博客,原文链接:http://blog.51cto.com/wutengfei/1958205,如需转载请自行联系原作者