您现在的位置是:首页 > 编程 > 

常用日志查询命令详解(vim、tail、cat、grep、less、more、sed、xargs)

2025-07-23 09:26:16
Linux-系统日志查询命令详解 一、tail & head tail主要用于显示文件的末尾内容。 将每个FILE的最后10行打印到标准输出。 如果有多个文件,在每个文件之前加上一个头文件,给出文件名。 如果没有FILE,或者当FILE为-时,读取标准输入。 1、格式: tail

Linux-系统日志查询命令详解

一、tail & head

tail主要用于显示文件的末尾内容。

  1. 将每个FILE的最后10行打印到标准输出。

  2. 如果有多个文件,在每个文件之前加上一个头文件,给出文件名。

  3. 如果没有FILE,或者当FILE为-时,读取标准输入。

1、格式: tail [选项] [文件名]

2、常用参数:

【最常用】 -f, --follow[={name|descriptor}]:实时监控文件的新增内容。使用该参数后,tail会持续显示文件的末尾内容,并在有新内容时自动刷新显示。

-n, --lines=num:指定显示文件的最后num行,默认值是10。【和-f配合使用】

-c, --bytes=K 输出最后K个字节; 或者使用-c K输出从每个文件的第k个字节开始

-q, --quiet, --silent 从不输出给出文件名的首部

-v,--verbose总是输出带有文件名的头文件

–pid=PID:与-f参数结合使用,指定监控指定进程ID的文件。在进程ID,PID死掉之后结束

-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

--help:显示帮助信息。

--version:显示版本信息。

、栗子:

#1. 显示文件的末尾几行内容(默认10行):
tail filename
#2. 显示文件的末尾20行内容:
tail -n 20 filename
#. 实时监控文件的新增内容:
tail -f filename
#4. 显示文件的最后500个字节的内容:
tail -c 500 filename
#5. 不显示文件名:
tail -q filename
#6. 实时监控文件新增内容且限制末尾行数
tail -200f filename
#7. -f配合grep使用
tail -f info.log | grep  orderId:动态查看含有关键字orderId的日志
tail -100f xxx.log | grep 	2022-05-2 18:1[0-9]	    ------查最新的100行中时间范围在2022-05-2 16:10-2022-05-2 16:19范围中的行

4、系统描述:

head用于显示文件的开头部分

其他参数基本和tail一样,用到的相对少点。

head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;

二、vim

1、日志查用法

1、关键词搜索
/关键词      正向搜索(n跳下一个,上一个)
?关键词      反向搜索
​
# 查询中
# 启用高亮::set hlsearch
# 取消高亮::nohlsearch(简写 :noh)

2、vim编辑器用法(基本用法)

三、grep

1、基础查询

grep 关键词 日志文件.log       # 基本搜索(区分大小写)
grep -i error 日志文件.log        # 忽略大小写,搜索error相关字段
grep -w timeout 日志文件.log      # 精确匹配单词(避免匹配partial),搜索timeout相关字段
grep -n 404 日志文件.log       # 显示行号,搜索404相关字段
grep -v DEBUG 日志文件.log        # 反向搜索(排除DEBUG行)

2、多文件与递归搜索

