Shell 腳本進階2


 1.查詢系統基礎狀況腳本mysql

#!/bin/bash
# 系統狀態查詢腳本
# 輸出系統基本信息
#
# 系統版本 
SYSTEM_VERSION=`cat /etc/redhat-release`
# 主機名
HOSTNAME=`hostname`
# 網卡名稱
DEV="ens32"
# IP地址
IP_ADDR=`ifconfig $DEV | grep -v inet6 | grep inet | awk '{print $2}'`
# MAC地址
MAC_ADDR=`ifconfig $DEV  | awk '/ether/{print $2}'`
# 內核版本
KERNEL_VERSION=`uname -a | awk '{print $3}'`
# CPU版本
CPU_VERSION=`cat /proc/cpuinfo | grep -n '^model name' | awk -F":" '{print $3 }'|sed 's/^ //g'`
# 當前時間
DATE=`date`
# 啓動時間
DATE_START=`date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"`
#
echo -e "\n+---------  $DATE  --------+\n"
echo -e "主機名:\n$HOSTNAME\n"
echo -e "系統版本:\n$SYSTEM_VERSION\n"
echo -e "內核版本:\n$KERNEL_VERSION\n"
echo -e "CPU版本:\n$CPU_VERSION\n"
echo -e "系統IP:\n$DEV $IP_ADDR\n"
echo -e "系統MAC:\n$DEV $MAC_ADDR\n"
echo -e "啓動時間:\n$DATE_START\n"
#---------------------------
# 系統負載
# uptime
#---------------------------
CPU_NUM=`cat /proc/cpuinfo | grep processor | awk -F":" '{print $2}' | wc -l`
Load=`uptime | awk -F"average:" '{print $2}' | awk -F"," '{print "<__  系統負載  __>  -->  ""CPU數量:'"$CPU_NUM"'""\t1分鐘:"$1"\t5分鐘:"$2"\t15分鐘:"$3}'`
echo -e "\n$Load\n"
#---------------------------
# CPU狀態
# vmstat
#---------------------------
CPU_CHECK=`vmstat | awk '{print NR $0}' | awk '/^3/{print "<__  CPU狀態   __>  -->  ""CPU使用:"$14"%\t""CPU空閒:"$16"%"}'`
echo -e "$CPU_CHECK\n"
#---------------------------
# 內存狀態
# free
#---------------------------
MEMORY=`free -mh | awk ' /^Mem/{print "<__  內存狀態  __>  -->  ""內存總量:"$2"\t已用內存:"$3"\t剩餘內存:"$4"\t可用內存:"$7}'`
echo -e "$MEMORY\n"
#--------------------------
# 磁盤使用
# df
#--------------------------
DISK=`df -h | grep -n '/$' | awk '{print "<__  磁盤使用  __>  -->  ""磁盤容量:"$2"\t已用容量:"$3"\t可用容量:"$4}'`
echo -e "$DISK\n"
#---------------------------
# 進程統計
# top
#---------------------------
PROCESS=`top -bn1 | awk '/Tasks:/{print $0}' | awk '{print "<__  進程統計  __>  -->  ""進程總數:"$2"\t運行進程:"$4"\t休眠進程:"$6"\t中止進程:"$8"\t殭屍進程:"$10}'`
echo -e "$PROCESS\n"
#---------------------------
# 磁盤IO使用狀況
# sar
#---------------------------
IO=`sar -b | grep -n '^[^0-9]' | awk '{print NR $0}'| awk '/^2/{print"<__  磁盤讀寫  __>  -->  ""讀/秒:"$5" bytes""\t寫/秒:"$6" bytes"}'`
echo -e "$IO\n"
#---------------------------
# 網卡流量使用狀況
# sar
#---------------------------
NETWORK=`sar -n DEV | grep $DEV | grep -n '^[^0-9]'|  awk '{print "<__  網卡流量  __>  -->  ""網卡名:"$2"\t收包/秒:"$3"\t發包/秒:"$4"\t下載/秒:"$5" Bytes""   上傳/秒:"$6" Bytes"}'`
echo -e "$NETWORK\n"
system_check.sh
[root@localhost shell]# sh system_check.sh 

+---------  2018年 04月 27日 星期五 11:00:55 CST  --------+

主機名:
localhost.localdomain

系統版本:
CentOS Linux release 7.4.1708 (Core) 

內核版本:
3.10.0-693.el7.x86_64

CPU版本:
Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz
Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz

系統IP:
ens32 192.168.1.159

系統MAC:
ens32 00:0c:29:b0:e8:12

啓動時間:
2018-04-19 09:12:48


