一、 提取Linux操作系统信息

二、 获取操作系统运行状态

三、 分析应用状态

四、 应用日志分析

第一章:VIM编辑器设置

一、语法高亮

    syntax on/off

二、显示行号

set number

set nonumber关闭行号

三、自动缩近

set autoindent

set cindent

四、自动加入文件头

autocmd 即“自动命令”,在发生某些事件时自动执行,类似于钩子函数。

BufNewFile 表示编辑一个新的文件

脚本内容如下:

autocmd BufNewFile *.sh, exec ":call SetTitle()"

let $author_name = "zm"

let $author_email="xxxxxx@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("."),"\# 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,"\#!/usr/bin/python")

call append(line(".")+6,"")

endif

autocmd BufNewFile * normal G        #自动将光标定位到末尾

endfunc

 

第二章:Shell高亮显示

基本格式:echo -e 终端颜色 + 显示内容 + 结束后的颜色

例如:echo -e "\e[1;30m Who am I ~ \e[1;35m"

1. echo -e 表示改变终端颜色

2. "\e[输出内容的颜色 输出内容 \e输出结束后的颜色"

3. [1;30m 中,1表示开启颜色,30m是颜色参数

4. $(tput sgr0)表示回到终端默认的初始颜色

一、场景脚本结构

二、monitor_man.sh的实现

扩展知识:Shell中的关联数组

普通数组:只能使用整数索引

关联数组:可以使用字符串作为数组索引

declare -A ass_array1           #申明关联数组变量

ass_array1[index1]=pear         #使用关联数组

 

脚本内容如下:

#!/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}

       i=$ ((i+1))

done

 

脚本内容如下:

#!/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}

grep -E “^\#Program function” ${script_file}       #打印功能注释

        ssharray[$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 0

        fi

        /bin/sh ./${ssharray[$execshell]}

done

 

第三章:系统信息及运行状态获取

一、system_monitor.sh功能

功能一、提取操作系统信息(内核、系统版本、网络地址等)

功能二、分析系统的运行状态(CPU负载、内存及磁盘使用率等)

二、system_monitor.sh的实现功能一

#!/bin/bash

#

clear

if [[ $# -eq 0 ]] ;then

#Define Variable (定义变量)reset_terminal

reset_terminal=$(tput sgr0)

##########################功能一###########################

#检查系统类型

os=$(uname -o)

echo -e '\E[36m'"Operating System Type: " $reset_terminal $os

#检查系统版本和名称

#grep -e 指定字符串作为查找文件内容的范本样式

os_name=$(cat /etc/issue | grep -e "Server")

echo -e '\E[36m'"Check OS Release Version and Name: " $reset_terminal $os_name       

#检查CPU体系结构

architecture=$(uname -m)

echo -e '\E[36m'"Check Architecture: " $reset_terminal $architecture

#检查内核版本

kernelrelease=$(uname -r)

echo -e '\E[36m'"Check Kernel Release: " $reset_terminal $kernerrelease

#检查主机名:echo $HOSTNAME

hostname=$(uname -n)

echo -e '\E[36m'"Check Hostname: " $reset_terminal $hostname

#检查内网IP

internalip=$(hostname -I)

echo -e '\E[36m'"Check Internal IP: " $reset_terminal $internalip

#检查公网IP(curl ifconfig.me)

externalip=$(curl -s http://ipecho.net/plain)

echo -e '\E[36m'"Check External IP: " $reset_terminal $externalip

#检查DNS

nameservers=$(cat /etc/resolv.conf | grep -E "\<nameserver[ ]+" | awk '{print $NF}')

echo -e '\E[36m'"Check DNS: " $reset_terminal $nameservers

#检查网络状况

ping -c 2 baidu.com &>/dev/null && echo "Internet:Connected" || echo "Internet:Disconnected"

#检查用户登录

who>/tmp/who

echo -e '\E[36m' "Logged In Users" $reset_terminal && cat /tmp/who

rm -f /tmp/who

##########################功能二###########################

#操作系统内存使用

system_mem_usages=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024}' /proc/meminfo)

#操作系统应用内存使用

app_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'"Operating System Memuserages :" $reset_terminal $system_mem_usages MB

        echo -e '\E[32m'"Operating System App Memuserages :" $reset_terminal $app_mem_usages MB

#操作系统负载情况

loadaverage=$( top -n 1 -b | grep "load average:" | awk '{print $12 $13 $14}')

        echo -e '\E[32m'"Operating System Load Averages :" $reset_terminal $loadaverage

#操作系统磁盘容量使用情况

diskaveage=$(df -hP | grep -vE 'Filesystem | tmpfs' | awk '{print $1 " " $5}')

 

        echo -e '\E[32m'"Operating System Disk Averages :" $reset_terminal $diskaveage

fi

三、扩展知识

1. cat /proc/meminfo 目录下可以看系统监控信息

2. awk执行中不能用echo,要用print

3. awk中的变量数值可以直接计算,不需要加$(),而且计算准确到浮点型

4. awk '/abc/{执行动作一}' 文件名: 指提取含有abc字符串的行,然后执行后面的动作

5. 注意在/proc/meminfo下截取"cached"发现结果有两个,要注意筛选

[root@localhost ~]# cat /proc/meminfo | grep -E "^Cached"

Cached:           469732 kB

 

第四章:ngnix和mysql应用状态分析

一、check_server.sh的实现

(1)监控nginx脚本

#!/bin/bash

Resettem=$(tput sgr0)

#nginx地址赋予给变量

Nginxserver='http://x.x.x.x/nginx_status'

#Mysql从库ip地址赋予给变量

Mysql_Slave_Server='从库IP地址'

Mysql_User='从库用户名'

Mysql_Pass='从库用户名密码'

 

Check_Nginx_Server()

{

Status_Code=$(curl -m 5 -s -w %{http_code} ${Nginxserver} -o /dev/null)

if [ $Status_Code -eq 000 -o $Status_Code -ge 500 ]

then

echo -e '\E[32m' "Check http server error! Response status code is" $Resettem $Status_code

else

Http_content=$(curl -s ${Nginxserver})

echo -e '\E[32m' "Check http server ok! \n" $Resettem $Http_content

fi

}

 

Check_Mysql_Server()

{

nc -z -w2 ${Mysql_Slave_Server} 3306 &>/dev/null

echo -e '\E[32m'"The connnections to mysql server succeeded! \n" $Resettem

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 !="Yes"){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 "Seconds_Behind_Master"

fi

else

echo "Connect Mysql Slave Server not succeeded"

fi

}

Check_Nginx_Server

Check_Mysql_Server

 

(2)利用shell监控mysql

1、搭建主从复制状态

2、基于mysql客户端连接,获取主从复制状态

mysql>show slave status\G;

                   Slave_IO_Running-IO线程是否有连接到主服务器上

                   Seconds_Behind_Master-主从同步的延时时间

 

 

第五章:应用日志分析

一、常见系统日志文件

1、系统日志

/var/log/messages   //系统主日志文件

/var/log/secure     //认证、安全

/var/log/dmesg    //和系统启动有关

2、应用服务

access.log         //nginx访问日志

mysqld.log       //mysql运行日志

xferlog         //和访问FTP服务器相关

3、程序脚本

开发语言:c、c++、java、php

框架:Django、MVC、Servlet

脚本语言:Shell、Python

二、nginx的log_format介绍

$remote_addr 是指IP,

[$time_local]是当下时间,

$request是指访问的URL,

$status是状态,

$body_bytes_send是发送客户端字节数,

$Http_refer是指上一级页面的链接,

$Http_user_agent是URL的头,

$Http_x_forwarded_for是指真实的IP

三、http状态码介绍

1** 信息,服务器收到请求,需要请求者继续执行操作

2** 成功,操作被成功接收并处理

3** 重定向,需要进一步的操作以完成请求

4** 客户端错误,请求包含语法错误或无法完成请求

5** 服务器错误,服务器在处理请求的过程中发生了错误

四、check_http.sh脚本的实现

#!/bin/bash

resettem=$(tput sgr0)

Logfile_path=’/opt/logs/ngnix/access.log’

Check_http_status()

{

Http_status_code=(`cat $Logfile_path | grep -ioE “HTTP\/1\.[1|0]\”[[:blank]][0-9]{3}” | awk -F”[ ]+” ‘{

if($2>100&&$2<200)

       {i++}

else if($2>=200&&$2<300)

       {j++}

else if($2>=300&&$2<400)

{k++}

else if($2>=400&&$2<500)

{n++}

else if($2>=500)

{p++}

}END{

print i?i:0,j?j:0,k?k:0,n?n:0,p?p:0,i+j+k+n+p

}’

`)

echo -e '\E[33m'"The number of http status [100+]:" ${resettem} ${ Http_status_code[0] }

echo -e '\E[33m'"The number of http status [200+]:" ${resettem} ${ Http_status_code[1] }

echo -e '\E[33m'"The number of http status [300+]:" ${resettem} ${ Http_status_code[2] }

echo -e '\E[33m'"The number of http status [400+]:" ${resettem} ${ Http_status_code[3] }

echo -e '\E[33m'"The number of http status [500+]:" ${resettem} ${ Http_status_code[4] }

echo -e '\E[33m'"ALL request numbers:" ${resettem} ${ Http_status_code[5] }

}

 

Check_http_code()

{

Http_Code=(`cat $Logfile_path | grep -ioE “HTTP\/1\.[1|0]\”[[:blank]][0-9]{3}” | awk -v total=0 -F '[ ]+''{

if ($2!="")

                          {code[$2]++;total++}

else

{exit}

}END{

                     print code[404]?code[404]:0,code[403]?code[403]:0,total

                     }'

                     `)

echo -e '\E[33m'"The number of http status[404]:" ${resettem} ${Http_Code[0]

}

echo -e '\E[33m'"The number of http status[403]:" ${resettem} ${Http_Code[1]

}

echo -e '\E[33m'"All request number:" ${resettem} ${Http_Code[2]})

}

 

Check_http_status

Check_http_code

Linux之shell典型应用之脚本实现的更多相关文章

  1. Linux - 简明Shell编程11 - 调用脚本(CallTheScript)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 主脚本: CallTheScript.sh #!/bi ...

  2. 一起来学linux:shell script(二)关于脚本

    (一)首先来看shell脚本的执行方式,shell脚本的后缀名都是sh文件. 1 sh test.sh 2 source test.sh 这两种方式有什么区别呢.test.sh 里的脚本很简单, 从键 ...

  3. Linux添加shell(.sh)脚本并添加定时任务

    一.添加sheel脚本 1.首先创建一个执行程序:vim a.sh 2.编辑: #!/bin/bash  python3  python.py >> test2.log 2>& ...

  4. Linux 的shell 字符串截取很有用。有八种方法。

    一 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.linuxidc.com/123.htm 1  # 号截取,删除左边字符,保留右边字符. echo ${va ...

  5. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  6. 使用C#给Linux写Shell脚本(下篇)

    在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...

  7. Linux/Unix shell 脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

  8. Linux常用Shell脚本珍藏【转载】

    我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...

  9. Linux系列教程(二十)——Linux的shell概述以及如何执行脚本

    从这篇博客开始,我们将进入Linux的shell脚本的学习,这对于Linux学习爱好者而言是特别重要的一节,也是特别有意思的一节,shell 脚本就像我们知道的Java,php类似的编程语言一样,通过 ...

随机推荐

  1. 【自适应辛普森积分】hdu1724 Ellipse

    Ellipse Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  2. Linux设置DNS地址及清理DNS缓存方法

    1.设置DNS地址 编辑vim /etc/resolv.conf 文件. 增加DNS地址:nameserver ip. 2.清理DNS缓存 清理dns缓存: 通过重启nscd服务来达到清理dns缓存的 ...

  3. 【原】font-awesome IE6支持代码本人测试成功

    <!--[if (gte IE 6)&(lte IE 8)]> <script type="text/javascript" src="js/n ...

  4. win10安装elementary os双系统

    elementary os是ubuntu的一个分支,界面有点像苹果,比较漂亮.如图: 从已有的磁盘中划出一块空白分区,将elementary单独安装在这个分区里,这个分区需要比其他分区的剩余空间都要大 ...

  5. JavaScript中涉及得运算符以及运算符的优先级

    在js中主要有三种运算符:算术运算符,逻辑与比较运算符,位运算符.在着三种运算符中,最常见的应该是算术与比较运算符,位运算符比较少见一些 *说到了运算符,就不得不说运算符的优先级.下面我来列一下这些运 ...

  6. Redis安装和基础介绍

    一:初识Redis Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到 ...

  7. 观察者模式—jdk自带源码分析

    一:观察者模式简介 二:jdk实现观察者模式的源码 三:实际例子 四:观察者模式的优点和不足 五:总结 一:观察者模式简介 有时又被称为发布(publish )-订阅(Subscribe)模式.模型- ...

  8. 原生ajax写的上拉加载

    上拉加载的思路 1 上拉加载是要把屏幕拉到最底部的时候触发ajax事件请求数据 2.所有要获取屏幕的高度 文档的高度 和滚动的高度 下面的代码是已经做好了兼容的可以直接拿来用 Javascript: ...

  9. 加快compser install 和update的方法

    加快compser install 和update的方法: 可以进入composer国内镜像里面进行参考 如下是修改composer.json文件来实现(在json配置的最后加上如下代码) " ...

  10. prop&attr区别和用法,以多选框为例

    1.比较 相同点 : prop和attr作为jquery的方法都可以获取属性值; 不同点 : (1) 对于HTML元素本身就带有的固有属性,使用prop方法, attr获取checkbox的check ...