案例十部署LNMP网站平台
#nginx配置文件#vim nginx.conf user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;error_log logs/error.log info;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' ...
案例九批量主机执行命令
#expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。#spawn启动指定进程---expect获取指定关键字---send向指定程序发送指定字符---执行完成退出.#expect常用命令总结:spawn 交互程序开始后面跟命令或者指定程序expect 获取匹配信息匹配成功则执行expect后面的程序动作send exp_send 用于发送指定的字符串信息exp_continue 在expect中多次匹配就需要用到send_user 用来打印输出 相当于shell中的echoexit 退出expect脚本eof expect执行结束 退出set 定义变量puts 输出变量set timeout 设置超时时间#安装expect工具yum -y install expect #存放远程登录IP,用 ...
案例八批量检查网站是否异常
#curl是一个命令行访问URL的工具-v 详细输出,包含请求和响应的首部-o test 将指定curl返回保存为test文件,内容从html/jpg到各种MIME类型文件-O 把输出写到该文件中,保留远程文件的文件名-C 在保存文件时进行续传-x ip:port 指定使用的http代理-c <file> 保存服务器的cookie文件-H <header:value> 为HTTP请求设置任意header及值-L 跟随重定向-S 显示错误信息-s 静默模式,不输出任何信息-G 以get的方式发送数据-f 连接失败是不显示http错误-d 以post方式传送数据-w 什么输出完成后curl -o /dev/null -s -w "%{http_code}" http://www.baidu.com
#!/bin/bash #遍历多个urlURL_LIST="www.baidu.com www.ctnrs.com"for URL in $URL_LIST; do#失败url的次数进行统计 FA ...
案例七监控100台服务器磁盘利用率
#ssh远程登录查看磁盘ssh root@192.168.1.3 "df -h"#实现免密登录ssh-keygen#在当前用户的目录下生成一个密钥对cat /root/.ssh/#将公钥拷贝到要远程免密登录的机器上ssh-copy-id root@192.168.1.3#拷贝过去这样就可以免密登录了ssh -i /root/.ssh/id_rsa root@192.168.1.3#存放远程登录IP,用户,端口的一个文件,从这里调取vim host.info192.168.1.3 root 22
#!/bin/bash#存放远程登录IP,用户,端口的一个文件,从这里调取HOST_INFO=host.info#^[^#]:除了带#的,其余都遍历,例如某台机器故障了;#解释:循环遍历host.info文件中的第一列值(除#号开头的)for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do#解释:判断当前ip是不是host.info文件中第一列的值,如果是打印这个值对应的第二列的值 ...
案例六查看网卡实时流量
#!/bin/bash#$1:表示变量传参nic=$1#-e表示对于转义字符按相应的方式处理,如果不加-e那么对于转义字符会按普通字符处理。echo -e " In ------ Out"#死循环while true; do#$0~:表示某一行;$nic:表示匹配包含这个值的行;$2:第二列#解释:打印包含$nic值的这一行的第二列 old_in=$(awk '$0~"'$nic'"{print $2}' /proc/net/dev)#解释:打印包含$nic值的这一行的第十列 old_out=$(awk '$0~"'$nic'"{print $10}' /proc/net/dev)#休眠一秒 sleep 1 new_in=$(awk '$0~"'$nic'"{print $2}' /proc/net/de ...
案例五找出占用cpu和内存过高的进程
#!/bin/bash echo "----------------cpu top 10---------------"#解释: ps -o:输出指定的字段; -e:列出所有的进程;--sort:对pcpu字段进行排序-降序ps -eo pid,pcpu,pmem,args --sort=-pcpu |head -n 10echo "----------------memory top 10---------------"ps -eo pid,pcpu,pmem,args --sort=-pmem |head -n 10
案例四一键查看服务器利用率
#!/bin/bash #function是一个函数,可以省略不写,后面是函数名;function cpu() {#use变量名,vmstat命令是查看cpu信息的,NR代表的是行,$1,2..代表的是列;#解释:判断NR是不是第三行,如果是打印第十三列和第十四列的值,以此类推; use=$(vmstat |awk '{if (NR==3)print $13+$14}') iowait=$(vmstat |awk '{if (NR==3)print $16}') user=$(vmstat |awk '{if (NR==3)print $13}') sys=$(vmstat |awk '{if (NR==3)print $14}') echo "cpu - 使用率: ${user}% , 等待磁盘IO响应使用率: ${iowait}% "}func ...
案例三批量创建100个用户并设置密码
解释:
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]
主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除。
$RANDOM #获取随机数
#!/bin/bashUSER_LIST=$@USER_FILE=/root/user.txtfor USER in $USER_LIST; do if ! id $USER &>/dev/null; then PASS=$(echo $RANDOM |md5sum |cut -c 1-8) useradd $USER ...
案例二发送告警邮件
#mailx是一个邮件发送程序,像 sendmail postfixyum install mailx#编辑mail配置文件vi /etc/mail.rc set from=123456@sina.com smtp=smtp.sina.comset smtp-auth-user=123456@sina.com smtp-auth-password=b78e6f39cc4699adset smtp-auth=login#发送邮件 #例子#mail -s "标题" 邮件地址 < 要发送的文件#mail -s "hello world" 623799533@qq.com </etc/hosts#echo "正文"|mail -s "hello world" 623799533@qq.comecho "this is liuzhe." |mail -s "monitor" 123456@sina.com
#!/bin/bash#mailx是一个邮件发送程序y ...
案例一服务器系统配置初始化
背景:新购买10台服务器并已安装Linux系统
需求:
1.设置时区并同步时间
2.禁用selinux
3.清空防火墙默认策略
4.历史命令显示操作时间
5.禁止root远程登陆
6.禁止定时任务发送邮件
7.设置最大打开文件数
8.减少swap使用
9.系统内核参数优化
10.安装系统性能分析工具及其他
#!/bin/bash#配置阿里云yum源cd /etc/yum.repos.d/mkdir centosmv /etc/yum.repos.d/CentOS-* centoswget -O /etc/yum.repos.d/CentOS-Base.repo yum clean allyum makecache# 设置时区并同步时间timedatectl set-timezone Asia/Shanghaihttp://mirrors.aliyun.com/repo/Centos-7.repoln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeif ! crontab -l |grep ntpdate &>/dev ...