使用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即可