[Linux命令分享]日志查看 — — less

Linux命令分享日志查看 --- --- less

介绍

less 是一个功能强大的文本文件查看器,它允许用户逐页浏览大型文件内容。与 more 命令相比,less 提供了更多的导航选项和功能,可以向前或向后滚动文件内容。less 命令遵循"less is more"的理念,是Linux系统中查看文本文件的首选工具。

官方文档:https://greenwoodsoftware.com/less/

安装

bash 复制代码
# CentOS/RHEL系
yum install less

# Ubuntu/Debian系
apt-get install less

## 查看less版本
less --version

命令参数

显示行号(-N)

bash 复制代码
less -N zshrc

禁用行长截断(-S)

-S 参数用于处理长行文本,当文件中包含超过终端宽度的长行时,该参数会禁用自动换行显示。默认情况下,less 会对长行进行自动换行以适应终端宽度,使用 -S 后,长行会保持原样显示,超出部分需要通过左右滚动来查看。

案例:

bash 复制代码
# 构造测试文件
echo "2024-01-15 14:30:25.123 INFO  com.example.service.UserService - User login attempt for user ID 12345 with IP address 192.168.1.100, device info: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36, session ID: abcdef1234567890abcdef1234567890" > application.log

# 查看包含长日志行的文件。通过← → 方向键来观察超出屏幕部分的内容
less -S application.log

显示所有字符原始形式(-r)

-r 参数用于显示文件中字符的原始形式(如ANSI转义序列、颜色代码等),不进行任何处理或解释。字符会以原始形式显示在终端中,可能导致显示混乱,但保留了文件的原始内容。

案例:

bash 复制代码
# less:可能过滤或转换不可打印字符
# less -r:保留所有原始字节,不进行任何处理
less -r app.log

忽略大小写(-I)

默认情况下,less对字母的搜索是区分大小写的。如果要忽略大小写,可以使用less 命令结合-I选项

bash 复制代码
# 默认区分大小写
less test.log

# -I 忽略大小写区分
less -I test.log

自动退出(-F)

-F参数根据文件长度决定是否进入交互模式,如果文件过长,屏幕装不下时,就会进进入交互模式。如果文件很小,行数很小,则不会进入交互模式,运行完之后直接退出。

bash 复制代码
# app.log文件,记录行数很多,屏幕放不下,则会进入交互模式,支持上下翻页
less -F app.log

# test.log,一共3行,屏幕能放下,不会进入交互模式,运行完之后直接退出
less -F test.log


持续观察(+F)

less +F 命令用于持续观察文件内容的变化,类似于 tail -f 命令的功能。

bash 复制代码
# 持续观察monitor.txt文件,当monitor.txt文件有新增内容时,也会展示
less +F monitor.txt

# ctrl/control + C 停止观察,然后按q键 退出less命令交互页面


退出持续观察:

测试文件:

bash 复制代码
# 1. 创建初始测试文件
echo -e "Line 1: Initial content\nLine 2: Starting content\nLine 3: Base content" > monitor.txt

# 2. 执行less +F命令
less +F monitor.txt

# 3. 新增一个终端,追加文件内容
# 向文件追加新行
echo "Line 4: Added content at $(date)" >> monitor.txt
sleep 2
echo "Line 5: More content added" >> monitor.txt
sleep 2
echo "Line 6: Final test line" >> monitor.txt

# 4. ctrl/control + C 停止观察,然后按q键 退出less命令交互页面

交互参数

  1. /pattern - 向下搜索模式,也支持正则匹配
  2. ?pattern - 向上搜索模式,也支持正则匹配
  3. n - 查找下一个匹配项
  4. N - 查找上一个匹配项
  5. 空格键 或 Page Down - 向下翻页
  6. b 或 Page Up - 向上翻页
  7. 方向键↑/↓ - 向上/向下滚动一行
  8. d - 向下滚动半页
  9. u - 向上滚动半页
  10. g 或 Home - 跳转到文件开头
  11. G 或 End - 跳转到文件结尾
  12. 数字+G - 跳转到指定行号
  13. q 或 Q - 退出 less
  14. h - 显示帮助信息
  15. : - 进入命令模式
  16. v - 使用编辑器编辑当前文件

实际案例

接下来主要介绍我个人的习惯用法,仅供参考,毕竟合适自己的才是最好的。

  1. 大型日志文件中查找最近发生的特定事件,比如用户最近的操作、错误或警告信息。可以使用下面一系列命令:
bash 复制代码
# 查看日志
less -r app.log
# ---------- 从下往上搜索(找最近一次的请求) --------------
#跳到文件末尾
shift + G 
# 查找zhangsan最近一次的请求
?zhangsan
# 然后通过n/N控制查找上一个匹配项还是下一个匹配项
n - 查找下一个匹配项
N - 查找上一个匹配项
  • less -r app.log打开日志文件,并通过shift + G跳转到文件末尾
  • ?zhangsan搜索zhangsan出现的位置
  • 回车,我们就找到了zhangsan最后出现的位置
  • 接着如果我们还想寻找zhangsan倒数第二次出现在文件中的位置(即向上寻找),按n键即可(注意区分大小写)
  • 如果此时,我们向上找的太多,又想向下寻找,那么按N键即可(注意区分大小写)

    最后效果:
  • 有时,我们可能也需要定位到文件开始,找最早一次zhangsan出现的位置,那么只需要按g键即可定位到文件开始为止,然后通过/zhangsan向下搜索,通过n/N键控制上下寻找即可(注意区分大小写)

PS:

  1. G键 + ?zhangsan 向上搜索zhangsan (通过G键跳转到文件末尾,然后向上搜索)
  2. g键 + /zhangsan 向下搜索zhangsan(通过g键跳转到文件开头,然后向下搜索)

