#!/bin/bash #本脚本针对 RHEL7.2 或 Centos7.2 #本脚本需要提前准备一个 qcow2 格式的虚拟机模板,名称为/var/lib/libvirt/images /.rh7_template 的虚 拟机模板 #该脚本使用 qemu‐img 命令快速创建快照虚拟机 #脚本使用 sed 修改模板虚拟机的配置文件,将虚拟机名称、UUID、磁盘文件名、MAC 地址 # exit code: # 65 ‐> user input nothing # 66 ‐> user input is not a number # 67 ‐> user input out of range # 68 ‐> vm disk image exists
IMG_DIR=/var/lib/libvirt/images BASEVM=rh7_template read ‐p "Enter VM number: " VMNUM if [ $VMNUM ‐le 9 ];then VMNUM=0$VMNUM fi
if [ ‐z "${VMNUM}" ]; then echo "You must input a number." exit 65 elif [[ ${VMNUM} =~ [a‐z] ]; then echo "You must input a number." exit 66 elif [ ${VMNUM} ‐lt 1 ‐o ${VMNUM} ‐gt 99 ]; then echo "Input out of range" exit 67 fi NEWVM=rh7_node${VMNUM} if [ ‐e $IMG_DIR/${NEWVM}.img ]; then echo "File exists." exit 68 fi echo ‐en "Creating Virtual Machine disk image......\t" qemu‐img create ‐f qcow2 ‐b $IMG_DIR/.${BASEVM}.img $IMG_DIR/${NEWVM}.img &> /dev/null echo ‐e "\e[32;1m[OK]\e[0m" #virsh dumpxml ${BASEVM} > /tmp/myvm.xml cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml sed ‐i "/<name>${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml sed ‐i "/uuid/s/<uuid>.*<\/uuid>/<uuid>$(uuidgen)<\/uuid>/" /tmp/myvm.xml sed ‐i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml #修改 MAC 地址,本例使用的是常量,每位使用该脚本的用户需要根据实际情况修改这些值 #最好这里可以使用便利,这样更适合于批量操作,可以克隆更多虚拟机 sed ‐i "/mac /s/a1/0c/" /tmp/myvm.xml echo ‐en "Defining new virtual machine......\t\t" virsh define /tmp/myvm.xml &> /dev/null echo ‐e "\e[32;1m[OK]\e[0m"
24. 编写一个点名器脚本
1 2 3 4 5 6 7 8 9 10 11 12
#!/bin/bash #该脚本,需要提前准备一个 user.txt 文件 #该文件中需要包含所有姓名的信息,一行一个姓名,脚本每次随机显示一个姓名 while : do #统计 user 文件中有多少用户 line=`cat user.txt |wc ‐l` num=$[RANDOM%line+1] sed ‐n "${num}p" user.txt sleep 0.2 clear done
25. 查看有多少远程的 IP 在连接本机(不管是通过 ssh 还是 web 还是 ftp 都统计)
1 2 3 4 5 6 7 8
#!/bin/bash #使用 netstat ‐atn 可以查看本机所有连接的状态,‐a 查看所有,‐t 仅显示 tcp 连接的信息,‐n 数字格式显示 # Local Address(第四列是本机的 IP 和端口信息) #Foreign Address(第五列是远程主机的 IP 和端口信息) #使用 awk 命令仅显示第 5 列数据,再显示第 1 列 IP 地址的信息 #sort 可以按数字大小排序,最后使用 uniq 将多余重复的删除,并统计重复的次数
#!/bin/bash #使用 ls 递归显示所有,再判断是否为文件,如果是文件则计数器加 1 cd /var/log sum=0 for i in `ls ‐r *` do if [ ‐f $i ];then let sum++ echo "文件名:$i" fi done echo "总文件数量为:$sum"
#!/bin/bash #本脚本每 2 秒检测一次 MySQL 并发连接数,可以将本脚本设置为开机启动脚本,或在特定时间段执行 #以满足对 MySQL 数据库的监控需求,查看 MySQL 连接是否正常 #本案例中的用户名和密码需要根据实际情况修改后方可使用 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
40. 根据 md5 校验码,检测文件是否被修改
1 2 3 4 5 6 7 8 9
#!/bin/bash #本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件 #本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次 #将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件 for i in $(ls /etc/*.conf) do md5sum "$i" >> /var/log/conf_file.log done