做为一名合格的Java后台开发

经常需要查询线上的日志,定位线上问题

所以熟练掌握日志查询的命令

可以使你更加迅速的定位错误日志位置,及时解决问题

在此,我将介绍几个自己工作中经常使用到的日志查询命令

大家一起学习讨论,让我们都能更优雅的操作日志

假设你有一个日志文件demo.log,里面的内容如下所示,

我们将使用这个文件,来演示如何优雅的查询日志文件、定位文件内容。

line1 123456 aa
line2 123456 bb
line3 123456 cc
line4 123456 dd
line5 654321 aa
line6 654321 bb
line7 12
line8 34
line9 56
line0 78

用于输出文件中的尾部内容,实际应用如下:

// 显示文件倒数2行数据,并实时刷新新日志
tail -2f demo.log // 执行效果如下:
line9 56
line0 78 // 如果你需要停止,按Ctrl+C退出
// 假如查看的日志,实时刷新的日志量非常多的话,慎用!

命令用于连接文件并打印到标准输出设备上

// 显示文件全部内容
cat demo.log // 执行结果:
line1 123456 aa
line2 123456 bb
line3 123456 cc
line4 123456 dd
line5 654321 aa
line6 654321 bb
line7 12
line8 34
line9 56
line0 78 // 由于会显示整个文件的内容,所以如果文件大的话,慎用!

类似cat,不过会以一页一页的形式显示,按空白键space就往下一页显示,按b键就会往回一页显示

more demo.log

// 执行结果(文件内容少的话,会直接显示全部,效果跟cat一样):
line1 123456 aa
line2 123456 bb
line3 123456 cc
--More--(15%)

lessmore类似,但使用less可以随意浏览文件(使用键盘上的上下箭头),而且less在查看之前不会加载整个文件

less demo.log

// 执行结果(文件内容少的话,会直接显示全部,效果如下):
line1 123456 aa
line2 123456 bb
line3 123456 cc
line4 123456 dd
line5 654321 aa
line6 654321 bb
line7 12
line8 34
line9 56
line0 78
demo.log (END)

grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,grep指令会把含有范本样式的那一列显示出来

// 查询包含关键字`123456`的日志内容
grep "123456" demo.log // 执行结果
line1 123456 aa
line2 123456 bb
line3 123456 cc
line4 123456 dd
// 查询包含关键字`123456`且包含`aa`的日志内容
grep "123456" demo.log | grep "aa" // 执行结果
line1 123456 aa
// 查询不包含`aa`的日志内容
grep -v "aa" demo.log // 执行结果
line2 123456 bb
line3 123456 cc
line4 123456 dd
line6 654321 bb
line7 12
line8 34
line9 56
line0 78
// 查询包含关键字`123456`但不包含`aa`的日志内容
grep "123456" demo.log | grep -v "aa" // 执行结果
line2 123456 bb
line3 123456 cc
line4 123456 dd
// 查询包含关键字`123456`或`aa`的日志内容
grep "123456\|aa" demo.log
或者
grep -E "123456|aa" demo.log // 执行结果
line1 123456 aa
line2 123456 bb
line3 123456 cc
line4 123456 dd
line5 654321 aa
  • 总结

当你通过grep查找关键字,但是还是有非常多匹配的结果时,可以组合前面的lessmore实现分页显示,示例如下:

grep "123456" demo.log | less
grep "123456" demo.log | more grep "123456\|aa" demo.log | less
grep "123456" demo.log | grep -v "aa" | less

通过以上介绍的几个命令,相信应该足够应付大部分的查找日志的场景。

好了,剩下的就是勤加练习了。

当然,如果你有更好的方式可以更加优雅的查询日志,也希望你能与我一起分享


  • 2018-09-05补充:

当使用less命令查看日志时,还可以对关键字进行查找。命令如下:

// 使用斜杠(/)加关键字的形式,向后查找关键字,如查找关键字:123456
/123456 // 使用问号(?)加关键字的形式,向前查找关键字,如查找关键字:line3
?line3 // PS:跳转到后一个关键字快捷键: N; 跳转到前一个关键字:shift + N

关于cat命令,还有一个与之类似但写法相反的命令:tac。写法就是cat反过来写

功能也是相反的,是从后往前显示内容。示例如下:

tac demo.log

// 执行结果:
line0 78
line9 56
line8 34
line7 12
line6 654321 bb
line5 654321 aa
line4 123456 dd
line3 123456 cc
line2 123456 bb
line1 123456 aa