grep OOM /var/log/*.log      # 搜索目录下所有.log文件
grep -r Connection refused /var/log/  # 递归搜索目录
grep -l segfault /var/log/*  # 只显示包含匹配项的文件名

、上下文查看(Before/After)

grep -A  Exception app.log   # 显示匹配行及其后行(After)
grep -B 2 WAR app.log        # 显示匹配行及前2行(Before)
grep -C 1 ERROR app.log       # 显示匹配行前后各1行(Context)

4、正则表达式搜索

grep -E 50[0-9] access.log    # 匹配500-599状态码(扩展正则)
grep ^202-10 app.log         # 匹配以日期开头的行
grep shutdown\|reboot syslog  # 匹配shutdown或reboot
grep -P \d{2}:\d{2}:\d{2}     # Perl风格正则(需-P参数) todo未知作用

5、范围过滤

# 结合sed过滤时间范围,要求日志中时间打印格式和搜索关键词匹配
sed -n 	/2025-04-01 09:00/,/2025-04-01 10:00/p	 app.log | grep ERROR
​
# 使用awk精确过滤时间戳
awk 	/202-10-01 09:00:/,/202-10-01 10:00:/	 app.log | grep CRITICAL

六、组合其他命令

  1. 高频错误统计

    grep -o ERROR .* app.log | sort | uniq -c | sort -nr
  2. 实时日志监控

    tail -f app.log | grep——line-buffered “ERROR”
  3. 多条件过滤

    grep -v “预期错误”

7、性能优化技巧

grep -m 100 panic app.log      # 只显示前100个匹配项(大文件时提速)
grep --color=always 404 | less -R  # 高亮结果并分页
zgrep OOM /var/log/syslog*.gz # 直接搜索压缩日志

八、实用场景示例

  1. 查询ginx访问日志

    grep GET /api access.log | awk 	{print $1,$7,$9}	  # 提取IP、路径、状态码
  2. 分析Java异常堆栈

    grep -A 10 Caused by: app.log  # 显示异常堆栈上下文
  3. 监控Kubernetes日志

    kubectl logs -f pod-name | grep -E “ERROR|WAR”
四、cat、more、sed、less

1、cat

# 输入内容后按 Ctrl   D 保存退出。
cat > newfile
# 合并多个文件内容到一个新文件
cat file1 file2 > mergedfile
# 追加文件内容到另一个文件
cat file1 >> file2
# 显示行号
cat -n filename
# 显示非空白的行号
cat -b filename
# 清空文件内容
cat /dev
ull > filename

和管道符号结合使用

# 从文件中过滤出包含keyword的行
cat file | grep keywork

注意事项

cat命令一次性输出全部内容,不适合查看超大文件

2、more

逐页显示文件内容,适合查看大文件

1基础用法
more [选项] filename
选项说明
-d显示提示信息(如按空格翻页,按 q 退出)
-f强制显示长行(不自动换行)
-p不滚屏,直接清屏显示下一页
-c不滚屏,从上到下绘制新内容
-s将连续的空行压缩为一行
n从第 n 行开始显示(如 more 10 file
/pattern从匹配 pattern 的第一行开始显示
2搜索并跳转到匹配行
more /queryString文件名
结合管道
# 前面命令执行结果分页展示
ls -l /etc | more

、sed

流式文本编辑器,主要用于对文本进行查、替换、删除、插入等操作,支持正则表达式,适合批量处理文本或自动化脚本。

1基本语法
set [选项] 	命令	 filename
cat 文件 | sed 	命令	
选项说明
-n只显示处理后的行(默认 sed 会输出所有行)
-i直接修改文件(慎用!建议先不加 -i 测试)
-e指定多个命令(如 sed -e 命令1 -e 命令2
-f从脚本文件读取 sed 命令
-r使用扩展正则表达式(类似 grep -E
2常用功能

1、替换文本: /s/pattern/replacement/flags

sed 	s/old
ew/	         # 每行第一个 old 替换为 new
sed 	s/old
ew/g	        # 替换所有匹配的 old(全局替换)
sed 	s/old
ew/2	        # 只替换每行第二个 old
sed 	s/old
ew/ig	       # 忽略大小写(i flag)并全局替换(g flag)
# 实例:
echo hello world | sed 	s/hello/hi/	    # 输出:hi world

2、删除行:d

sed 	d	            # 删除第  行
sed 	1,5d	          # 删除 1~5 行
sed 	/pattern/d	    # 删除匹配 pattern 的行
sed 	/^$/d	         # 删除所有空行
# 实例:
seq 10 | sed 	,6d	  # 输出 1 2 7 8 9 10(删除 ~6 行)

、打印行:p

sed -n 	p	         # 只打印第  行
sed -n 	1,5p	       # 打印 1~5 行
sed -n 	/pattern/p	  # 打印匹配 pattern 的行
# 实例:
sed -n 	/error/p	   # 打印所有含 error 的行

4、插入、追加、修改行

sed 	i\插入的内容	     # 在第  行**前**插入一行
sed 	a\追加的内容	     # 在第  行**后**追加一行
sed 	$a\最后一行追加	   # 在文件末尾追加一行
# 实例:
sed 	2i\### 这是新插入的行 ###	 

==========
sed 	/pattern/c\新内容	   # 匹配的行替换为新内容
sed 	5c\这是新的第5行	    # 修改第 5 行
# 实例:
sed 	/admin/c\### 权限已变更 ###	 
===========
sed 	=	            # 显示行号(行号单独占一行)
sed -n 	=;p	       # 显示行号   内容(需结合 `-n` 和 `p`)
sed -n 	10,20p	    # 打印 10~20 行
、高级用法
# 正则表达式
sed 	s/[0-9]\ /UM/g	    # 所有数字替换为 UM
sed 	s/^#.*//	           # 删除所有注释行(以 # 开头)
sed 	/^$/d	              # 删除空行
============
# 引用匹配内容(& 和 \1, \2)
echo 12 abc | sed 	s/[0-9]\ /& &/	  # 输出:12 12 abc
echo hello 12 | sed 	s/\([a-z]\ \) \([0-9]\ \)/\2 \1/	  # 输出:12 hello
============
# 多命令组合
sed -e 	s/foo/bar/	 -e 	/baz/d	   # 先替换,再删除含 baz 的行
sed 	s/foo/bar/; /baz/d	 
============
# 直接修改文件
sed -i 	s/old
ew/g	       # 直接修改文件(谨慎使用!)
sed -i.bak 	s/old
ew/g	   # 修改前备份原文件(生成 .bak)