测试文件:

bash 复制代码
# 创建一个模拟的应用日志文件 app.log
cat > app.log << 'EOF'
2024-01-15 08:12:34 INFO  UserService - User login attempt for user ID 12345
2024-01-15 08:15:22 DEBUG OrderService - Processing order #ORD-78945 for customer lisi
2024-01-15 08:18:45 WARN  PaymentService - Payment timeout for transaction TXN-12345
2024-01-15 08:22:17 ERROR DatabaseService - Connection pool exhausted, max connections reached
2024-01-15 08:25:33 INFO  EmailService - Sent notification email to user wangwu@example.com
2024-01-15 08:30:15 DEBUG CacheService - Cache hit ratio: 87.5% for region USER_PROFILE
2024-01-15 08:35:42 INFO  UserService - User profile updated for user ID 98765
2024-01-15 08:40:28 WARN  SecurityService - Failed login attempt from IP 192.168.1.100 for user zhangsan
2024-01-15 08:45:13 ERROR AuthService - Authentication failed for user zhangsan due to invalid credentials
2024-01-15 08:50:56 INFO  AuditService - User zhangsan accessed resource /api/users/profile
2024-01-15 08:55:24 DEBUG LoggingService - Log level changed from INFO to DEBUG
2024-01-15 09:00:37 INFO  NotificationService - Push notification sent to device ID DEV-55555 for user lisi
2024-01-15 09:05:48 WARN  FileService - Disk space usage reached 85% on volume /data
2024-01-15 09:10:15 INFO  ReportService - Generated daily report for 2024-01-14 with 1250 records
2024-01-15 09:15:32 ERROR EmailService - Failed to send email to zhangsan@company.com, SMTP timeout
2024-01-15 09:20:44 DEBUG MonitoringService - CPU usage spike detected: 92% at 09:20:43
2024-01-15 09:25:17 INFO  BackupService - Starting daily backup process for database PROD_DB
2024-01-15 09:30:29 WARN  NetworkService - High latency detected on interface eth0, avg: 156ms
2024-01-15 09:35:55 INFO  UserService - User zhangsan successfully logged in from IP 192.168.1.105
2024-01-15 09:40:12 DEBUG SessionService - Session timeout extended for user zhangsan, new expiry: 2024-01-15 10:40:12
2024-01-15 09:45:38 ERROR PaymentService - Payment processing failed for user zhangsan, order #ORD-99999
2024-01-15 09:50:25 INFO  APIService - API rate limit increased to 5000 req/min for premium users
2024-01-15 09:55:47 WARN  CacheService - Cache eviction triggered for region PRODUCT_CATALOG, 15% items removed
2024-01-15 10:00:13 INFO  UserService - Password reset requested for user zhangsan
2024-01-15 10:05:29 DEBUG SearchService - Indexed 2500 documents in 3.2 seconds, avg: 781 docs/sec
2024-01-15 10:10:44 ERROR NotificationService - Failed to send SMS to user zhangsan, gateway timeout
2024-01-15 10:15:18 INFO  AuditService - User zhangsan modified settings in admin panel
2024-01-15 10:20:33 WARN  SecurityService - Multiple failed login attempts detected for user zhangsan
2024-01-15 10:25:56 INFO  AnalyticsService - Generated user activity report for zhangsan, 45 actions recorded
2024-01-15 10:30:22 DEBUG DatabaseService - Connection pool utilization: 78% (39/50 connections)
2024-01-15 10:35:47 ERROR AuthService - Session expired for user zhangsan, token invalid
2024-01-15 10:40:15 INFO  UserService - User zhangsan logged out, session duration: 2 hours 15 minutes
EOF
  1. 查看多个文件
bash 复制代码
# 同时查看多个文件
less file1.txt file2.txt file3.txt
# 使用 :n 切换到下一个文件
# 使用 :p 切换到上一个文件
# 使用 :q 退出

输入**:n** 查看下一个文件:

输入**:p** 查看上一个文件:

如果不想查看了,输入**:q** 退出查看:

测试文件:

bash 复制代码
# 创建第一个测试文件
echo -e "This is the content of file 1.\nIt has multiple lines.\nEnd of file 1." > file1.txt

# 创建第二个测试文件
echo -e "Content of file 2 is here.\nThis file contains different text.\nFile 2 ends here." > file2.txt

# 创建第三个测试文件
echo -e "Finally, this is file 3.\nThe last file in our example.\nGoodbye from file 3." > file3.txt
  1. 翻看历史命令

有时,可能一段很长的命令,但是我们不记得整个怎么写了,只记得部分,那么就可以通过下面命令来定位

bash 复制代码
# 翻看最近两百条历史命令,并通过管道传递给less命令
history -n 200 | less
# 然后就可以通过n/N键通过搜索关键字快速定位到整行的命令
  1. 查看系统日志
bash 复制代码
# 查看内核日志并启用行号显示
dmesg | less -N
  1. 实时监控文件变化
bash 复制代码
# 方式一:tail命令配合less
tail -f logfile.txt | less

# 方式二:直接通过+F参数
less +F logfile.txt
  1. 正则匹配

进入交互模式后,通过**/pattern或者?pattern 输入正则表达式,进行正则匹配搜索**

bash 复制代码
# 向后搜索包含 "content" 的行
?content

# 使用正则表达式搜索
?file$    # 匹配以 "file" 结尾的行


测试文件:

bash 复制代码
echo -e "Line 1: Start of file\nLine 2: Contains number 123\nLine 3: Another line\nLine 4: End of file" > test_pattern.txt
相关推荐
A小辣椒16 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒20 小时前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式