如何在Linux下优雅的查询日志的更多相关文章

  1. 如何在Linux下使用Rsync

    如何在Linux下使用Rsync 吐槽 昨天对scp进行总结之后看到最后有说到Rsync,俗语有云:好奇心害死猫.抱着学习的态度将Rsync给找了出来,然后进行了一些简单的学习.下面介绍一些个常用的命 ...

  2. 一步一步教你如何在linux下配置apache+tomcat(转)

    一步一步教你如何在linux下配置apache+tomcat   一.安装前准备. 1.   所有组件都安装到/usr/local/e789目录下 2.   解压缩命令:tar —vxzf 文件名(. ...

  3. 如何在Linux下拷贝一个目录呢

    cp -af newadmin/movie/.   uploadfile/mallvideo/ 如何在Linux下拷贝一个目录呢?这好像是再简单不过的问题了. 比如要把/home/usera拷贝到/m ...

  4. Linux下一个简单的日志系统的设计及其C代码实现

    1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回 ...

  5. 如何在linux下制作一个windows的可启动u盘?

    如何在linux下制作一个windows的可启动u盘? 情景是这样的,有一个windows10的iso,现在想通过U盘安装,要求即支持UEFI(启动引导器),又支持Legacy(启动引导器),因为有一 ...

  6. 如何在linux下开启FTP服务

    如何在linux下开启FTP服务 1. 首先服务器要安装ftp软件,查看是否已经安装ftp软件下:   #which vsftpd   如果看到有vsftpd的目录说明服务器已经安装了ftp软件 2. ...

  7. 如何在Linux下禁用IPv6

    如何在Linux下禁用IPv6 echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6                            禁用IP ...

  8. Linux下自动清除MySQL日志文件

    MySQL运行过程中会生成大量的日志文件,占用不少空间,修改my.cnf文件配置bin-log过期时间,在Linux下自动清除MySQL日志文件 [mysqld] expire-logs-days= ...

  9. Dcloud课程6 php脚本如何在Linux下定时更新数据

    Dcloud课程6 php脚本如何在Linux下定时更新数据 一.总结 一句话总结:linux下用crontab命令实现定时任务. 1.linux下执行php脚本用什么命令? 直接用php命令php ...

随机推荐

  1. 用 git 钩子,检测代码规范性(eslint、standard)

    最终实现效果说明:用 git commit 提交代码之前,利用 pre-commit git 钩子,实现代码规范检测(eslint.standard 规范),符合规范之后才可以提交到 git 仓库.这 ...

  2. python之模块中包的介绍

    跨文件夹导入模块 1:有文件夹a,名下有ma功能,在文件夹外调用ma功能的话, 导入import a.ma 运用ma() 或者 from a import ma ma() 2;假定a有多重文件夹,想要 ...

  3. React官方脚手架不支持less问题解决

    create-react-app是由React官方提供,并推荐构建React单页应用程序的最佳方法,但是默认不支持less,需要手动集成: 1,必须手动安装less npm install less ...

  4. 判断某个点是否在某个view上

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObjec ...

  5. Redis主从原理及哨兵模式

    1.Redis主从搭建 主从的搭建很简单,主节点设置连接密码,从节点的配置上主节点的ip和端口,以及密码,一般从节点我们都设置只读模式. 主节点配置: 主节点密码: requirepass xxx 从 ...

  6. [Python] iupdatable包:日志模块使用介绍

    一.说明 日志模块是对 logging 模块的单例封装 特点: 可同时向控制台和文件输出日志,并可选择关闭其中一种方式的输出: 集成colorlog,实现根据日志等级不同,控制台输出日志颜色不同: 灵 ...

  7. js 面向对象 模拟日历

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. (转)C++对象的内存布局

    原文地址:http://blog.csdn.net/haoel/article/details/3081328 C++ 对象的内存布局 陈皓 http://blog.csdn.net/haoel 前言 ...

  9. C/C++、C#、JAVA(一):代码模板与库代码的引入

    代码默认模板 编译性高级编程语言中,几乎每种语言,都有个静态的 main 方法作为程序启动入口,每种语言都有其编写规范.为了学习 C/C++.C#.JAVA四种语言,我们要先从默认代码模板中,慢慢摸索 ...

  10. linux无文件执行— fexecve 揭秘

    前言 良好的习惯是人生产生复利的有力助手. 继续2020年的flag,至少每周更一篇文章. 无文件执行 之前的文章中,我们讲到了无文件执行的方法以及混淆进程参数的方法,今天我们继续讲解一种linux上 ...