实例:

# 批量替换文件内容
sed -i 	s/Windows/Linux/g	 *.txt   # 当前目录所有 .txt 文件中的 Windows 替换为 Linux
# 提取 IP 地址
ifconfig | sed -n 	/inet /p	 | sed 	s/.*inet \([0-9.]\ \).*/\1/	

注意事项:

  1. 先测试再修改:用 sed 命令 预览结果,确认无误后再加 -i

  2. 正则表达式特殊字符(如 .*[]^$)需要转义。

  3. sed 默认不修改原文件,除非使用 -i

4、less

分页文件查看工具,相比 morecat,它支持前后翻页、搜索、高亮、跳转等功能,特别适合查看大文件(如日志、配置文件等)。

1. 基本语法
less [选项] 文件名
command | less
选项说明
-显示行号
-i搜索时忽略大小写
-F如果文件可一屏显示,则直接输出(类似 cat
-S禁止自动换行(长行需用 键横向滚动)
-X退出时不清理屏幕(保留 less 的输出)
-R显示 ASI 颜转义字符(适合查看彩日志)
/pattern打开文件后直接跳转到匹配 pattern 的第一个位置
2. 交互式操作(快捷键)**

(1)基本导航

快捷键功能
空格f向下翻一页
回车键或↓向下翻一行
bPage Up向上翻一页
u或下一页向上翻半页
d或下一页向下翻半页
g / Home跳到文件开头
G、结束跳到文件末尾
50%跳转到文件的 50% 位置
10克跳转到第 10 行

(2)搜索功能

快捷键功能
/模式向下搜索 pattern(正则表达式支持)
模式吗?向上搜索 pattern
n跳到下一个匹配项
跳到上一个匹配项
模式仅显示匹配 pattern 的行(类似 grep

()文件操作

快捷键功能
:n切换到下一个文件(打开多个文件时)
:p切换到上一个文件
v进入 vi 编辑器(编辑当前文件)
h显示帮助
退出 less

(4)标记位置

快捷键功能
m  字母标记当前位置(如 ma 标记为 a
 字母跳转到标记位置(如 a 跳回 a 标记)
. 常见用法示例
# 查看文件并显示行号
less - /var/log/syslog
# 搜索日志中的错误,进入 less后输入 `/error` 查所有 `error` 关键字
less /var/log
ginx/error.log
#查看命令输出(分页显示)
ls -l /etc | less
# 打开文件后直接跳转到匹配行
less  /error /var/log/syslog
# 禁止换行(适合查看长行日志),用 `→` 或 `←` 键横向滚动。
less -S /var/log/dmesg
# 保留颜输出(如 `grep --color` 的结果)
grep --color ERROR /var/log/syslog | less -R
4高级用法
# 结合 tail -f 实时查看日志
tail -f /var/log
ginx/access.log | less
# 按 F 进入 Follow Mode(类似 tail -f),Ctrl C 退出。
=============
# 只查看匹配的行
less -p error filename
#相当于 grep error /var/log/syslog | less

五、两个巨好用的xargs 和 awk工具

1、xargs 用法详解

xargs 是 Linux 中一个非常强大的命令,用于从标准输入构建并执行命令行。它通常与其他命令(如 findgrep 等)结合使用,以处理大量数据或文件。xargs 的核心功能是将输入数据转换为命令行参数。

1. 基础功能
  • 输入xargs 从标准输入(stdin)读取数据。

  • 输出:将输入数据作为参数传递给指定的命令并执行。

# 查文件并删除
find . -name *.tmp | xargs rm -f

# 多行输入转单行(默认用空格分隔)
cat  | xargs
2. 参数用法
选项说明
-n指定每次执行命令时使用的参数个数。
-I用输入项替换占位符(通常为 {})。
-p交互式模式,执行前提示用户确认。
-t打印执行的命令。
-r如果输入为空,则不执行命令。
-d指定输入的分隔符(默认是空格和换行)。
-a从文件读取输入,而不是标准输入。
-L指定每次执行命令时使用的行数。
-s设置命令行的最大长度。
--max-procs并行执行命令,指定最大进程数。
.使用事例
# 批量重命名文件
ls *.jpg | xargs -I {} mv {} prefix_{}

# 并行压缩文件
find . -name *.log | xargs -P 4 -I {} gzip {}

# 结合grep搜索多个文件
find /var/log -type f | xargs grep -l ERROR

示例 1:基本用法

将输入作为参数传递给 echo 命令:

Echo file1 file2 file | xargs Echo

输出:

File1 file2 file

示例 2:结合 find 使用

查当前目录下的 .txt 文件并删除:

到。-name *.txt | xargs rm

示例 :限制每次执行的参数个数(-n

每次只传递 2 个参数给 echo

Echo 1 2  4 5 | xargs -n 2 Echo

输出:

1 2
 4
5

示例 4:使用占位符(-I

将输入项替换为占位符 {}

echo file1 file2 file | xargs -I {} cp {} /backup/

这会将 file1file2file 分别复制到 /backup/ 目录。

示例 5:交互式模式(-p

在执行命令前提示用户确认:

回显“file1 file2 file” | xargs -p rm

输出:

Rm file1 file2 file ?

输入 y 确认执行。

示例 6:打印执行的命令(-t

在执行命令前打印命令:

回显“file1 file2 file” | xargs -t Echo

输出:

Echo file1 file2 file
File1 file2 file

示例 7:忽略空输入(-r

如果输入为空,则不执行命令:

-r echo “o input”

(无输出)

示例 8:指定输入分隔符(-d

使用逗号作为分隔符:

Echo file1,file2,file | xargs -d, Echo

输出:

File1 file2 file

示例 9:从文件读取输入(-a

从文件 读取输入:

Xargs - 回显

示例 10:并行执行命令(--max-procs

并行执行命令,最多同时运行 2 个进程:

回显“1 2  4 5”| xargs -n 1——max-procs=2 sleep

这会同时运行 2 个 sleep 进程。

4. 高级用法

结合 findxargs 处理文件名中的空格

如果文件名中包含空格,可以使用 find-print0xargs-0 选项:

到。-name *.txt -print0 | xargs -0 rm

批量重命名文件

将当前目录下的 .txt 文件重命名为 .bak

到。-name *.txt | xargs -I {} mv {} {}.bak

并行压缩文件

使用 xargsgzip 并行压缩文件:

到。-name *.log | xargs -n 1——max-procs=4 gzip .log
5. 注意事项
  1. 输入数据量xargs 默认会将所有输入数据作为参数传递给命令,如果数据量过大,可能会导致命令行过长。可以使用 -n-L 选项限制参数个数。

  2. 文件名中的特殊字符:如果文件名中包含空格或特殊字符,建议使用 find -print0xargs -0

  3. 安全性:在处理用户输入时,需谨慎使用 xargs,避免命令注入风险。

参考:xargs命令详解 - dashery - 博客园

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1164844.html

相关标签:无
上传时间: 2025-07-21 01:20:15
留言与评论(共有 6 条评论)
本站网友 待用快餐
17分钟前 发表
搜索error相关字段 grep -w timeout 日志文件.log      # 精确匹配单词(避免匹配partial),搜索timeout相关字段 grep -n 404 日志文件.log       # 显示行号,搜索404相关字段 grep -v DEBUG 日志文件.log        # 反向搜索(排除DEBUG行) 2
本站网友 滨州市地图
12分钟前 发表
/ app.log | grep CRITICAL 六
本站网友 saoutils
16分钟前 发表
删除
本站网友 希腊语
22分钟前 发表
文件名中的特殊字符:如果文件名中包含空格或特殊字符,建议使用 find -print0 和 xargs -0
本站网友 重庆市开县中学
2分钟前 发表
可以使用 -n 或 -L 选项限制参数个数