Linux 基础常用命令指南:查找、处理与监控

作者:快去debug2026.11.06 20:25浏览量:0

简介:本文以“找、提、看、处理、比、输出、监控”七大能力为主线,系统梳理 Linux 最基础的常用命令,覆盖 grep、sed、awk、tail 等工具的关键参数、典型用法与管道组合技巧,并结合日志排查、慢请求统计、实时监控三个实战场景,帮助你把零散命令串成可复用的命令行工作流,快速定位故障与性能瓶颈。

一、把命令当体系学:七个动作串起一条链路

初学者常见的困境是“命令背了一堆,排查问题时还是不知道从哪下手”。根本原因在于把命令当成孤立的知识点,而不是一条链路上的工具。无论是排查线上故障、定位性能瓶颈,还是理解系统内部行为,本质都遵循同一条路径:从海量信息中定位目标数据,提取关键字段,加工聚合后以可读形式输出,并对持续产生的数据保持观察。

这条路径可以拆成七个动作:

  • 找:在文件、目录甚至网络流量中定位包含关键信息的行;
  • 提:从一行文本中截取需要的字段或列;
  • 看:以人类友好的方式浏览、翻页、跟踪文件内容;
  • 处理:对文本做替换、删除、合并、转换;
  • 比:排序、去重、计数,让数据可比较;
  • 输出:把结果写入文件、拼接成报表,或交给下游程序;
  • 监控:对持续增长的数据保持观察,第一时间发现异常。

下文的命令都会挂到这条链路上,每条命令都说明“它解决哪个环节的问题、关键参数是什么、典型写法长什么样”。

二、文件与目录操作:一切工作的起点

在处理日志之前,你得先能找到文件、看懂文件、安全地移动和备份文件。这一组命令是使用频率最高的“地基”。

目录浏览与定位:

  1. ls -lh # 以人类可读的单位显示文件大小
  2. pwd # 打印当前所在目录
  3. cd /var/log # 切换到日志目录

文件管理与查找:

  1. cp access.log access.log.bak # 备份
  2. mv old.log archive/ # 移动或重命名
  3. mkdir -p /data/logs/app # 递归创建目录
  4. find /var/log -name "*.log" -mtime +7 # 找出 7 天前修改过的日志

find 是这一组里最值得深挖的命令:-name 按文件名匹配,-mtime 按修改时间过滤,-size 按大小过滤,再配合 -exec 或管道,可以把“找文件”和“处理文件”一步串起来,例如对找到的所有日志统一统计行数。

权限与属主:

  1. chmod 644 app.log # 设置读写权限
  2. chown deploy:deploy app.log # 变更属主与属组

日志类文件经常因为属主或权限不对导致服务写不进去,这是新手高频踩坑点,值得单独记住:遇到“服务起不来但代码没改”的情况,先检查文件属主和权限。

三、查找类命令:先定位,再深入

1. grep:正则匹配的绝对主力

grep 是“找”这个动作的核心,按正则表达式在文本中逐行匹配:

  1. grep "error" /var/log/syslog # 找包含 error 的行
  2. grep -i "error" app.log # 忽略大小写,ERROR/Error 都能命中
  3. grep -n "timeout" app.log # 输出带行号,方便回溯上下文
  4. grep -v "healthcheck" access.log # 反向过滤,排除健康检查噪声
  5. grep -r "panic" /etc/ # 递归搜索整个目录
  6. grep -c "ERROR" app.log # 只统计命中行数
  7. grep -C 3 "Exception" app.log # 额外打印命中行的前后 3 行

参数组合思路比死记参数更重要:-i 扩大匹配面、-v 缩小匹配面、-n 与 -C 提供上下文、-c 把“找”直接变成“数”。排查问题时,先用最宽的条件确认关键字存在,再逐步收紧条件,是更稳妥的路径。

2. 正则表达式:grep 的倍增器

  1. grep -E "error|fail|fatal" app.log # 多关键字任一命中
  2. grep -E "202[0-9]-[0-9]{2}" app.log # 匹配日期格式的行
  3. grep -E "GET|POST" access.log # 匹配请求方法

