对于较小的文件可使用cat命令查看:cat -n 显示行号查看
分页显示文件:less/more
#less|more //enter 键显示下一行,空格键显示下一页 ,F键显示下一屏
3. 内容排序:sort
#sort -n -r sortfile //-n 按照数字顺序排列,-r 逆序排序 #sort -k 2 -t ‘ ‘ -n //-k 指定排序的列,-t 指定列分割符(这里指的是空格),-n按照数字排序
4. 字符统计:wc
#wc -l access.log //-l统计字符的行数,-c统计文件的字符数,-L最长列的行数,-w包含多少个单词
5. 查看重复出现的行:uniq
6. 字符串查找:grep
#grep qq access.log //查找文件中符合条件的字符串,-c显示找到的行数 #grep ‘G*T‘ access.log //正则表达式
7. 文件查找:find
#find /home -name *.txt //查找以txt结尾的文件 #find . -print //递归打印当前目录的所有文件
8. 表达式求值:expr
#expr 10 \* 3 //乘法计算,*用“\”转义
9. 多个命令连续查找
#cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10 //访问量靠前10的ip,cut命令用来过滤日志指定的列,列之间用空格来分割 #cat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -n -r | head 10 //页面访问量靠前10的url,命令之间用管道进行连接,摘取访问日志指定的列,排序、去重后,在按照出现的次数进行反向排序,取其中前10条记录
10. 日志分析脚本:
1) sed编辑器
#sed ‘s/xxx/yahoo/‘ access.log | head -10 //将文件中得xxx替换成yahoo输出,s表示执行替换命令 #sed -n ‘2,6p‘ access.log //-n表示只输出指定的行,2,6表示第二行和第6行之间 #sed ‘/qq/d‘ access.log //根据正则表达式删除,d执行删除 #sed -e ‘i/head‘ access.log //在行首插入文本,i/head 表示在每行的前面插入head字符串
2)awk程序
#awk [option] ‘pattern {action}‘ file //option为命令选项,pattern为行的匹配,action为执行的具体操作;如果没有pattern,则对所有行执行action,而如果没有action,则打印所有匹配的行; #awk ‘/google/{print $5,$6}‘ access.log //使用google查找包含google的行,并且打印第5第6行 #awk ‘length($0)>40{print $3}‘ access.log //查找大于40的行,并打印第3列,length($0)用来获取打钱行数长度 #awk ‘{line = sprintf ("method:%s,response:%s",$3,$7);print line}‘ access.log //定义一个line变量,用于接收sprintf的输出,而sprintf用于格式化输出第三行的请求方式和第七行的响应时间
11. shell脚本
load=`top -n | sed -n ‘1p‘ | awk ‘{print $11}‘` load=${load%\,*} disk_usage=`df -h | sed -n ‘2p‘ | awk ‘{print $(NF - 1)}‘` disk_usage=${disk_usage%\%*} overhead=`expr $load \>2.00` if [$overhead -eq 1 ];then echo "system load is overhead" fi if [$disk_usage -gt 85 ];then echo "disk is nearly full,need more disk space" fi exit 0
说明:先通过top命令去的系统的load值,-n后面的1表示只刷新一次,然后使用sed过滤出第一行,也就是load信息的行。top会输出1分钟、5分钟、15分钟load的平均值,通过awk筛选出1分钟内的平均load,赋值给load变量,而${load%\,*}则是从右边开始,过滤掉不需要的逗号。接下来便是获取磁盘的利用率,使用${disk_usage%\%*}过滤掉最后的百分号。由于取到的laod信息包含两位小数,因此需要使用expr $load \> 2.00命令进行比较,并且将结果赋值给overhead。最后通过if语句判断系统是否负载过高。
原文:http://my.oschina.net/jeeker/blog/513336