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

发布了121 篇原创文章 · 获赞 69 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/iT__SuperMan/article/details/90746375
今日推荐