服务器运维必备shell脚本

我抓不住风 2019-09-02 09:34:44
自动创建虚拟机 #!/bin/bash read -p '请输入后端盘路径' BACK_DISK cd /var/lib/libvirt/images/ #cd到虚拟机磁盘存放目录 qemu-img create -f qcow2 -b $BACK_DISK ${1}.img 20G #创建磁盘镜像;.node_base.qcow2(后端盘) sed "s,node_base,$1," .node_base.xml > /etc/libvirt/qemu/${1}.xml #创建对应xml文件 virsh define /etc/libvirt/qemu/${1}.xml #定义xml文件 virsh start $1 #启动虚拟机 定期备份/var/log日志文件 #!/bin/bash tar -zcf log-`date +%Y%m%d`.tar.gz /var/log 系统设定:crontab -e 00 03 * * 5 /root/脚本名 实时监控本机内存和硬盘空间,发送邮件进行警报 #!/bin/bash while : do DISK_SIZE=$(df /|awk '/\//{print $4}') #调用本机可用磁盘空间 MEM_SIZE=$(free|awk '/Mem/{print $4}') #调用本机可用内存 if [ $DISK_SIZE -le 512000 -a $MEM_SIZE -le 1024000 ];then mail -s '警报' root << EOF 资源不足,请及时充值. EOF fi sleep 1 done 检测主机开机与关机状态 #!/bin/bash for i in {1..254} do ping -c 2 -i 0.3 -W 1 192.168.4.$i &> /dev/null if [ $? -eq 0 ];then echo "192.168.4.$i is up" else echo "192.168.4.$i is down" fi done 实时显示eth0网卡发送与接收的数据包流量 #!/bin/bash while : do echo "eth0网卡流量信息如下:" ifconfig eth0 | grep "RX pack" | awk '{print $5}' #接收的数据流量包 ifconfig eth0 | grep "TX pack" | awk '{print $5}' #发送的数据流量包 sleep 1 #每秒刷新一次 done 使用用户列表文件创建用户且初始密码为123456 #!/bin/bash #$1为存放用户列表的文件 for i in `cat $1` do useradd $i echo 123456 | passwd --stdin $i &> /dev/null done 显示连接本机的远程ip #!/bin/bash netstat -atn | awk 'NR>2{print $5}' | awk '{print $1}' | sort -rn | uniq -c 统计一定时间段内所有访问Apache服务器的的请求个数 #!/bin/bash awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"' /var/log/httpd/access_log |wc -l' 统计一定时间段内所有访问Apache服务器的客户端ip #!/bin/bash awk -F "[/:]" '$7":"$8>="13:30" && $7":"$8<="14:30"{print $1}' /var/log/httpd/access_log 统计每个远程ip访问了本机Apache几次 #!/bin/bash awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log 切割Nginx日志文件 #!/bin/bash logs_path="/usr/local/nginx/logs" mv ${logs_path}access.log ${logs_path}access_$(date +%Y%m%d).log lill -USER1 $(cat /usr/local/nginx/logs/nginx.pid) linux命令行:crontab -e 0 1 * * * /data/scripts/脚本名 检测mysql数据库连接数量 #!/bin/bash log_file="/var/log/mysql_count.log" user=root passwd=123456 while : do sleep 2 count=`mysqladmin -u"$user" -p"$passwd" status | awk '{print $4}'` echo "`date +%Y%m%d` 并发连接数为:${count}." >> $log_file done 非交互式生成SSH秘钥文件 #!/bin/bash rm -rf ~/.ssh/id_rsa* ssh-keygen -t RSA -N '' -f ~/.ssh/id_rsa 循环测试用户名与密码是否正确 #!/bin/bash for i in {1..3} do read -p "请输入用户名" user read -p "请输入密码" pass if [ "$user" == 'tom' -a "$pass" == '123456' ];then echo "登陆成功" exit else echo "请重新输入用户名及密码" fi done echo "登录失败" 列出本机可登陆用户的密码 #!/bin/bash user=$(awk -F: '/bash$/{print $1}' /etc/passwd) for i in $user do awk -F: -v x=$i '$1==x{print $1,$2}' /etc/shadow done 统计linux进程相关数量信息 #!/bin/bash running=0 sleeping=0 stoped=0 zombie=0 #在 proc 目录下所有以数字开始的都是当前计算机正在运行的进程的进程 PID #每个 PID 编号的目录下记录有该进程相关的信息 for pid in `ls /proc/[1-9]*` do procs=$[procs+1] stat=$(awk '{print $3}' $pid/stat) #每个 pid 目录下都有一个 stat 文件,该文件的第 3 列是该进程的状态信息 case $stat in R) running=$[running+1];; T) stoped=$[stoped+1];; S) sleeping=$[sleeping+1];; Z) zombie=$[zombie+1];; esac done echo "进程统计信息如下" echo "总进程数量为:$procs" echo "Running 进程数为:$running" echo "Stoped 进程数为:$stoped" echo "Sleeping 进程数为:$sleeping" echo "Zombie 进程数为:$zombie" 使用脚本开启关闭虚拟机 #!/bin/bash #脚本通过调用 virsh 命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt-client 软件包 #$1 是脚本的第 1 个参数,$2 是脚本的第 2 个参数 #第 1 个参数是你希望对虚拟机进行的操作指令,第 2 个参数是虚拟机名称 case $1 in list) virsh list --all;; start) virsh start $2;; stop) virsh destroy $2;; enable) virsh autostart $2;; disable) virsh autostart --disable $2;; *) echo "Usage:$0 list" echo "Usage:$0 [start|stop|enable|disable] VM_name" cat << EOF list 显示虚拟机列表 start 启动虚拟机 stop 关闭虚拟机 enable 设置虚拟机为开机自启 disable 关闭虚拟机开机自启功能 EOF;; esac 不登录虚拟机,修改其网卡ip地址 #!/bin/bash #脚本在不登陆虚拟机的情况下,修改虚拟机的 IP 地址信息;在某些环境下,虚拟机没有 IP 或 IP 地址与真实主机不在一个网段;真实主机在没有 virt-manger 图形的情况下,远程连接虚拟机很麻烦.该脚本可以解决类似的问题. read -p "请输入虚拟机名称:" name if virsh domstate $name | grep -q running ;then echo "修改虚拟机网卡数据,需要关闭虚拟机" virsh destroy $name fi mountpoint="/media/virtimage" [ ! -d $mountpoint ]&& mkdir $mountpoint guestmount -d $name -i $mountpoint read -p "请输入需要修改的网卡名称:" dev read -p "请输入 IP 地址:" addr #判断原本网卡配置文件中是否有 IP 地址,有,就修改该 IP,没有,就添加一个新的 IP 地址 if grep -q "IPADDR" $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev ;then sed -i "/IPADDR/s/=.*/=$addr/" $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev else echo "IPADDR=$addr" >> $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev fi 破解虚拟机密码 #!/bin/bash read -p "请输入虚拟机名称:" name if virsh domstate $name |grep -q running ;then echo "破解,需要关闭虚拟机" virsh destroy $name fi mountpoint="/media/virtimage" [ ! -d $mountpoint ]&& mkdir $mountpoint guestmount -d $name -i $mountpoint #将 passwd 中密码占位符号 x 删除,该账户即可实现无密码登陆系统 sed -i "/^root/s/x//" $mountpoint/etc/passwd
...全文
289 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,092

社区成员

发帖
与我相关
我的任务
社区描述
云计算服务器、网络、虚拟化相关讨论
社区管理员
  • 服务器
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