天天看點

使用sed工具處理/etc/fstab配置檔案

使用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腳本結合的方法進行處理,具體步驟如下:

  1. 先建立一個ip位址檔案,内容如下:
  2. [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
    。。。。。      
  3. 由于是實驗,我将/etc/fstab檔案複制一份到/oldboy/kewai/xgfs/pfzh,下面是expect腳本,用于完成互動,内容如下:
  4. [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      
  5. shell腳本使用for循環,腳本内容如下:

    說明:實際生産中要使用mount -a重新挂載下檔案系統,使用df -Th檢視下檔案系統挂載情況!

  6. [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      
  7. 執行sh -x fs.sh即可