查询Nginx或MySQL日志时,使用一些linux指令会更加高效。
一、find命令
find ./ -mtime 0:返回最近24小时内修改过的文件。
find ./ -mtime 1 : 返回的是前48~24小时修改过的文件。而不是48小时以内修改过的文件。
那怎么返回10天内修改过的文件?find还可以支持表达式关系运算,所以可以把最近几天的数据一天天的加起来:
find ./ -mtime 0 -o -mtime 1 -o -mtime 2 ……虽然比较土,但也算是个方法了。
查找最近30分钟修改的当前目录下的.php文件
find . -name '.php' -mmin -30
查找最近24小时修改的当前目录下的.php文件
find . -name '.php' -mtime 0
查找最近24小时修改的当前目录下的.php文件,并列出详细信息
find . -name '*.inc' -mtime 0 -ls
查找当前目录下,最近24-48小时修改过的常规文件。
find . -type f -mtime 1
查找当前目录下,最近1天前修改过的常规文件。
find . -type f -mtime +1
二、head/tail命令
head -n 10 test.log 查询日志文件中的头10行日志;
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;
实时监控日志
tail -f /www/wwwlogs/access.log
跟踪正在创建的新日志文件,并开始跟踪新文件而不是旧文件。
tail -F /var/log/apache2/access.log
实时监控多个日志文件
multitail /var/log/apache2/access.log /var/log/apache2/error.log
lnav /var/log/apache2/access.log /var/log/apache2/error.log
tail -100f test.log #实时监控100行日志
tail -n 10 test.log #查询日志尾部最后10行的日志;
tail -n +10 test.log # 查询10行之后的所有日志;
三、cat/tac命令
将查询结构写入到文件
cat -n test.log | grep "debug" > debug.txt
查找文件text中第二行到第四行的内容
cat filename | head -n 3000 | tail -n +1000
tac是倒序,用法同cat
四、more/less
分页查看文件
cat -n test.log | grep "debug" | more
cat -n test.log | grep "debug" | less
more 和 less的区别:
- less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
- less不必读整个文件,加载速度会比more更快
- less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容
五、sed命令
查找文件text中第三行的内容
sed -n '3p' text
查找文件text中第二行到第四行的内容
sed -n '1000,3000p' text
等价于
根据日期查询日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log