简介:本文以“找、提、看、处理、比、输出、监控”七大能力为主线,系统梳理 Linux 最基础的常用命令,覆盖 grep、sed、awk、tail 等工具的关键参数、典型用法与管道组合技巧,并结合日志排查、慢请求统计、实时监控三个实战场景,帮助你把零散命令串成可复用的命令行工作流,快速定位故障与性能瓶颈。
初学者常见的困境是“命令背了一堆,排查问题时还是不知道从哪下手”。根本原因在于把命令当成孤立的知识点,而不是一条链路上的工具。无论是排查线上故障、定位性能瓶颈,还是理解系统内部行为,本质都遵循同一条路径:从海量信息中定位目标数据,提取关键字段,加工聚合后以可读形式输出,并对持续产生的数据保持观察。
这条路径可以拆成七个动作:
下文的命令都会挂到这条链路上,每条命令都说明“它解决哪个环节的问题、关键参数是什么、典型写法长什么样”。
在处理日志之前,你得先能找到文件、看懂文件、安全地移动和备份文件。这一组命令是使用频率最高的“地基”。
目录浏览与定位:
ls -lh # 以人类可读的单位显示文件大小pwd # 打印当前所在目录cd /var/log # 切换到日志目录
文件管理与查找:
cp access.log access.log.bak # 备份mv old.log archive/ # 移动或重命名mkdir -p /data/logs/app # 递归创建目录find /var/log -name "*.log" -mtime +7 # 找出 7 天前修改过的日志
find 是这一组里最值得深挖的命令:-name 按文件名匹配,-mtime 按修改时间过滤,-size 按大小过滤,再配合 -exec 或管道,可以把“找文件”和“处理文件”一步串起来,例如对找到的所有日志统一统计行数。
权限与属主:
chmod 644 app.log # 设置读写权限chown deploy:deploy app.log # 变更属主与属组
日志类文件经常因为属主或权限不对导致服务写不进去,这是新手高频踩坑点,值得单独记住:遇到“服务起不来但代码没改”的情况,先检查文件属主和权限。
grep 是“找”这个动作的核心,按正则表达式在文本中逐行匹配:
grep "error" /var/log/syslog # 找包含 error 的行grep -i "error" app.log # 忽略大小写,ERROR/Error 都能命中grep -n "timeout" app.log # 输出带行号,方便回溯上下文grep -v "healthcheck" access.log # 反向过滤,排除健康检查噪声grep -r "panic" /etc/ # 递归搜索整个目录grep -c "ERROR" app.log # 只统计命中行数grep -C 3 "Exception" app.log # 额外打印命中行的前后 3 行
参数组合思路比死记参数更重要:-i 扩大匹配面、-v 缩小匹配面、-n 与 -C 提供上下文、-c 把“找”直接变成“数”。排查问题时,先用最宽的条件确认关键字存在,再逐步收紧条件,是更稳妥的路径。
grep -E "error|fail|fatal" app.log # 多关键字任一命中grep -E "202[0-9]-[0-9]{2}" app.log # 匹配日期格式的行grep -E "GET|POST" access.log # 匹配请求方法
掌握“或(|)、字符组([0-9])、量词(+、{n})、行首行尾(^、$)”这几个基础元素,就能覆盖日常八成以上的匹配需求,这也是把 grep 用“活”的分水岭。
除了 grep,业界还有一批现代化的搜索工具,名称各异,但共性非常明确:
-r;具体选哪款不是重点,重点是理解“为什么会有这些改进”:搜索对象从单文件变成了代码仓,数据从纯英文变成了多语言,文件从明文变成了压缩包。理解了需求演变,工具的参数设计自然一看就懂,换任何工具都能快速上手。
排查网络类问题时,“找”的对象可以从文件换成流量。思路是:利用系统自带的抓包能力把网络数据按行呈现,再交给 grep 类工具做关键字过滤,例如把请求方法或接口路径作为模式,快速确认请求有没有到达主机、返回了什么。这个“抓包 + 文本匹配”的组合,是定位“请求到底发没发出去”这类问题的利器。
定位到目标行之后,工作往往才完成一半——你还需要把数据变成结论。
sed 's/old/new/g' file.log # 全局替换sed 's/^ *//' file.log # 去掉行首空格sed -n '100,200p' file.log # 只打印第 100 至 200 行sed '/debug/d' file.log # 删除包含 debug 的行
sed 的强项是“对每一行做同样的编辑动作”。排查时的典型用法:先用 -n 配合行号范围截取片段;或先用替换把分隔符统一,再交给下游工具按列处理。
awk 默认按空白把每行拆成若干字段,$1 是第一列,$2 是第二列,以此类推:
awk '{print $1, $3}' access.log # 打印第 1、3 列awk -F',' '{print $2}' data.csv # 指定逗号作为分隔符awk '$9 == 500 {print $7}' access.log # 条件过滤:状态码为 500 时打印第 7 列awk '{sum += $NF} END {print sum/NR}' rt.log # 对最后一列求平均
最后一条示例值得专门记住:把“过滤、累加、统计、输出”压缩在一行里完成,这是 awk 在性能分析场景里最常见的形态。统计平均响应时间、按字段累加计数、求总量再算分位,都是这一个模式的变体。
cut -d ',' -f1,3 data.csv # 按分隔符截取第 1、3 列tr -s ' ' < raw.log # 把连续空格压缩成一个paste service.log metric.log # 两个文件按行并排拼接sort -nr response_time.log # 按数字逆序排序uniq -c # 去重并计数(需先 sort)wc -l app.log # 统计行数
这些工具单看都很简单,价值全在组合里,下一节展开。
日志动辄几百兆,直接全量打开既慢又没有意义。正确姿势是按需取用:
cat part1.log part2.log > merged.log # 串连合并多个文件head -n 20 api.log # 看开头 20 行,确认文件格式tail -n 50 error.log # 看最后 50 行,即最新记录tail -f /var/log/app/access.log # 持续跟随新增内容(这就是监控!)tac error.log | head -n 50 # 倒序输出,从最新记录往前看less /var/log/syslog # 分页浏览
less 值得多花几分钟熟悉:/关键字 向下搜索、?关键字 向上搜索、g 回到开头、G 跳到末尾、q 退出。对几百兆的文件,这种分页搜索比任何图形界面编辑器都快。
特别注意 tail -f 隐含的语义:它就是最朴素的“监控”。加上 -F 参数还能在日志文件被轮转(旧文件改名、新文件重建)之后继续跟随,这在线上排查时几乎是必需的,否则文件一切割你就“跟丢”了。
Linux 命令行真正的威力在管道符 |:把上一个命令的输出变成下一个命令的输入。单个命令是一块积木,管道把积木搭成流水线。
场景一:实时追踪 + 关键字过滤
tail -f app.log | grep -i "error"
一边滚动输出一边筛关键词,出问题的瞬间就能看到,这是值守发版时最常用的组合。
场景二:统计访问量最高的前 10 个来源
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
这条流水线是“提、比、输出”三个动作的经典串联:awk 取出第一列,sort 排序让相同值相邻,uniq -c 去重并计数,再按计数逆序取前几名。掌握这一个模式,统计“Top N”类问题(访问来源、热点接口、错误类型分布)全部通用。
场景三:慢请求分析
grep "slow" app.log | awk '{print $7, $NF}' | sort -k2 -nr | head -20
先定位慢请求行,再提取接口与耗时两列,按耗时逆序取前 20,一条命令得到一份“最慢接口榜单”。
其他高价值搭档:
tee:把输出同时送到屏幕和文件,边看边留档:tail -f app.log | tee today.log | grep errorxargs:把上游输出变成下游参数:find . -name "*.log" | xargs grep -l "timeout"> 覆盖写入、>> 追加写入、2>&1 把错误流合并到标准输出,排查后台任务时极其常用。日志只是系统的一个切面。定位性能瓶颈时,还需要一组观察系统本身的命令:
ps aux | grep myapp # 查看目标进程状态top # 实时观察 CPU、内存与进程占用df -h # 磁盘总体空间(日志写满磁盘是经典事故)du -sh /var/log/* # 逐层定位到底是哪个目录占的空间free -h # 内存使用情况uptime # 系统负载概览watch -n 2 "df -h" # 每 2 秒重复执行一条命令
其中 df -h 与 du -sh 的搭配是“磁盘告急”场景的标准动作:先看总量是否异常,再逐层下钻找到元凶。tail -f 解决“单文件监控”,watch 解决“命令级监控”;当监控对象扩展到多台主机、多类指标时,就进入了日志服务、监控告警这类通用云产品的范畴,但其底层的判断逻辑,依然建立在这些基础命令所训练出的直觉之上。
man grep、man awk 随时可查,参数记不全并不丢人,思路断了才致命;先想清楚“这一步要完成哪个动作”,再去查怎么写。Linux 基础命令的价值不在数量,而在结构。围绕“找、提、看、处理、比、输出、监控”七个动作:用 grep 定位,用 awk 与 sed 加工,用 sort 与 uniq 比较,用 head、tail、less 按需取用,用管道把一切串联,用 tail -f 与 top 保持观察——这套组合拳足以覆盖日常开发与运维的绝大多数场景。把这些命令练到“手比脑快”,你面对再混乱的日志海洋,也能有条不紊地一步步逼近答案。