天天看點

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

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

背景:某行有一百多台伺服器需要重新配置檔案系統,原有的檔案系統的内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

<code>/dev/sdb1</code>        <code>/data/ssd1</code>

<code>/dev/sdc1</code>        <code>/data/ssd2</code>

<code>/dev/sdd1</code>        <code>/data/disk</code>

<code>/dev/sde1</code>        <code>/data/disk2</code>

<code>/dev/sdf1</code>        <code>/data/disk3</code>

<code>/dev/sdg1</code>        <code>/data/disk4</code>

<code>/dev/sdh1</code>        <code>/data/disk5</code>

<code>/dev/sdi1</code>        <code>/data/disk6</code>

<code>/dev/sdj1</code>        <code>/data/disk7</code>

<code>/dev/sdk1</code>        <code>/data/disk8</code>

<code>/dev/sdl1</code>        <code>/data/disk9</code>

<code>/dev/sdm1</code>        <code>/data/disk10</code>

現要求将其改為如下内容:

<code>/dev/sdb</code>         <code>/data/ssd1</code>

<code>/dev/sdc</code>         <code>/data/ssd2</code>

<code>/dev/sdd</code>         <code>/data/disk</code>

<code>/dev/sde</code>         <code>/data/disk2</code>

<code>/dev/sdf</code>         <code>/data/disk3</code>

<code>/dev/sdg</code>         <code>/data/disk4</code>

<code>/dev/sdh</code>         <code>/data/disk5</code>

<code>/dev/sdi</code>         <code>/data/disk6</code>

<code>/dev/sdj</code>         <code>/data/disk7</code>

<code>/dev/sdk</code>         <code>/data/disk8</code>

<code>/dev/sdl</code>         <code>/data/disk9</code>

<code>/dev/sdm</code>         <code>/data/disk10</code>

由于伺服器數量較多和客戶要求盡快處理,鑒于此,我使用shell腳本與expect腳本結合的方法進行處理,具體步驟如下:

先建立一個ip位址檔案,内容如下:

<code>[root@ceshiji xgfs]</code><code># cat ip.txt</code>

<code>192.168.100.114</code>

<code>192.168.100.113</code>

<code>192.168.100.112</code>

<code>192.168.100.111</code>

<code>192.168.100.110</code>

<code>。。。。。</code>

由于是實驗,我将/etc/fstab檔案複制一份到/oldboy/kewai/xgfs/pfzh,下面是expect腳本,用于完成互動,内容如下:

<code>[root@ceshiji xgfs]</code><code># cat fs.exp</code>

<code>#!/usr/bin/expect</code>

<code>set</code> <code>ip [lindex $argv 0]</code>

<code>set</code> <code>timeout 60</code>

<code>set</code> <code>password  </code><code>"root"</code>

<code>spawn </code><code>ssh</code> <code>root@$ip  {</code><code>sed</code>  <code>-i -r </code><code>'s#/dev/sd([a-z]).*   (.*)#/dev/sd\1     \2#'</code> <code>/oldboy/kewai/xgfs/pfzh</code><code>}</code>

<code>expect {</code>

<code>"yes/no"</code>  <code>{exp_send </code><code>"yes\r"</code><code>;exp_continue}</code>

<code>"*password:"</code> <code>{exp_send  </code><code>"$password\r"</code><code>}</code>

<code>}</code>

<code>expect eof</code>

<code>exit</code>

shell腳本使用for循環,腳本内容如下:

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

<code>[root@ceshiji xgfs]</code><code># cat fs.sh</code>

<code>#!/bin/bash</code>

<code>for</code> <code>ip </code><code>in</code> <code>$(</code><code>cat</code> <code>/oldboy/kewai/xgfs/ip</code><code>.txt)</code>

<code>do</code>

<code>expect fs.exp $ip</code>

<code>cat</code> <code>/oldboy/kewai/xgfs/pfzh</code>

<code>#mount -a</code>

<code>#df -Th</code>

<code>done</code>

執行sh -x fs.sh即可

     本文轉自品鑒初心51CTO部落格,原文連結:http://blog.51cto.com/wutengfei/1958205,如需轉載請自行聯系原作者