<__  系統負載  __>  -->  CPU數量:2    1分鐘: 0.12    5分鐘: 0.04    15分鐘: 0.05

<__  CPU狀態   __>  -->  CPU使用:0%    CPU空閒:100%

<__  內存狀態  __>  -->  內存總量:3.7G    已用內存:181M    剩餘內存:2.8G    可用內存:3.2G

<__  磁盤使用  __>  -->  磁盤容量:50G    已用容量:1.3G    可用容量:49G

<__  進程統計  __>  -->  進程總數:116    運行進程:1    休眠進程:115    中止進程:0    殭屍進程:0

<__  磁盤讀寫  __>  -->  讀/秒:0.00 bytes    寫/秒:0.93 bytes

<__  網卡流量  __>  -->  網卡名:ens32    收包/秒:10.74    發包/秒:1.60    下載/秒:0.65 Bytes   上傳/秒:0.10 Bytes
輸出案例

 2.查看目錄下包含子目錄的全部指定靜態文件,測試響應請求時間。sql

#!/bin/bash
# Nginx代理訪問
#Dname="http://192.168.1.10:8081"
# Tomcat代理訪問
Dname="http://192.168.1.10:8080"
# 指定目錄
DIR="/upload/"
function request(){
  list=`ls $DIR`
  cd $DIR
  for i in $list;do
    if test -d $i;then
       DIR=$i
       request $DIR
    else
       if echo $i | grep .png >/dev/null 2>&1 || echo $i | grep .jpg >/dev/null 2>&1;then
          Fname=$i
          URL=`pwd`
          # 求出靜態文件響應時間
          Total=`curl -o /dev/null -s -w '%{time_total}\n' $Dname$URL/$Fname`
          # 求出文件大小
          Filesize=`du -sh $URL/$Fname 2>/dev/null | awk -F' ' '{print $1}'`
          echo -e "資源URL:$URL/$Fname 大小:$Filesize 響應時間:\033[31;31m$Total\033[0m"
       fi
    fi
  done
  cd ../
}

request $DIR
request.sh
資源URL:/upload/app_port/H5/About_us.jpg 大小:60K 響應時間:0.016
資源URL:/upload/org_cover/2018-08-08-2005-32-43/f2394d49adff4382829e289f8b8bdc0e/1.jpg 大小:60K 響應時間:0.015
資源URL:/upload/org_cover/2018-08-11_13-53-46/a35bfc924d464736884eb196dafa3884/首頁Banner-1.jpg 大小:11M 響應時間:0.004
資源URL:/upload/org_cover/2018-08-11_13-55-33/188e03a5122946c8919202b8e5ba8c61/輪播圖——春晚新(1).jpg 大小:1.3M 響應時間:0.004
資源URL:/upload/org_cover/2018-08-11_14-22-58/db213c3b3a3944a3aa64771bc88952e1/2222.png 大小:1.8M 響應時間:0.094
資源URL:/upload/org_cover/2018-08-13_14-11-02/03fe045379c9445fae8bf7f1bdcf7535/無標題1.png 大小:2.6M 響應時間:0.004
資源URL:/upload/org_cover/2018-08-13_14-39-55/2599ba229a94422f9a4401ad30dd53b6/d.png 大小:428K 響應時間:0.040
資源URL:/upload/org_cover/2018-08-13_14-43-04/b27aab0a8be0447596657274698b1a3a/k.jpg 大小:1.6M 響應時間:0.080
資源URL:/upload/org_cover/2018-08-13_20-24-48/2b881550056f4735b183c85f9b904c11/20180806101549.jpg 大小:324K 響應時間:0.034
資源URL:/upload/org_cover/2018-08-22_13-33-55/faa95902d9144d9f95b084d1e8344720/無標題3.png 大小:556K 響應時間:0.004
資源URL:/upload/org_cover/2018-08-29_14-30-26/8b0df630ec0e4bf185383c9a9181c33b/微信圖片_20180820164143.png 大小:36K 響應時間:0.004
資源URL:/upload/org_images/2018-08-11_13-56-43/38596e1b6fd9499cb057972148c6634a/主播招募banner.jpg 大小:200K 響應時間:0.004
資源URL:/upload/org_images/2018-08-11_13-56-43/648db3a1a6874671bd837b33f3271b3f/建黨.jpg 大小:320K 響應時間:0.004
資源URL:/upload/org_images/2018-08-11_13-56-43/6ac903e3a0114dddb57913f114eb6854/首頁Banner-2.jpg 大小:324K 響應時間:0.004
資源URL:/upload/org_images/2018-08-11_13-56-43/6c4aaf4227e04d9991ff2f526e4ea51e/首頁Banner-3.jpg 大小:396K 響應時間:0.004
資源URL:/upload/org_images/2018-08-11_13-56-43/98bc613d55764626a67ae54e3d889988/首頁Banner-1.jpg 大小:11M 響應時間:0.004
資源URL:/upload/org_images/2018-08-11_13-56-43/9cf0130084fe4702a9ad74cf7f4bcb9e/首頁Banner-4.jpg 大小:332K 響應時間:0.004
資源URL:/upload/org_images/2018-08-11_13-56-43/bf34729ef37b474888721b77c8baca3f/網站banner1.jpg 大小:796K 響應時間:0.004
資源URL:/upload/org_images/2018-08-11_13-56-43/dacc1c8f298c4e05af4b3a13c743dcd9/千金答人1.jpg 大小:248K 響應時間:0.004
輸出案例

