shell 使用sed修改系統配置

2.使用sed修改系統配置
問題
本案例要求熟悉課上的sed應用案例,並編寫腳本anonftp.sh,實現以下功能:
通過yum安裝vsftpd軟件包
修改vsftpd服務配置,開啓匿名上傳
調整/var/ftp/pub目錄權限,允許ftp寫入
啓動vsftpd服務,並設置開機自運行
方案
步驟
實現此案例需要按照如下步驟進行。
步驟一:認識課堂上的sed練習
1)修改默認運行級別
確認當前的運行級別配置(以id:開頭的行):
[root@svr5 ~]# grep “^id:” /etc/inittab
id:3:initdefault:
將默認運行級別修改爲5,確認修改結果:
[root@svr5 ~]# sed -i ‘/^id:/s/3/5/’ /etc/inittab
[root@svr5 ~]# grep “^id:” /etc/inittab
id:5:initdefault:
再改回去:
[root@svr5 ~]# sed -i ‘/^id:/s/5/3/’ /etc/inittab
[root@svr5 ~]# grep “^id:” /etc/inittab
id:3:initdefault:
2)修改IP地址的網段部分,主機地址不變。
直接修改網卡eth0的配置文件,檢查原有的配置內容:
[root@svr5 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)

DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0c:29:82:09:e9
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.4.4
TYPE=Ethernet
若希望將IP地址192.168.4.4修改爲172.16.16.4,則應該定位到“IPADDR”所在的行,執行相應的替換(僅測試,尚未修改):
[root@svr5 ~]# sed ‘/^IPADDR/s/192.168.4.4/172.16.16.4/’
/etc/sysconfig/network-scripts/ifcfg-eth0 | grep “^IPADDR”
IPADDR=172.16.16.4
由於要求只修改網段地址,當上述操作在腳本中使用時,若要提供給不同的主機運行,顯示不能直接寫成 4 。這種情況下,可以利用擴展正則表達式的 \1、\2、……等調用,分別對應此前第1個、第2個、…… 以 ()包圍的表達式所匹配的內容。
所以上述操作可以改爲如下(啓用擴展匹配應添加 -r 選項):
[root@svr5 ~]# sed -r -i ‘/^IPADDR/s/192.168.4.(.)/172.16.16.\1/’
/etc/sysconfig/network-scripts/ifcfg-eth0
確認修改結果:
[root@svr5 ~]# grep “^IPADDR” /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=172.16.16.4
再改回去:
[root@svr5 ~]# sed -r -i '/^IPADDR/s/172.16.16.(.
)/192.168.4.\1/’
/etc/sysconfig/network-scripts/ifcfg-eth0
[root@svr5 ~]# grep “^IPADDR” /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=192.168.4.4
3)調整httpd服務配置,更改網站根目錄。
以RHEL6默認安裝的httpd軟件包爲例,默認網站根目錄爲“/var/www/html”,現需要將其改爲“/opt/wwwroot”(僅示範修改方法,目錄準備等其他工作不再闡述)。
確認原有配置內容:
[root@svr5 ~]# grep “^DocumentRoot” /etc/httpd/conf/httpd.conf
DocumentRoot “/var/www/html”
由於需要替換的字符串中有 / ,爲了避免與sed替換操作的分隔混淆,可以使用其他字符作爲替換分隔,比如可改用“s#old#new#”的方式實現替換:
[root@svr5 ~]# sed -i ‘s#/var/www/html#/opt/wwwroot#’
/etc/httpd/conf/httpd.conf
[root@svr5 ~]# grep “^DocumentRoot” /etc/httpd/conf/httpd.conf
DocumentRoot “/opt/wwwroot”
若要恢復,可再改回去:
[root@svr5 ~]# sed -i ‘s#/opt/wwwroot#/var/www/html#’
/etc/httpd/conf/httpd.conf
[root@svr5 ~]# grep “^DocumentRoot” /etc/httpd/conf/httpd.conf
DocumentRoot “/var/www/html”
步驟二:編寫anonftp.sh腳本,用來裝配匿名FTP服務
1)任務需求及思路分析
vsftpd服務的安裝、改目錄權限、起服務等操作可以直接寫在腳本中。
修改vsftpd.conf配置的工作可以使用sed命令,根據默認配置,只需要定位到以#anon開頭的行,去掉開頭的註釋即可。
準備測試環境(如果未安裝vsftpd,則此處可跳過):
[root@svr5 ~]# yum -y remove vsftpd //卸載vsftpd包
… …
[root@svr5 ~]# mv /var/ftp/ /var/ftp.old //移除FTP根目錄
[root@svr5 ~]# mv /etc/vsftpd/ /etc/vsftpd.old //轉移舊的配置
2)根據實現思路編寫腳本文件
[root@svr5 ~]# vim anonftp.sh
#!/bin/bash
yum -y install vsftpd //安裝vsftpd軟件
cp /etc/vsftpd/vsftpd.conf{,.bak} //備份默認的配置文件
sed -i “/#anon/s/#//” /etc/vsftpd/vsftpd.conf //修改服務配置
chown ftp /var/ftp/pub //調整目錄權限
/etc/init.d/vsftpd restart //啓動服務
chkconfig vsftpd on //設爲自動運行

[root@svr5 ~]# chmod +x anonftp.sh
3)驗證、測試腳本
運行腳本anonftp.sh
[root@svr5 ~]# ./anonftp.sh
… …
Installed:
vsftpd.x86_64 0:2.0.5-28.el5

Complete!
關閉 vsftpd: [失敗]
爲 vsftpd 啓動 vsftpd: [確定]
使用ftp登錄服務,測試是否可以上傳:
[root@svr5 ~]# ftp localhost //本機訪問測試
Connected to localhost.localdomain.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): ftp //匿名登錄
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub //切換到 pub/ 目錄
250 Directory successfully changed.
ftp> put install.log //上傳當前目錄下的install.log 文件
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,192,127)
150 Ok to send data.
226 File receive OK.
33139 bytes sent in 0.0065 seconds (5e+03 Kbytes/s)
ftp> quit //斷開FTP連接
221 Goodbye.
查看/var/ftp/pub新上傳的文件:
[root@svr5 ~]# ls -lh /var/ftp/pub/
總計 36K
-rw------- 1 ftp ftp 33K 12-13 18:25 install.log

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章