>>基础命令
操作
命令
说明
查看文件的内容
cat -n access.log
-n显示行号
分页显示文件
more access.log
Enter下一行,空格下一页,F下一屏,B上一屏
分页显示文件
less access.log
输入 /字符串 可查找并高亮
显示文件尾
tail -n2 -f access.log
-n2显示最后2行,-f继续监听不退出
内容排序
sort -k 2 -t ' ' -n access.log
-k指定排序列,-t指定列分隔符,-n按数字顺序
字符统计
wc -l access.log
-l统计行数,-c字符数,-L最长行长度,-w单词数
查看重复出现的行
sort testfile | uniq -c -d
uniq去重,-c统计重复次数,-d只显示重复的
字符串查找
grep 'G.*T' access.log
查找G开头T结尾的字符串
文件查找
find /home/java -name access.log
递归/home/java的子目录找名为access.log
表达式求值
expr 10 \* 3
计算10*3,其中\*表示转义*不解读为通配符
表达式求值
expr length "this is a test"
计算长度
归档文件
tar -cf aaa.tar f1 f2
-c创建,-f指定包名
归档文件
tar -xf aaa.tar
-x解压
URL访问
curl www.google.com
不带参返回响应体,-i返回带响应头,-I仅返回响应头
查看CPU的load
uptime
查看CPU使用率
top | grep Cpu
按1查看每个核,按shift+H按线程查看
查看CPU使用率
top -p 2864
查看指定进程
磁盘剩余空间
df -h
磁盘剩余空间
du -d 1 -h /home/java
分析目录的磁盘使用。-d设置递归深度
网络traffic
sar -n DEV 1 1
DEV查看各个网卡,1秒抽样,1总共取一次
磁盘I/O
iostat -d -k
内存使用
free -m
通常是看“-/+ buffers/cache”对应的used和free
内存使用
vmstat
查看swap I/O
>>sed编辑器
操作
命令
说明
文本替换
sed 's/xxx/yahoo/' access.log | head -10
不会修改原文件
输出指定的行
sed -n '2,6p' access.log
输出2-6行
删除行
sed '/qq/d' access.log
/d排除含关键字qq的行
整行替换
sed -e '/google/c\hello' access.log | head -10
/c替换的是整个匹配的行
多个命令合并
sed -n '1,5p;1,5=' access.log
边打印行边打印行号
>>awk程序
操作
命令
筛选行,打印指定列
awk '/google/{print $0,$6}' access.log | head -10
按条件打印
awk 'length($0)>40{print $3}' access.log | head -10
格式化输出
awk '{line= sprintf("method:%s,response:%s", $3, $7); print line}' access.log | head -10
>>典型的日志分析场景
(1)统计一个文本中包含字符个数
cat access.log |grep /2012/ |wc -l
cat access.log |grep "/message/publishmsg/\|/message/publish/" >test1.log
(2)查看当天访问排行前10的url
cat access.log | grep “10/Dec/2010″ | awk ‘{print $7}’ | sort | uniq -c | sort -nr | head -n 10
(3)查看apache的进程数
ps -aux | grep httpd | wc -l
(4)访问量前10的IP
cat access.log | cut -f1 -d " " | sort | uniq -c |sort -k 1 -n -r | head -10
cut部分表示取第1列即IP列,取第4列则为URL的访问量
(5)查看最耗时的页面
cat access.log | sort -k 2 -n -r | head -10
按第2列响应时间逆序排序
(6)统计404请求的占比
总请求数export total_line= `wc -l access.log | cut -f1 -d " "`
404请求数export not_found_line= `awk '$6=='404'{print $6}' access.log | wc -l`
占比expr $not_found_line \* 100 / $total_line&&或;可合并为一行。
(7)使用grep查找文件中指定字符出现的次数
grep -o '目标' test.txt | wc -l
-o 指示grep显示所有匹配的地方,并且每一个匹配单独一行输出。这样只要统计输出的行数就可以知道这个字符出现的次数了。