shell脚本案例
2021/9/22 7:10:10
本文主要是介绍shell脚本案例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 一.服务器系统配置初始化
- 二.发送告警邮件
- 三.批量创建100个用户并设置密码
- 四.一键查看服务器利用率
一.服务器系统配置初始化
背景:新购买10台服务器并已安装linux操作
需求:
1)设置时区并同步时间
2)禁用selinux
3)清空防火墙默认策略
4)历史命令显示操作时间
5)禁止root远程登录
6)禁止定时任务发送邮件
7)设置最大打开文件数
8)减少Swap使用
9)系统内核参数优化
10)安装系统性能分析工具及其他
[root@shell ~]# mkdir shell_scripts [root@shell ~]# cd shell_scripts/ [root@shell shell_scripts]# vim 1.sh #!/bin/bash #设置时区并同步时间 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime if ! crontab -l |grep ntpdate &>/dev/null ; then (echo " * 1 * * * ntpdate time.windows.com >/dev/null 2>&1";crontab -l)|crontab fi #禁用selinux sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config #关闭防火墙 if egrep "7.[0-9]" /etc/redhat-release &>/dev/null; then systemctl stop firewalld systemctl disable firewalld elif egrep "6.[0-9]" /etc/redhat-release &>/dev/null; then service iptables stop chkconfig iptables off fi #历史命令显示操作时间 if ! grep HISTTIMEFORMAT /etc/bashrc; then echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >>/etc/bashrc fi # SSH超时时间 if ! grep "TMOUT=600" /etc/profile &>/dev/null; then echo "export TMOUT=600" >> /etc/profile fi #禁止root远程登录(按公司规定) sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config #禁止定时任务向发送邮件 sed -i 's/^MAILTO=root/MAILTO=""/' /etc/crontab #设置最大打开文件数 if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then cat >> /etc/security/limits.conf << EOF * soft nofile 65535 * hard nofile 65535 EOF fi #系统内核优化 cat >>/etc/sysctl.conf <<EOF net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.ip_local_port_range = 4000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_max_tw_buckets = 36000 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.core.somaxconn = 16384 net.core.netdev_max_backlog = 16384 net.ipv4.tcp_max_orphans = 16384 net.ipv4.ip_forward = 1 EOF #减少SWAP使用 echo "0" > /proc/sys/vm/swappiness #安装系统性能分析工具及其他 yum install -y gcc make autoconf vim sysstat net-tools iostat iotp lrzse #如果有一些语法错误,可以先转换unix [root@shell shell_scripts]# yum install -y dos2unix [root@shell shell_scripts]# dos2unix 1.sh [root@shell shell_scripts]# ./1.sh [root@shell shell_scripts]# source /etc/profile
二.发送告警邮件
外部邮箱服务器
[root@shell shell_scripts]# yum install mailx -y [root@shell shell_scripts]# vim /etc/mail.rc ... ...末尾添加 set from=cdaneee@163.com smtp=smtp.163.com set smtp-auth-user=cdaneee@163.com smtp-auth-password=caodan20! set smtp-auth=login [root@shell shell_scripts]# echo "this is test mail."|mail -s "monitor" 757294876@qq.com
三.批量创建100个用户并设置密码
[root@shell shell_scripts]# cat 3.sh #!/bin/bash USER_LIST=$@ USER_FILE=./user.info for USER in $USER_LIST; do if ! id $USER &>/dev/null; then PASS=$(echo $RANDOM |md5sum |cut -c 1-8) useradd $USER echo $PASS | passwd --stdin $USER &>/dev/null echo "$USER $PASS" >> $USER_FILE echo "$USER User create sucessful!" else echo "$USER User already exists!" fi done [root@shell shell_scripts]# sh 3.sh zhangsan lisi Changing password for user zhangsan. passwd: all authentication tokens updated successfully. zhangsan User create sucessful! Changing password for user lisi. passwd: all authentication tokens updated successfully. lisi User create sucessful! [root@shell shell_scripts]# sh 3.sh zhangsan lisi zhangsan User already exists! lisi User already exists!
四.一键查看服务器利用率
cpu,内存,硬盘,tcp连接状态,
[root@shell shell_scripts]# cat 4.sh #!/bin/bash function cpu() { util=$(vmstat |awk '{if(NR==3)print $13+$14}') iowait=$(vmstat |awk '{if(NR==3)print $16}') echo "CPU-使用率:${util}%,等待磁盘IO响应使用率:${iowait}%" } function memory() { total=$(free -m |awk '{if(NR==2)printf "%.1f",$2/1024}') used=$(free -m |awk '{if(NR==2)printf "%.1f",($2-$NF)/1024}') available=$(free -m |awk '{if(NR==2)printf "%.1f",$NF/1024}') echo "内存-总大小:${total}G,已使用:${used}G,剩余:${available}G" } disk() { fs=$(df -h |awk '/^\/dev/{print $1}') for p in $fs; do mounted=$(df -h |awk -v p=$p '$1==p{print $NF}') size=$(df -h |awk -v p=$p '$1==p{print $2}') used=$(df -h |awk -v p=$p '$1==p{print $3}') used_percent=$(df -h |awk -v p=$p '$1==p{print $5}') echo "硬盘-挂载点:$mounted,总大小:$size,已使用:$used,使用率:$used_percent" done } tcp_status() { summary=$(netstat -antp |awk '{a[$6]++}END{for(i in a)printf i":"a[i]" "}') echo "TCP连接状态-$summary" } cpu memory disk tcp_status [root@shell shell_scripts]# chmod +x 4.sh [root@shell shell_scripts]# sh 4.sh CPU-使用率:2%,等待磁盘IO响应使用率:0% 内存-总大小:1.9G,已使用:1.2G,剩余:0.7G 硬盘-挂载点:/,总大小:18G,已使用:12G,使用率:64% 硬盘-挂载点:/home,总大小:1014M,已使用:33M,使用率:4% TCP连接状态-LISTEN:11 ESTABLISHED:2 established):1 Foreign:1
这篇关于shell脚本案例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南