logo资料库

京峰教育Linux Shell高级编程.docx

第1页 / 共43页
第2页 / 共43页
第3页 / 共43页
第4页 / 共43页
第5页 / 共43页
第6页 / 共43页
第7页 / 共43页
第8页 / 共43页
资料共43页,剩余部分请下载后查看
第1章 Shell编程高级企业实战
1.1 Shell编程实战系统备份脚本
1.2 Shell编程实战收集服务器信息
1.3 Shell编程实战拒绝恶意IP登录
1.4 Shell编程实战LAMP一键安装
1.5 Shell编程实战MYSQL主从复制
1.6 Shell编程实战修改IP及主机名
1.7 Shell编程实战Zabbix安装配置
1.8 Shell编程实战Nginx虚拟主机
1.9 Shell编程实战Nginx、Tomcat脚本
1.10 Shell编程实战Docker管理脚本
1.11 Shell编程实战Bind管理脚本
第 1 章 Shell 编程高级企业实战 企业生产环境中,服务器规模成百上千,如果依靠人工去维护和管理是非常吃力的,基 于 Shell 编程脚本管理和维护服务器变得简单、从容,而且对企业自动化运维之路的建设起 到极大的推动作用。 本章向读者介绍企业生产环境 Shell 编程案例、自动化备份 MySQL 数据、服务器信息 收集、防止恶意 IP 访问、LAMP+MySQL 主从实战、千台服务器 IP 修改、Nginx+Tomcat 高级自动化部署脚本、Nginx 虚拟主机配置、Docker 管理平台等。 1.1 Shell 编程实战系统备份脚本 日常企业运维中,需要备份 Linux 操作系统中重要的文件,例如/etc、/boot 分区、重要 网站数据等,在备份数据时,由于数据量非常大,需要指定高效的备份方案,如下为常用的 备份数据方案:  每周日进行完整备份,周一至周六使用增量备份;  每周六进行完整备份,周日至周五使用增量备份。 企业备份数据的工具主要有:tar、cp、rsync、scp、sersync、dd 等工具。如下为基于开 源 tar 工具实现系统数据备份方案: Tar 工具手动全备份网站,-g 参数指定新的快照文件: tar -g /tmp/snapshot -czvf /tmp/2017_full_system_data.tar.gz /data/sh/ Tar 工具手动增量备份网站,-g 参数指定全备已生成的快照文件,后续增量备份基于上 一个增量备份快照文件: tar -g /tmp/snapshot -czvf /tmp/2014_add01_system_data.tar.gz /data/sh/ Tar 工具全备、增量备份网站,Shell 脚本实现自动打包备份编写思路如下:  系统备份数据按每天存放;  创建完整备份函数块;  创建增量备份函数块;  根据星期数判断完整或增量;
 将脚本加入 Crontab 实现自动备份; Tar 工具全备、增量备份网站,Shell 脚本实现自动打包备份,代码如下: #!/bin/bash #Auto Backup Linux System Files #By author jfedu.net 2017 #Define Path variables SOURCE_DIR=( $* ) TARGET_DIR=/data/backup/ YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` WEEK=`date +%u` A_NAME=`date +%H%M` FILES=system_backup.tgz CODE=$? if [ -z "$*" ];then echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n--------------------------------------------\n\nUsage: { $0 /boot /etc}\033[0m" exit fi #Determine Whether the Target Directory Exists if fi [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY echo -e "\033[32mThe $TARGET_DIR Created Successfully !\033[0m"