掌握“或(|)、字符组([0-9])、量词(+、{n})、行首行尾(^、$)”这几个基础元素,就能覆盖日常八成以上的匹配需求,这也是把 grep 用“活”的分水岭。

3. 新一代搜索工具:了解共性即可

除了 grep,业界还有一批现代化的搜索工具,名称各异,但共性非常明确:

  • 默认递归搜索当前目录,不用手动加 -r;
  • 自动跳过版本控制工具忽略清单里的文件和二进制文件,减少噪声;
  • 多线程并行扫描,在大型代码仓和海量日志目录里速度明显更快;
  • 部分工具支持直接在压缩包内检索、对多语言文本(含中文)友好,甚至允许一定程度的拼写容错,适合应对日志里出现的手误关键字。

具体选哪款不是重点,重点是理解“为什么会有这些改进”:搜索对象从单文件变成了代码仓,数据从纯英文变成了多语言,文件从明文变成了压缩包。理解了需求演变,工具的参数设计自然一看就懂,换任何工具都能快速上手。

4. 从文件扩展到网络流量

排查网络类问题时,“找”的对象可以从文件换成流量。思路是:利用系统自带的抓包能力把网络数据按行呈现,再交给 grep 类工具做关键字过滤,例如把请求方法或接口路径作为模式,快速确认请求有没有到达主机、返回了什么。这个“抓包 + 文本匹配”的组合,是定位“请求到底发没发出去”这类问题的利器。

四、文本处理:sed、awk 与一众小工具

定位到目标行之后,工作往往才完成一半——你还需要把数据变成结论。

1. sed:流式编辑,一行顶一段脚本

  1. sed 's/old/new/g' file.log # 全局替换
  2. sed 's/^ *//' file.log # 去掉行首空格
  3. sed -n '100,200p' file.log # 只打印第 100 至 200 行
  4. sed '/debug/d' file.log # 删除包含 debug 的行

sed 的强项是“对每一行做同样的编辑动作”。排查时的典型用法:先用 -n 配合行号范围截取片段;或先用替换把分隔符统一,再交给下游工具按列处理。

2. awk:按列处理与聚合统计的天花板

awk 默认按空白把每行拆成若干字段,$1 是第一列,$2 是第二列,以此类推:

  1. awk '{print $1, $3}' access.log # 打印第 1、3 列
  2. awk -F',' '{print $2}' data.csv # 指定逗号作为分隔符
  3. awk '$9 == 500 {print $7}' access.log # 条件过滤:状态码为 500 时打印第 7 列
  4. awk '{sum += $NF} END {print sum/NR}' rt.log # 对最后一列求平均

最后一条示例值得专门记住:把“过滤、累加、统计、输出”压缩在一行里完成,这是 awk 在性能分析场景里最常见的形态。统计平均响应时间、按字段累加计数、求总量再算分位,都是这一个模式的变体。

3. 小工具各司其职

  1. cut -d ',' -f1,3 data.csv # 按分隔符截取第 1、3 列
  2. tr -s ' ' < raw.log # 把连续空格压缩成一个
  3. paste service.log metric.log # 两个文件按行并排拼接
  4. sort -nr response_time.log # 按数字逆序排序
  5. uniq -c # 去重并计数(需先 sort)
  6. wc -l app.log # 统计行数

这些工具单看都很简单,价值全在组合里,下一节展开。

五、文件查看:大文件的正确打开方式

日志动辄几百兆,直接全量打开既慢又没有意义。正确姿势是按需取用:

  1. cat part1.log part2.log > merged.log # 串连合并多个文件
  2. head -n 20 api.log # 看开头 20 行,确认文件格式
  3. tail -n 50 error.log # 看最后 50 行,即最新记录
  4. tail -f /var/log/app/access.log # 持续跟随新增内容(这就是监控!)
  5. tac error.log | head -n 50 # 倒序输出,从最新记录往前看
  6. less /var/log/syslog # 分页浏览