3.建立Linux回收站、每3天自動清空shell

##############
# 添加自定義命令
# vim /etc/bashrc 
# alias rm='sh /root/changerm.sh'
##############
#!/bin/bash
trash_dir=/trash/`date +%Y%m%d`
if [ ! -d ${trash_dir} ];then
    mkdir -p ${trash_dir}
fi

for i in $*
do
    suffix=`date "+%H%M%S"`
    if [ ! -d "${i}" ]&&[ ! -f "${i}" ];then
       if [[ "${i}" != "-rf" && "${i}" != "-f" ]];then
           echo "[${i}] do not exist"
       fi
    else
       file_name=`basename $i`
       mv ${i} ${trash_dir}/${file_name}_${suffix}_${RANDOM}
       echo "[${i}] delete completed !!!"
    fi
done
changerm.sh
###########
# 添加計劃任務
# crontab -e
# 00 22 * * * sh /root/cleartrash.sh
###########
#!/bin/bash
trashdir=/trash
cd ${trashdir}
# 刪除該目錄下三天以上的文件
find ./ -mtime +3 -exec 'rm' -rf {} \;
cleartrash.sh

4.mysq備份腳本,全量備份,增量備份需手動開啓後在開啓刪除開關vim

#!/bin/bash              
# @author:kevin.xiang    
# create -e              
# 0 0 * * 0 bash /mysql  
##########################
DATA=`date +%Y%m%d%H-%T`
BIN_DIR="/usr/bin/"
BACKUP_DIR="/backup/"
LOG_DIR="/var/log/mariadb/"
DB_IP="localhost"
DB_ROOT="root"
DB_PASSWD="xiangsikai"
# Binary log deletion.  0 on | 1 off 
Flag=1

#-- Full amount of backup
function backup_all() {
  sudo ${BIN_DIR}mysqldump -h${DB_IP} -u${DB_ROOT} -p${DB_PASSWD} --all-databases  > ${BACKUP_DIR}mysqlbackup_${DATA}.sql
  if [ $? == 0  ];then
    sudo ${BIN_DIR}gzip ${BACKUP_DIR}mysqlbackup_${DATA}.sql >/dev/null 2>&1
    echo "${DATA} full backup successful !!!">> ${LOG_DIR}backup.log
  else
    echo "${DATA} full backup failure !!!" >> ${LOG_DIR}backup.log
  fi
}

#-- Incremental of backup
function backup_incremental() {
if [ ${Flag} == 0 ];then
sudo mysql -u${DB_ROOT} -p${DB_PASSWD} -h${DB_IP} << EOF >/dev/null 2>&1
reset master;
flush privileges;
EOF
echo "${DATA} Clean binary file !!!" >> ${LOG_DIR}backup.log
fi
}

#-- Run backup
file_num=`find ${BACKUP_DIR} -name "*.sql.gz" | ${BIN_DIR}wc -l`
if [ ${file_num} -ge 3 ];then
  old_file=`${BIN_DIR}ls -lrt ${BACKUP_DIR} | ${BIN_DIR}awk 'NR==2' | ${BIN_DIR}awk '{print $9}'`
  sudo ${BIN_DIR}rm -rf ${BACKUP_DIR}${old_file} >/dev/null 2>&1
  if [ $? == 0   ];then
    echo "${DATA} Clean ${old_file} file successfully !!!" >> ${LOG_DIR}backup.log
  else
    echo "${DATA} Clean ${old_file} file failure !!!" >> ${LOG_DIR}backup.log
  fi
  backup_all
  backup_incremental
else
  backup_all
  backup_incremental
fi
mysql.sh
相關文章
相關標籤/搜索