说实话,写《Linux系统常用命令》这个系列挺费心血的。前六篇把最基础的 ls、cd、cp、mv、rm、grep、awk、sed、tar 这些高频操作都讲透了,但每次我打开评论区,总有人催更,问“什么时候讲 find”“scp 怎么用才能不踩坑”“线上 CPU 飙高到底怎么定位”。所以这篇第七篇,我打算换个思路,不按命令清单从头罗列,而是按“真实工作场景”来组织,挑那些最容易被忽略、但关键时刻能救命的命令和用法来讲。
这篇会覆盖文件定位与内容检索、远程传输与增量同步、进程排查与故障定位、vim 高频编辑效率,以及命令行的使用习惯养成。适合的人群很清晰:刚入门 Linux 一两年的运维、后端开发、嵌入式工程师,以及那些已经把基础命令背熟、但想知道“老手到底怎么用命令”的人。
1. 文件定位与内容检索:find、grep 的高级打开方式
很多人的 find 用法停留在 find / -name "xxx",grep 停留在 grep "xxx" file。这没有错,但面对真实的服务器环境,这两个命令的组合使用才是效率的关键。
1.1 find 的精确筛选:不再大海捞针
find 最强的地方不是按名字找文件,而是按“元数据”组合筛选。线上排查磁盘占用时,我需要找出所有大于 500M、超过 30 天没动过的日志文件,一条命令就能扫完:
bash复制find /var/log -type f -size +500M -mtime +30 -exec ls -lh {} \;
这里 -type f 限定只查普通文件,-size +500M 是大文件,-mtime +30 是修改时间早于 30 天前。-exec ls -lh {} \; 是逐个把结果取出来看大小,说白就是“找到什么,就对它执行什么操作”。
很多人在 -exec 的结尾符号上反复纠结。我记了这么多年只记住一个规律:{} 是占位符,代表每个匹配到的文件,后面的 \; 是命令结束符,必须转义。如果你觉得这个写法难记,还有一个更简单的方法:用管道加 xargs,效果类似,但处理大量文件时更稳:
bash复制find /data/logs -name "*.log" -mtime +7 | xargs rm -f
但我不建议你这么莽撞地删,生产环境至少先 ls 一次确认。另外一个实用场景是按时间精确“掐点”找,比如游戏服务器凌晨 3 点 20 分左右出现报错,想查这个时间点改过的配置文件:
bash复制find /etc/nginx -type f -newermt "2025-01-08 03:15:00" ! -newermt "2025-01-08 03:30:00"
-newermt 可以对单个文件直接带日期时间比较,配合 ! -newermt 就能圈定一个时间窗口。这个用法在定位“谁动了我的配置”时特别有效,比翻 bash 历史快得多。
1.2 grep 与 rg:内容检索的降维打击
grep 系里有两个场景我会区分:日志已经落盘,用 grep -E "ERROR|FATAL" app.log 是常规操作;但如果是搜一个几万行代码的工程,我更推荐用 rg(ripgrep)。rg 是 Rust 写的,性能比 grep 快很多,而且默认会忽略掉 .gitignore 里面的文件和二进制文件,专注代码搜索引擎。
上个月帮同事定位一个老项目里的接口定义,代码量大概十几万行,用 grep 全量递归搜要等将近 7 秒:
bash复制grep -r "getUserInfo" /data/project/src
换 rg 之后,1 秒内出结果:
bash复制rg "getUserInfo" /data/project/src
如果你暂时没条件装 rg,grep 也够用,但一定记住两个选项:-n 显示行号,-C 5 显示匹配行前后各 5 行上下文。没有行号的 grep 结果在大型日志里等于没用。
还需要特别注意 grep 的经典坑:搜索的字符串如果带 - 开头,会被当成选项解析。比如搜 -auth 这个词,必须写成:
bash复制grep -- "-auth" login.log
-- 之后的参数全部视为字面值,这是很多新手踩过坑的地方。
1.3 locate:最被低估的快速查找
find 是按目录实时扫,代价是文件量大时非常慢。如果你只是想快速知道“这个文件在不在系统里”,用 locate 才是最优解。它查询的是一个预生成的文件索引库,速度是毫秒级:
bash复制locate nginx.conf
但 locate 的索引不是实时更新的,新
