admin 管理员组文章数量: 1086250
Linux-系统日志查询命令详解
一、tail & head
tail主要用于显示文件的末尾内容。
-
将每个FILE的最后10行打印到标准输出。
-
如果有多个文件,在每个文件之前加上一个头文件,给出文件名。
-
如果没有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:显示版本信息。
3、栗子:
#1. 显示文件的末尾几行内容(默认10行): tail filename #2. 显示文件的末尾20行内容: tail -n 20 filename #3. 实时监控文件的新增内容: 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-23 18:1[0-9]' ------查找最新的100行中时间范围在2022-05-23 16:10-2022-05-23 16:19范围中的行
4、系统描述:
head用于显示文件的开头部分
其他参数基本和tail一样,用到的相对少点。
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;
二、vim
1、日志查找用法
1、关键词搜索
/关键词 " 正向搜索(n跳下一个,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/* # 只显示包含匹配项的文件名
3、上下文查看(Before/After)
grep -A 3 "Exception" app.log # 显示匹配行及其后3行(After) grep -B 2 "WARN" app.log # 显示匹配行及前2行(Before) grep -C 1 "ERROR" app.log # 显示匹配行前后各1行(Context)
4、正则表达式搜索
grep -E "50[0-9]" access.log # 匹配500-599状态码(扩展正则) grep "^2023-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 '/2023-10-01 09:00:/,/2023-10-01 10:00:/' app.log | grep "CRITICAL"
六、组合其他命令
-
高频错误统计
grep -o "ERROR .*" app.log | sort | uniq -c | sort -nr
-
实时日志监控
tail -f app.log | grep——line-buffered “ERROR”
-
多条件过滤
grep -v “预期错误”
7、性能优化技巧
grep -m 100 "panic" app.log # 只显示前100个匹配项(大文件时提速) grep --color=always "404" | less -R # 高亮结果并分页 zgrep "OOM" /var/log/syslog*.gz # 直接搜索压缩日志
八、实用场景示例
-
查询Nginx访问日志
grep "GET /api" access.log | awk '{print $1,$7,$9}' # 提取IP、路径、状态码
-
分析Java异常堆栈
grep -A 10 "Caused by:" app.log # 显示异常堆栈上下文
-
监控Kubernetes日志
kubectl logs -f pod-name | grep -E “ERROR|WARN”
四、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文件名
3结合管道
# 前面命令执行结果分页展示 ls -l /etc | more
3、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/' file.txt # 每行第一个 "old" 替换为 "new" sed 's/old ew/g' file.txt # 替换所有匹配的 "old"(全局替换) sed 's/old ew/2' file.txt # 只替换每行第二个 "old" sed 's/old ew/ig' file.txt # 忽略大小写(i flag)并全局替换(g flag) # 实例: echo "hello world" | sed 's/hello/hi/' # 输出:hi world
2、删除行:d
sed '3d' file.txt # 删除第 3 行 sed '1,5d' file.txt # 删除 1~5 行 sed '/pattern/d' file.txt # 删除匹配 "pattern" 的行 sed '/^$/d' file.txt # 删除所有空行 # 实例: seq 10 | sed '3,6d' # 输出 1 2 7 8 9 10(删除 3~6 行)
3、打印行:p
sed -n '3p' file.txt # 只打印第 3 行 sed -n '1,5p' file.txt # 打印 1~5 行 sed -n '/pattern/p' file.txt # 打印匹配 "pattern" 的行 # 实例: sed -n '/error/p' log.txt # 打印所有含 "error" 的行
4、插入、追加、修改行
sed '3i\插入的内容' file.txt # 在第 3 行**前**插入一行 sed '3a\追加的内容' file.txt # 在第 3 行**后**追加一行 sed '$a\最后一行追加' file.txt # 在文件末尾追加一行 # 实例: sed '2i\### 这是新插入的行 ###' file.txt ========== sed '/pattern/c\新内容' file.txt # 匹配的行替换为新内容 sed '5c\这是新的第5行' file.txt # 修改第 5 行 # 实例: sed '/admin/c\### 权限已变更 ###' users.txt =========== sed '=' file.txt # 显示行号(行号单独占一行) sed -n '=;p' file.txt # 显示行号 内容(需结合 `-n` 和 `p`) sed -n '10,20p' file.txt # 打印 10~20 行
3、高级用法
# 正则表达式 sed 's/[0-9]\ /NUM/g' file.txt # 所有数字替换为 "NUM" sed 's/^#.*//' file.txt # 删除所有注释行(以 # 开头) sed '/^$/d' file.txt # 删除空行 ============ # 引用匹配内容(& 和 \1, \2) echo "123 abc" | sed 's/[0-9]\ /& &/' # 输出:123 123 abc echo "hello 123" | sed 's/\([a-z]\ \) \([0-9]\ \)/\2 \1/' # 输出:123 hello ============ # 多命令组合 sed -e 's/foo/bar/' -e '/baz/d' file.txt # 先替换,再删除含 "baz" 的行 sed 's/foo/bar/; /baz/d' file.txt ============ # 直接修改文件 sed -i 's/old ew/g' file.txt # 直接修改文件(谨慎使用!) sed -i.bak 's/old ew/g' file.txt # 修改前备份原文件(生成 file.txt.bak)
实例:
# 批量替换文件内容 sed -i 's/Windows/Linux/g' *.txt # 当前目录所有 .txt 文件中的 "Windows" 替换为 "Linux" # 提取 IP 地址 ifconfig | sed -n '/inet /p' | sed 's/.*inet \([0-9.]\ \).*/\1/'
注意事项:
-
先测试再修改:用
sed '命令' file.txt
预览结果,确认无误后再加-i
。 -
正则表达式特殊字符(如
.*[]^$
)需要转义。 -
sed
默认不修改原文件,除非使用-i
4、less
分页文件查看工具,相比 more
和 cat
,它支持前后翻页、搜索、高亮、跳转等功能,特别适合查看大文件(如日志、配置文件等)。
1. 基本语法
less [选项] 文件名 command | less
选项 | 说明 |
---|---|
-N | 显示行号 |
-i | 搜索时忽略大小写 |
-F | 如果文件可一屏显示,则直接输出(类似 cat ) |
-S | 禁止自动换行(长行需用 → 键横向滚动) |
-X | 退出时不清理屏幕(保留 less 的输出) |
-R | 显示 ANSI 颜色转义字符(适合查看彩色日志) |
+/pattern | 打开文件后直接跳转到匹配 pattern 的第一个位置 |
2. 交互式操作(快捷键)**
(1)基本导航
快捷键 | 功能 |
---|---|
空格 或 f | 向下翻一页 |
回车键或↓ | 向下翻一行 |
b 或 Page Up | 向上翻一页 |
u或下一页 | 向上翻半页 |
d或下一页 | 向下翻半页 |
g / Home | 跳到文件开头 |
G、结束 | 跳到文件末尾 |
50% | 跳转到文件的 50% 位置 |
10克 | 跳转到第 10 行 |
(2)搜索功能
快捷键 | 功能 |
---|---|
/模式 | 向下搜索 pattern (正则表达式支持) |
模式吗? | 向上搜索 pattern |
n | 跳到下一个匹配项 |
N | 跳到上一个匹配项 |
模式 | 仅显示匹配 pattern 的行(类似 grep ) |
(3)文件操作
快捷键 | 功能 |
---|---|
:n | 切换到下一个文件(打开多个文件时) |
:p | 切换到上一个文件 |
v | 进入 vi 编辑器(编辑当前文件) |
h | 显示帮助 |
问 | 退出 less |
(4)标记位置
快捷键 | 功能 |
---|---|
m + 字母 | 标记当前位置(如 ma 标记为 a ) |
' + 字母 | 跳转到标记位置(如 'a 跳回 a 标记) |
3. 常见用法示例
# 查看文件并显示行号 less -N /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 中一个非常强大的命令,用于从标准输入构建并执行命令行。它通常与其他命令(如 find
、grep
等)结合使用,以处理大量数据或文件。xargs
的核心功能是将输入数据转换为命令行参数。
1. 基础功能
-
输入:
xargs
从标准输入(stdin)读取数据。 -
输出:将输入数据作为参数传递给指定的命令并执行。
# 查找文件并删除 find . -name "*.tmp" | xargs rm -f # 多行输入转单行(默认用空格分隔) cat urls.txt | xargs
2. 参数用法
选项 | 说明 |
---|---|
-n | 指定每次执行命令时使用的参数个数。 |
-I | 用输入项替换占位符(通常为 {} )。 |
-p | 交互式模式,执行前提示用户确认。 |
-t | 打印执行的命令。 |
-r | 如果输入为空,则不执行命令。 |
-d | 指定输入的分隔符(默认是空格和换行)。 |
-a | 从文件读取输入,而不是标准输入。 |
-L | 指定每次执行命令时使用的行数。 |
-s | 设置命令行的最大长度。 |
--max-procs | 并行执行命令,指定最大进程数。 |
3.使用事例
# 批量重命名文件 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 file3" | xargs Echo
输出:
File1 file2 file3
示例 2:结合 find
使用
查找当前目录下的 .txt
文件并删除:
找到。-name "*.txt" | xargs rm
示例 3:限制每次执行的参数个数(-n
)
每次只传递 2 个参数给 echo
:
Echo "1 2 3 4 5" | xargs -n 2 Echo
输出:
1 2 3 4 5
示例 4:使用占位符(-I
)
将输入项替换为占位符 {}
:
echo "file1 file2 file3" | xargs -I {} cp {} /backup/
这会将 file1
、file2
、file3
分别复制到 /backup/
目录。
示例 5:交互式模式(-p
)
在执行命令前提示用户确认:
回显“file1 file2 file3” | xargs -p rm
输出:
Rm file1 file2 file3 ?
输入 y
确认执行。
示例 6:打印执行的命令(-t
)
在执行命令前打印命令:
回显“file1 file2 file3” | xargs -t Echo
输出:
Echo file1 file2 file3 File1 file2 file3
示例 7:忽略空输入(-r
)
如果输入为空,则不执行命令:
-r echo “No input”
(无输出)
示例 8:指定输入分隔符(-d
)
使用逗号作为分隔符:
Echo "file1,file2,file3" | xargs -d, Echo
输出:
File1 file2 file3
示例 9:从文件读取输入(-a
)
从文件 input.txt
读取输入:
Xargs - input.txt回显
示例 10:并行执行命令(--max-procs
)
并行执行命令,最多同时运行 2 个进程:
回显“1 2 3 4 5”| xargs -n 1——max-procs=2 sleep
这会同时运行 2 个 sleep
进程。
4. 高级用法
结合 find
和 xargs
处理文件名中的空格
如果文件名中包含空格,可以使用 find
的 -print0
和 xargs
的 -0
选项:
找到。-name "*.txt" -print0 | xargs -0 rm
批量重命名文件
将当前目录下的 .txt
文件重命名为 .bak
:
找到。-name "*.txt" | xargs -I {} mv {} {}.bak
并行压缩文件
使用 xargs
和 gzip
并行压缩文件:
找到。-name "*.log" | xargs -n 1——max-procs=4 gzip .log
5. 注意事项
-
输入数据量:
xargs
默认会将所有输入数据作为参数传递给命令,如果数据量过大,可能会导致命令行过长。可以使用-n
或-L
选项限制参数个数。 -
文件名中的特殊字符:如果文件名中包含空格或特殊字符,建议使用
find -print0
和xargs -0
。 -
安全性:在处理用户输入时,需谨慎使用
xargs
,避免命令注入风险。
参考:xargs命令详解 - dashery - 博客园
版权声明:本文标题:常用日志查询命令详解(vim、tail、cat、grep、less、more、sed、xargs) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1747521078a2539391.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论