#EXEC Full_Backup Function Command Full_Backup() { if [ "$WEEK" -eq "7" ];then rm -rf $TARGET_DIR/snapshot cd $TARGET_DIR/$YEAR/$MONTH/$DAY ; tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]} [ "$CODE" == "0" ]&&echo -e "--------------------------------------------\n\033[32mThese Full_Backup System Files Backup Successfully !\033[0m" fi } #Perform incremental BACKUP Function Command Add_Backup() { if [ $WEEK -ne "7" ];then cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $A_NAME$FILES ${SOURCE_DIR[@]} [ "$CODE" == "0" ]&&echo -e "-----------------------------------------\n\033[32mThese Add_Backup System $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Files Backup Successfully !\033[0m" fi } sleep 3 Full_Backup;Add_Backup Crontab 任务计划中添加如下语句,每天凌晨 1 点整执行备份脚本即可: 0 1 * * * /bin/sh /data/sh/auto_backup.sh /boot /etc/ >> /tmp/back.log 2>&1
1.2 Shell 编程实战收集服务器信息 在企业上产环境中,经常会对服务器资产进行统计存档,单台服务器可以手动去统计服 务器的 CPU 型号、内存大小、硬盘容量、网卡流量等,如果服务器数量超过百台、千台, 使用手工方式就变得非常吃力。 基于 Shell 脚本实现自动化服务器硬件信息的收集,并将收集的内容存放在数据库,能 更快、更高效的实现对服务器资产信息的管理。Shell 脚本实现服务器信息自动收集,编写 思路如下:  创建数据库和表存储服务器信息;  基于 Shell 四剑客 awk、find、sed、grep 获取服务器信息;  将获取的信息写成 SQL 语句;  定期对 SQL 数据进行备份;  将脚本加入 Crontab 实现自动备份; 创建数据库表,创建 SQL 语句如下: CREATE TABLE `audit_system` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ip_info` varchar(50) NOT NULL, `serv_info` varchar(50) NOT NULL, `cpu_info` varchar(50) NOT NULL, `disk_info` varchar(50) NOT NULL, `mem_info` varchar(50) NOT NULL, `load_info` varchar(50) NOT NULL, `mark_info` varchar(50) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ip_info` (`ip_info`), UNIQUE KEY `ip_info_2` (`ip_info`) ); Shell 脚本实现服务器信息自动收集,代码如下: #!/bin/bash
#Auto get system info #By author jfedu.net 2017 #Define Path variables echo -e "\033[34m \033[1m" cat <
echo -e '\033[31mmysql -uaudit -p123456 -D audit -e ''' "insert into audit_system values('','${ip_info}','$serv_info','${cpu_info1} X${cpu_info2}','$disk_info','$mem_info','$load_info','$mark_info')" ''' \033[0m ' mysql -uroot -p123456 -D test -e "insert into audit_system values('','${ip_info}','$serv_info','${cpu_info1} X${cpu_info2}','$disk_info','$mem_info','$load_info','$mark_info')" else fi echo "Please wait,exit......" exit 手动读取数据库服务器信息命令: mysql -uroot -p123 -e 'use wugk1 ;select * from audit_audit_system;'|sed 's/-//g'|grep -v "id" 1.3 Shell 编程实战拒绝恶意 IP 登录 企业服务器暴露在外网,每天会有大量的人使用各种用户名和密码尝试登陆服务器,如 果让其一直尝试,难免会猜出密码,通过开发 Shell 脚本,可以自动将尝试登陆服务器错误 密码次数的 IP 列表加入到防火墙配置中。 Shell 脚本实现服务器拒绝恶意 IP 登陆,编写思路如下:  登陆服务器日志/var/log/secure;  检查日志中认证失败的行并打印其 IP 地址;  将 IP 地址写入至防火墙;  禁止该 IP 访问服务器 SSH 22 端口;  将脚本加入 Crontab 实现自动禁止恶意 IP; Shell 脚本实现服务器拒绝恶意 IP 登陆,代码如下: #!/bin/bash #Auto drop ssh failed IP address #By author jfedu.net 2017 #Define Path variables SEC_FILE=/var/log/secure
IP_ADDR=`awk '{print $0}' /var/log/secure|grep -i "fail"| egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort -nr | uniq -c |awk '$1>=15 {print $2}'` IPTABLE_CONF=/etc/sysconfig/iptables echo cat </dev/null if [ $? -ne 0 ];then sed -i "/lo/a -A INPUT -s $i -m state --state NEW -m tcp -p tcp --dport 22 -j DROP" $IPTABLE_CONF fi done NUM=`find /etc/sysconfig/ -name iptables -a -mmin -1|wc -l` if [ $NUM -eq 1 ];then /etc/init.d/iptables restart fi 1.4 Shell 编程实战 LAMP 一键安装 LAMP 是目前互联网主流 WEB 网站架构,通过源码安装、维护和管理对于单台很轻松,
如果服务器数量多,手工管理就非常困难,基于 Shell 脚本可以更快速的维护 LAMP 架构。 Shell 脚本实现服务器 LAMP 一键源码安装配置,编写思路如下:  脚本的功能,实现安装 LAMP 环境、论坛网站;  Apache 安装配置、MYSQL、PHP 安装;  源码 LAMP 整合配置;  启动数据库,创建数据库并授权;  重启 LAMP 所有服务, 验证访问; Shell 脚本实现服务器 LAMP 一键源码安装配置,代码如下: #!/bin/bash #Auto install LAMP #By author jfedu.net 2017 #Define Path variables #Httpd define path variable H_FILES=httpd-2.2.32.tar.bz2 H_FILES_DIR=httpd-2.2.32 H_URL=http://mirrors.cnnic.cn/apache/httpd/ H_PREFIX=/usr/local/apache2/ #MySQL define path variable M_FILES=mysql-5.5.20.tar.gz M_FILES_DIR=mysql-5.5.20 M_URL=http://down1.chinaunix.net/distfiles/ M_PREFIX=/usr/local/mysql/ #PHP define path variable P_FILES=php-5.3.28.tar.bz2 P_FILES_DIR=php-5.3.28 P_URL=http://mirrors.sohu.com/php/ P_PREFIX=/usr/local/php5/ function httpd_install(){ if [[ "$1" -eq "1" ]];then
分享到:
收藏