现在大部分公司在线的应用服务器采用的都是linux或Unix操作系统,因此一些常用的shell明了,会让我们更牛逼,一些较为基础的入门级的命令如:ls,cp,mv,rm,mkdir,touch等
1.查看文件的内容
cat命令是一个现实文本文件内容的便捷工具,如果一个日志文件比较小,可以直接使用cat命令将其内容打印出来进行查看,
cat access.log
124.119.223.36 455 GET www.xxx.com/list.html www.xx.com 404 432004
124.119.223.36 230 GET www.xxx.com/list.html www.xx.com 500 432004
...
cat -n access.log 参数-n ,可以显示行号
1 124.119.223.36 455 GET www.xxx.com/list.html www.xx.com 404 432004
2 124.119.223.36 230 GET www.xxx.com/list.html www.xx.com 500 432004
...
2. cat的缺点在于,一旦执行后便无法再进行交互和控制,而more命令可以分页的展现文件内容,按enter键显示文件下一行,按空格键便显示下一页,按F键显示下一屛内容,按B键显示上一屛内容
more access.log
124.119.223.36 455 GET www.xxx.com/list.html www.xx.com 404 432004
124.119.223.36 230 GET www.xxx.com/list.html www.xx.com 500 432004
...
More
另外一个命令less提供比more更丰富的功能,支持内容查找并且能高亮显示
less access.log
3. 显示文件尾
使用tail命令能够查看到文件最后几行,这对于日志文件非常有效,很多时候日志文件是追加写入的,新写入的内容出于文件的末尾位置。
tail -n1 access.log
-n 参数后面跟的数字表示显示文件最后几行,此处为2,表示显示文件最后2行,制定-f参数让tail程序不退出并且持续显示文件新增加的行
tail -n2 -f access.log
4.显示文件头
与tail命令类似,head命令用户显示文件开头的一组行
head -n2 access.log
-n 参数用来制定显示文件开头的几行,此处为2,表示显示access.log的开头2行
5.内容排序
一个文件中包含众多的行,经常需要对这些诶行中的某一列进行排序操作,sort命令作用便是对数据进行排序。
cat sortfile
5
90
2
5
7
9
12
343
432
sort -n sortfile
2
5
5
7
9
12
...
通过cat命令查看sortfile文件中数字是无序的,而通过 sort -n命令查看,数字是从小到大排好序的
6. 字符统计
wc 命令可以用来统计指定文件中的字符数,字数,行数并输出统计结果
wc -l access.log
11001 access.log
使用-l参数来统计文件中的行数,上面显示日志文件有11001行
wc -c access.log // -c 参数能够显示文件的字节数,
781633 access.log
7. 查看重复出现的行
uniq命令可以用来显示文件中行重复的次数,或者显示仅出现一次的行,以及仅仅显示重复出现的行,并且
uniq的去重针对的只是连续的两行,因此常常与sort结合使用
cat uniqfile
aaa
bbb
ccc
上面内容未排序,用过sort排序后再通过uniq去重统计
sort uniqfile | uniq -c
3 aaa
4 bbb
1 ccc
-c 参数用来在每一行最前面加上改行出现的次数
展现仅出现一次的行:
sort uniqfile | uniq -c -u
1 ccc
1 eee
加上参数 -u 便只会显示出现一次的行。
8.字符串查找,也是我们查询日志最常用到的命令+++
使用grep命令可以查找文件中符合条件的字符串,如果发现文件内容符合指定查找字符会将该行打印出来
grep qq access.log
124.119.20.23 GET www.xxx.com/list.html www.qq.com 404 432004
124.119.29.30 GET www.xxx.com/list.html www.qq.com 500 432004
qq为指定的查找字符,而access.log是文件名称
使用 -c 参数,可以显示查找到的行数
grep -c qq access.log
2262
9. 文件查找
常常需要修改一个文件,而只知道文件名称不知道文件路径或者需要查找一个文件的路径,这时就需要使用文件查找命令find
$ find /home/longlong -name access.log
/home/longlong/temp/access.log
在/home/longlong路径下查找文件名为access.log的文件,查找到的文件路径为 /home/longlong/temp/access.log
查找以 txt后缀结尾的文件
$ find /home/longlong -name "*.txt"
/home/longlong/active-cpp/test/test1.txt
/home/longlong/active-cpp/test/test2.txt
还可以使用find命令,递归打印当前目录的所有文件
$ find . -print
10 URL 访问工具
要想在命令行下通过HTTP协议访问网页文档需要用curl,它支持HTTP,HTTPS,FTP,FTPS,Telnet等多中协议,常被用来在命令行下抓取网页和监控Web服务器状态。
发起网页请求:
$ curl www.baidu.com
<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8">
11. 查看请求访问量
如访问量排名前10的IP地址
$ cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10
1455 174.119.232.29
1437 124.119.22.59
页面访问量排名前10的url
$ cat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10
2280 www.xxx.com/list.html
2236 www.xxx.com/info.html
命令之间使用管道连接起来,摘取访问日止为恩建中指定的列,排序去重后,再按照出现次数进行反向排序,取其中前10条记录
12. 查看最耗时的页面
对于我们开发人员来说,页面的响应时间是非常值得关注的,我们经常需要将响应慢的页面找出来进行优化:
$ cat access.log | sort | -k 2 -n -r | head -10
174.119.232.29 740 POST www.xxx.com.userinfo.html www.taobao.com 404 2789
174.119.232.29 740 POST www.xxx.com.userinfo.html www.taobao.com 301 49397
174.119.232.29 740 POST www.xxx.com.userinfo.html www.taobao.com 200 432004
174.119.232.29 740 POST www.xxx.com.userinfo.html www.sina.com 500 48243
access.log 文件的第二行为页面的响应时间 用过sort按照第二行逆序后,再通过head命令取出排名前10的页面