shell脚本
技巧:
xshell自动脚本进入日志查看
cd /data/logs file="log_"`date "+%Y-%m-%d"`".txt" tail -f $file
IP筛选
cat /etc/httpd/logs/access_log |awk '{print $1}'|sort |uniq -c |sort -nr |head -100
日志删除脚本
删除创建60天以上的日志
find ./ -mtime +60|xargs rm -f
N=7
find . -type f -mtime +7 | grep -E "\.log\.20[0-9]{2}-[0-1][0-9]-[0-3][0-9].gz$" |xargs rm -f
+N表示N天以前
-N表示N天以内
atime是指access time,即文件被读取或者执行的时间
ctime即change time文件状态改变时间,指文件的i结点被修改的时间,如通过chmod修改文件属性
mtime即modify time,指文件内容被修改的时间。
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
场景脚本
1.提取系统信息
2.获取操作系统运行状态
3.分析应用状态
4.应用日志分析
第一章vim编辑器设置(etc/vimrc或者是用户家目录下.vimrc)
临时设置
末行模式输入 命令 esc:
永久设置(修改vimrc文件)
可用命令:
syntax off/on 语法高亮
set number/nonumber 开启或关闭行号
set autoindent set cindent 自动缩进设置
设置文件头(在vimrc中设置)
autocmd BufNewFile *.py,*.sh, exec ":call SetTitle()"
let $author_name = "mao"
let $author_email = "dd@163.com"
# 命名的函数首字母必须大写
func SetTitle()
if &filetype == 'sh'
call setline(1,"\####################################################")
call append(line("."), "\# File Name:".expand("%"))
call append(line(".")+1, "\# Author:".$author_name)
call append(line(".")+2, "\# Mail:".$author_email)
call append(line(".")+3, "\# Created time: ".strftime("%c"))
call append(line(".")+4, "\# =================================================")
call append(line(".")+5, "\#!/bin/bash")
call append(line(".")+6, "")
else
call setline(1,"\############################################################")
call append(line(".")+1,"\# Author:".$author_name)
call append(line(".")+2,"\# Mail;:".$author_email)
call append(line(".")+3,"\# Created time:".strftime("%c"))
call append(line(".")+4,"\# =================================================")
call append(line(".")+5, "\#!/usr/bin/python")
call append(line(".")+6, "")
endif
autocmd BufNewFile * normal G
endfunc
高亮显示
echo -e 终端颜色+ 显示内容+ 结束后的颜色
echo -e “\e[1;30m]” "hello world" $(tput sgr0)
echo -e "\e[1;24m hello world \e[1;0m" 开始颜色+内容+闭合颜色
shell控制脚本
monitor_man.sh控制脚本
#!/bin/bash
resettem=$(tput sgr0)
declare -A ssharray
i=0
numbers=""
for script_file in `ls -I "monitor_man.sh" ./`
do
echo -e "\e[1;35m" "The Script:" ${i} '==>'${resettem} ${script_file}
numbners=[$i]=${script_file}
numbers="${numbers} | ${i}"
i=$((i+1))
done
while true
do
read -p "please input a number [ ${numbers}]:" execshell
if [[ ! ${execshell} =~ ^[0-9]+ ]];then
exit o
fi
/bin/sh ./${ssharry[$execshell]}
done
system_monitor.sh
############monitor########################
clear
if [[ $# -eq 0 ]]
then
#define variable reset_terminal
reset_terminal=$(tput sgr0)
#check os type
os=$(uname -o)
echo -e '\E[32m'"operating system type :"$reset_terminal $os
#check os release versioin and name
os_name=$(cat /etc/issue|grep -e "Server")
echo -e '\E[32m'"os release versioin and name:"$reset_terminal $os_name
#check architecture
architecture=$(uname -m)
echo -e '\E[32m'"architecture:"$reset_terminal $architecture
#check kernel release
kernelrelease=$(uname -r)
echo -e '\E[32m'"kernel release:"$reset_terminal $kernelrelease
#check hostname $HOSTNAME
#check internal ip
internal=$(hostname -I)
echo -e '\E[32m'"internal ip:"$reset_terminal $internal
#check external ip
externalip=$(curl -s http://ipecho.net/plain)
echo -e '\E[32m'"external ip:"$reset_terminal $externalip
#check dns
nameservers=$( cat /etc/resolv.conf |grep -E "\<nameserver[ ]+"|awk '{print $NF}')
echo -e '\E[32m'"dns:"$reset_terminal $nameservers
#check if connected to internet or not
ping -c 2 www.baidu.com &>/dev/null && echo "internet:connected" || echo internet:disconnected
#check logged in users
who>/tmp/who
echo -e '\E[32m' "Logged in users" && cat /tmp/who
rm -f /tmp/who
##############analyse###########################
system_mem_usages=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024}' /proc/meminfo)
apps_mem_usages=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}/^Cached/{cached=$2}/Buffers/{buffers=$2}END{print (total-free-cached-buffers)/1024}' /proc/meminfo)
echo -e '\E[32m'"system memuserages:" $reset_terminal $system_mem_usages
echo -e '\E[32m'"apps memuserages:" $reset_terminal $apps_mem_usages
loadaverage=$(top -n 1 -b|grep "load average:"|awk '{print $10 $11 $12}')
echo -e '\E[32m'"load averages:" $reset_terminal $loadaverage
diskaverage=$(df -hP|grep -vE 'Filesystem|tmpfs'|awk '{print $1 " " $5}')
echo -e '\E[32m'"disk averages:" $reset_terminal $diskaverage
fi
check_http_log.sh
系统日志:
var/log/messages 系统日志
var/log/secure 认证安全
var/log/dmesg 系统启动相关
应用服务日志:
access.log nginx访问日志
mysql.log mysql日志
xferlog ftp服务
程序脚本日志:
开发语言:c java php
框架:django mvc serlet
脚本语言:shell python
check_server.sh
Resettem=$(tput sgr0)
Check_Nginx_Server()
Nginxserver='http://127.0.0.1'
Mysql_Slave_server='12.2.1..2'
{
Status_code=$(curl -m 5 -s -w %{http_code} ${Nginxserver} -0 /dev/null)
if [ $Status_cod -eq 000 -o $Status_cod -ge 500 ];then
echo -e '\E[32m'"check http server error! Response status code " $Resettem $Status_code
else
Http_content=$(curl -s ${Nginxserver})
echo -e '\E[32m' "check http sercer success" $Resettem $Http_content
fi
}
Check_Mysql_Server()
{
nc -z -w2 ${Mysql_Slave_server} 3306 &>/dev/null
if [ $? -eq 0 ];then
mysql -u{$Mysql_User} -p${Mysql_Pass} -h${Mysql_Slave_Server} -e "show slave status\G "|grep "Slave_IO_Running"|awk '{if($2!="Yse"){print "Slave thread not running!";exit 1}}'
if [ $? -eq 0 ];then
mysql -u{$Mysql_User} -p${Mysql_Pass} -h${Mysql_Slave_Server} -e "show slave status\G "|grep "Second_Behind_Master"
fi
else
echo "connecte mysql server not successed"
fi
}
网络命令:ping nslookup(检查dns) nm-tool tracertroute telnet nc (检查路由网络端口) curl (http响应值是否成功) dig
监控进程:ps netstat pgrep
客户端工具:mysql ab mongo php jstack
第三方工具包:nginxstatus nagios-libexec

浙公网安备 33010602011771号