使用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,如需轉載請自行聯系原作者