less 值得多花几分钟熟悉:/关键字 向下搜索、?关键字 向上搜索、g 回到开头、G 跳到末尾、q 退出。对几百兆的文件,这种分页搜索比任何图形界面编辑器都快。

特别注意 tail -f 隐含的语义:它就是最朴素的“监控”。加上 -F 参数还能在日志文件被轮转(旧文件改名、新文件重建)之后继续跟随,这在线上排查时几乎是必需的,否则文件一切割你就“跟丢”了。

六、管道与组合:命令行的积木哲学

Linux 命令行真正的威力在管道符 |:把上一个命令的输出变成下一个命令的输入。单个命令是一块积木,管道把积木搭成流水线。

场景一:实时追踪 + 关键字过滤

  1. tail -f app.log | grep -i "error"

一边滚动输出一边筛关键词,出问题的瞬间就能看到,这是值守发版时最常用的组合。

场景二:统计访问量最高的前 10 个来源

  1. awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

这条流水线是“提、比、输出”三个动作的经典串联:awk 取出第一列,sort 排序让相同值相邻,uniq -c 去重并计数,再按计数逆序取前几名。掌握这一个模式,统计“Top N”类问题(访问来源、热点接口、错误类型分布)全部通用。

场景三:慢请求分析

  1. grep "slow" app.log | awk '{print $7, $NF}' | sort -k2 -nr | head -20

先定位慢请求行,再提取接口与耗时两列,按耗时逆序取前 20,一条命令得到一份“最慢接口榜单”。

其他高价值搭档:

  • tee:把输出同时送到屏幕和文件,边看边留档:tail -f app.log | tee today.log | grep error
  • xargs:把上游输出变成下游参数:find . -name "*.log" | xargs grep -l "timeout"
  • 输出重定向:> 覆盖写入、>> 追加写入、2>&1 把错误流合并到标准输出,排查后台任务时极其常用。

七、系统状态与监控:从“看日志”升级为“看系统”

日志只是系统的一个切面。定位性能瓶颈时,还需要一组观察系统本身的命令:

  1. ps aux | grep myapp # 查看目标进程状态
  2. top # 实时观察 CPU、内存与进程占用
  3. df -h # 磁盘总体空间(日志写满磁盘是经典事故)
  4. du -sh /var/log/* # 逐层定位到底是哪个目录占的空间
  5. free -h # 内存使用情况
  6. uptime # 系统负载概览
  7. watch -n 2 "df -h" # 每 2 秒重复执行一条命令

其中 df -h 与 du -sh 的搭配是“磁盘告急”场景的标准动作:先看总量是否异常,再逐层下钻找到元凶。tail -f 解决“单文件监控”,watch 解决“命令级监控”;当监控对象扩展到多台主机、多类指标时,就进入了日志服务、监控告警这类通用云产品的范畴,但其底层的判断逻辑,依然建立在这些基础命令所训练出的直觉之上。

八、把命令沉淀为方法:三条学习建议

  1. 按场景记组合,而不是按字母表记命令。 一个“统计 Top N”的管道组合,比十个孤立的参数更有用,因为它可以直接迁移到下一个问题上。
  2. 善用手册。 man grep、man awk 随时可查,参数记不全并不丢人,思路断了才致命;先想清楚“这一步要完成哪个动作”,再去查怎么写。
  3. 自制知识卡片。 每张卡片三栏——场景(我要解决什么)、命令组合(我怎么解决)、关键参数(为什么这么写)。自己总结一遍并定期复习,比收藏别人的清单有效得多。

九、小结

Linux 基础命令的价值不在数量,而在结构。围绕“找、提、看、处理、比、输出、监控”七个动作:用 grep 定位,用 awk 与 sed 加工,用 sort 与 uniq 比较,用 head、tail、less 按需取用,用管道把一切串联,用 tail -f 与 top 保持观察——这套组合拳足以覆盖日常开发与运维的绝大多数场景。把这些命令练到“手比脑快”,你面对再混乱的日志海洋,也能有条不紊地一步步逼近答案。