☰
Linux命令速查:按场景分类的运维排障实战手册
2026/10/3 3:00:01 网站建设 项目流程

说实话,这年头谁电脑里没存过几张“Linux 常用命令大全”的截图?我自己从刚入行那会儿就开始收集这类速查表,手机上存过、书签里收藏过、笔记软件里记过。后来发现一个问题:收藏从不等于掌握。速查表真正的作用不是让你背下来,而是在关键时刻替你省下翻文档的那几分钟,尤其是线上出故障、领导站在背后、业务方在群里连环催的时候。

今天分享的这份分类速查表,是我这几年把它当成“桌面工具”用的版本。它不是教科书式的命令罗列,而是按日常干活的实际场景来分类——文件操作、日志排查、网络诊断、容器管理、面试突击,每一类都配了使用场景和常见的坑。无论你是刚接触 Linux 的新手,还是想系统梳理一遍命令体系的运维、开发,这篇文章应该都能让你有点收获。

1. 速查表不是背出来的:先搞懂命令的本质

1.1 命令只是工具,不是知识

我见过太多人学 Linux 命令的方式:买了一本六七百页的《Linux 命令大全》,从第一页开始背,背到ls的十七种参数就放弃了。这是典型的把工具当知识在学,方向完全反了。

命令的本质是工具,就像螺丝刀和扳手,你不需要背下每种螺丝刀的型号,你只需要知道“拧十字螺丝用十字头,拧内六角用内六角扳手”,然后在你真的需要拧螺丝的时候,知道去哪把找那把对的工具。Linux 命令也一样,ls、cd、cat这些高频命令用几次就肌肉记忆了;traceroute、iostat这种低频命令,你只需要知道“排查网络延迟用它”“排查磁盘 IO 用它”,到了现场再man一下或者查下速查表就行。

所以这份速查表的第一个设计原则是:按场景分类,不按字母排序。字母排序适合字典,不适合干活。真正干活的时候,你的脑子里想的是“我要看日志的最新内容”,而不是“我要找一个 L 开头的命令”。

1.2 我推荐的三层分类法

用了这么多年,我把 Linux 命令分成三层,对应不同的使用频率和掌握程度:

  • 第一层:肌肉层命令。每天都要敲的,比如ls、cd、cat、grep、ps、df。这类命令不需要看速查表,敲多了自然熟,目标是形成肌肉记忆。
  • 第二层:场景层命令。平时用不到,但一到特定场景就特别重要,比如排查网络时的traceroute、分析磁盘 IO 的iostat、批量改文本的sed。这类命令适合做成速查表,用时快速定位。
  • 第三层:专家层命令。比如gdb调试、perf性能分析、strace系统调用跟踪。这类命令有很高的学习曲线,用之前需要先了解背景知识,速查表只能起到“提词器”的作用。

你只需要把第一层练熟,第二层做好索引,第三层知道有这个东西且能看懂基本输出就行。下面我按这个思路,把常用命令分类展开。

2. 文件与文本处理:每天敲得最多的命令族

2.1 文件查看:从 cat 到 tail -f 的进化

很多人对文件查看的理解停留在cat,cat确实能把整个文件内容怼到屏幕上,但它有两个问题:一是文件一大,终端刷屏刷到你怀疑人生;二是你根本没法定位到想看的位置。所以我的建议是:小文件用cat,大文件用less,跟踪日志用tail -f。

less是我最推荐的文件查看工具,它支持上下翻页、搜索关键字、跳转到指定行。打开一个几百 MB 的日志文件,less秒开,cat能把终端卡死。常用的操作:/关键字往下搜,?关键字往上搜,g跳到文件头,G跳到文件尾,q退出。这几个键记住,基本就可以扔掉cat了。

tail -f是排查日志的利器,-f的意思是 follow,实时跟踪文件末尾新增的内容。当你在排线上 bug,需要盯着日志看输出时,tail -f app.log就是你的主战场。如果只想看最后 100 行,tail -100 app.log。反过来,如果文件不大但想看开头部分,head -50 app.log。

这里插一个我踩过的坑:用tail -f看日志,终端挂着不动,你以为程序挂了,其实是因为日志写得太慢,或者你打开的日志文件根本没有新内容写入。这时候先确认文件有没有在增长,用ls -l看文件大小,或者加个-n 0参数直接从当前尾部开始跟踪。

2.2 搜索与统计:grep、find、awk 的组合玩法

grep是 Linux 里使用率前三的命令,它的核心功能是在文件内容里搜关键字,但很多人只会grep xxx file。实际工作中,我几乎总是搭配参数使用:

  • grep -i keyword file:忽略大小写,搜日志的时候尤其有用,因为你不知道应用是输出Error还是ERROR。
  • grep -v keyword file:反向匹配,过滤掉含关键字的行,相当于“排除法”。
  • grep -n keyword file:显示行号,定位到具体的位置,方便去源码里查。
  • grep -r keyword /path/to/dir:递归搜索整个目录,适合在项目代码里找关键字。
  • grep -c keyword file:统计匹配的行数,不显示内容,适合统计错误数量。比如排查接口报错,直接grep -c "Exception" app.log看有多少次异常。

find是另一个高频命令,它是按文件名、大小、时间等条件在目录树里找文件。比如:

  • find / -name "nginx.conf" 2>/dev/null:全局找文件名,2>/dev/null把权限报错丢进黑洞。
  • find /data -mtime -3:查找最近 3 天内修改过的文件,排查“谁动了我的服务器”时很有用。
  • find /data -type f -size +100M:找大于 100MB 的文件,清理磁盘时必备。

至于awk,这是一个能让你从“会 Linux”进阶到“懂文本处理”的命令。它的核心是按列处理文本。比如日志格式是“时间 IP 状态码 耗时”,你想提取所有耗时超过 3 秒的请求 IP,一条awk就能搞定。我常用的是awk '{print $1, $4}'这种提取列的用法,配合sort | uniq -c还能做简单的统计排序。不过awk的语法需要单独学习,速查表里先记住两个最常用的:awk '{print $N}'取第 N 列,awk -F',' '{print $1}'指定分隔符取列。

2.3 修改与编辑:sed 和 vim 的实用片段

如果有人问我,服务器上改文件用什么,我的答案是sed。sed是流编辑器,非常适合做批量的、非交互式的文本替换。比如:

sed -i 's/old_string/new_string/g' config.conf

这条命令把config.conf里所有old_string替换成new_string,-i表示直接修改文件,g表示全局替换。这在批量改配置文件时是救命稻草。比如你有 10 台服务器,要统一把 Redis 密码从oldpass改成newpass,用sed -i配合一个循环脚本,几分钟就能搞定。

vim则适合交互式编辑。我理解很多人一进vim就手足无措,只记住两个模式:按i进入编辑模式,按Esc退出编辑模式,然后输入:wq保存退出。再记一个:q!强制不保存退出,这基本就能活下来了。如果非要再记一个,dd可以删除整行,在vim里修改配置时非常好用。

提示:sed -i是直接改文件的,执行前建议先备份。我习惯写成sed -i.bak 's/xxx/yyy/g' file,这样会自动生成一个file.bak备份文件。线上配置改坏了,还能一秒回滚。

3. 运维排查六板斧:日志、进程、网络、磁盘一次说清

3.1 日志定位:tail、less、journalctl 怎么配合

排查线上问题,第一步永远是看日志。我的固定套路是:

  1. 先确认日志文件在哪。应用自己定义的,一般在/var/log/下或者应用目录的logs/文件夹;systemd 管理的服务,用journalctl -u 服务名。
  2. tail -n 100 app.log看最近报错。
  3. 如果报错信息不够完整,用grep -n "Exception" app.log | head定位最早出现异常的位置,再sed -n '1200,1220p' app.log看指定行区间的上下文。

比如你用journalctl查一个服务:

journalctl -u nginx --since today --until "2024-01-01 12:00:00"

这就是查 systemd 管理的 nginx 服务今天的日志。在看不到日志文件路径的 CentOS 7+ 系统里,这个命令是绕不开的。

3.2 进程与负载:ps、top、htop 的快速判断

“机器卡了”是运维接收到最多的反馈,但“卡”是一个模糊描述,有可能是 CPU 满、内存不足、磁盘 IO 瓶颈,甚至网络带宽打满。我的排查顺序是:先top看整体负载,再ps看具体进程。

top默认每 3 秒刷新一次,按P按 CPU 排序,按M按内存排序。第一眼要看的三个数:load average(1、5、15 分钟的平均负载)、%Cpu(s)里us(用户态)和wa(等待 IO)的占比、KiB Mem里 available 是否远小于 total。如果 load average 超过 CPU 核数,说明系统在排队,大概率有进程在打满资源。此时按P让 CPU 占用率最高的进程排到最上面,记下 PID,再用ps aux | grep PID看这个进程的详细信息,包括启动命令、所属用户、启动时间。

htop是top的增强版,有颜色、可点击、支持树状视图,但很多精简版系统默认没装。我的习惯是:先top快速判断,再htop深入分析。如果你有台机器没装htop,top也完全可以胜任 80% 的排查场景。

3.3 网络与端口:netstat、ss、curl 排障实录

“服务起不来”“端口不通”“访问超时”,这类问题靠网络排查命令解决。我常用的三件套是ss、curl、ping。

ss是netstat的替代品,输出更快更清晰。查某个端口是否在监听:

ss -lntp | grep 8080
  • -l只显示监听状态的端口
  • -n不解析域名和用户名,显示数字
  • -t只显示 TCP 连接
  • -p显示进程信息

如果你发现端口没监听,说明服务可能挂了;如果端口是LISTEN状态但你仍然连不上,那就要考虑防火墙了。CentOS 7+ 检查防火墙用firewall-cmd --list-all,Ubuntu 用ufw status。

curl是我测试 HTTP 接口最常用的工具,它能模拟请求并返回响应:

curl -I http://localhost:8080 curl -v http://localhost:8080/api/health

-I只显示响应头,-v显示详细过程,包括 DNS 解析、TCP 连接、TLS 握手、请求头和响应体。当你需要排查“为什么请求失败”,curl -v能告诉你卡在哪一步:DNS 解析失败、连接被拒、超时、还是 TLS 证书有问题。

3.4 磁盘与存储:df、du、lsblk 的容量排查

磁盘满是个经典故障,表现是服务突然写不了日志、数据库报错“no space left on device”。排查命令很简单:df -h看文件系统使用率,du -sh看某个目录占了多少空间。

df -h du -sh /var/log/*

df -h输出里你会看到若干行,找到挂载点/的那一行,Use% 接近 100% 就是根分区满了。接下来用du -sh /var/log/*找一下是哪个子目录占了大头,比如发现messages日志文件已经 20GB,那就确认是日志没做轮转,直接处理。

lsblk则是看磁盘分区的命令,输出很直观,能看清整块磁盘分成几个分区、挂载到哪个目录。当你新插入一块磁盘,想确认系统有没有识别到,第一件事就是lsblk。

注意:清理磁盘时不要直接rm正在被进程占用的日志文件,比如rm /var/log/messages之后,磁盘空间可能不会立刻释放,因为进程还握着这个文件的句柄。正确做法是> /var/log/messages清空文件内容,或者kill -HUP 进程PID让进程重新打开日志文件。这个坑我踩过,当时以为删完了,结果df一看一点没变。

4. 高速工作流:传输、压缩、包管理与 Git

4.1 服务器间传输:scp、rsync 怎么选

两台服务器之间传文件,最朴素的方式是scp,语法和cp几乎一样:

scp /local/file.txt user@192.168.1.10:/remote/path/ scp -r /local/dir user@192.168.1.10:/remote/path/

-r递归传目录。scp走 SSH 协议,所以确保两边 SSH 是通的。但scp有个缺点:全量传输,文件大了就很慢,而且传了一半断了没有断点续传。

如果你要同步大量文件、或者做定时备份,用rsync更合适。rsync支持增量同步,只传差异部分,还支持断点续传和压缩。我的常用写法:

rsync -avz --progress /local/dir/ user@192.168.1.10:/remote/dir/

-a归档模式,保留权限和时间戳;-v显示过程;-z压缩传输。注意源目录末尾的/,表示传输目录里的内容,而不是把目录本身也塞进去。这个细节很多人不注意,传完之后发现目标路径多了一层嵌套。

4.2 压缩归档:tar 命令的几个关键参数

打包压缩和解压是运维日常。tar命令的参数说实话挺多,但常用的就这几个组合:

tar -czvf backup.tar.gz /data/app/ # 打包+压缩 tar -xzvf backup.tar.gz # 解压到当前目录 tar -tzvf backup.tar.gz # 只查看压缩包里有什么

参数拆解:c创建,x解压,t查看;z使用 gzip 压缩,v显示过程,f指定文件名(f后面一定要跟文件名,而且习惯放在最后)。解压到指定目录加-C:

tar -xzvf backup.tar.gz -C /opt/app/

如果包是.zip格式,用unzip backup.zip -d /opt/app/。压缩时想排除某目录,加--exclude:

tar -czvf backup.tar.gz --exclude='/data/app/logs' /data/app/

4.3 软件包管理:apt、yum、dnf 对照表

“装软件”这件事,不同发行版命令不一样,我给一张对照表,方便你碰到什么系统都能上手:

操作Ubuntu/DebianCentOS/RHEL 7CentOS/RHEL 8+
更新软件源apt updateyum makecachednf makecache
安装软件apt install nginxyum install nginxdnf install nginx
卸载软件apt remove nginxyum remove nginxdnf remove nginx
搜索软件apt search nginxyum search nginxdnf search nginx
查看已装dpkg -lrpm -qarpm -qa

我个人的经验是:先确认系统版本,再选包管理命令。跑cat /etc/os-release一眼就知道。很多新手在 Ubuntu 上敲yum装不上东西,就是因为选错命令了。另外不管用哪个命令,装软件都建议加-y参数跳过交互确认,比如apt install -y nginx,不然安装到一半卡在 “Do you want to continue?” 上。

4.4 Git 日常操作速查:从提交到回滚

Git 是开发必用,也是我见过“命令没记住导致手忙脚乱”最多的地方。最基础又必须记牢的几个:

git status # 查看工作区状态 git add . # 把所有改动加入暂存区 git commit -m "提交说明" # 提交到本地仓库 git pull --rebase # 拉取远端代码并合并,rebase 让历史更干净 git push origin main # 推送到远端

最想强调的一个:提交信息别偷懒。git commit -m "fix"这种信息,三天后你自己都看不懂当时改了啥,同事骂你你都不知道怎么回。至少写清楚改了什么模块、修了什么 bug,比如fix: 修复用户登录时验证码过期导致500。

回滚场景也经常遇到。如果刚提交了一个错误的 commit,还没推到远端,用git reset --soft HEAD~1撤销提交但保留改动;如果想把改动也全部丢掉,用git reset --hard HEAD~1。已经推到远端了就麻烦点,git revert生成一个新提交来抵消错误提交,避免强制推送影响到别人。

5. 进阶必看:Docker、GDB 与面试高频题

5.1 Docker 容器管理常用命令

现在问 Linux 命令,面试官很可能顺手接一个“容器怎么查日志”。Docker 命令和普通进程命令是两套体系,但逻辑上能一一对应。我列几个最常用的:

docker ps # 查看正在运行的容器,-a 看全部 docker logs -f 容器名 # 跟踪容器日志,等于 tail -f docker exec -it 容器名 bash # 进入容器内部 docker restart 容器名 # 重启容器 docker stop 容器名 # 停止容器 docker rm 容器名 # 删除容器

排查容器问题,我有个经验:先看docker ps,再看docker logs。如果容器在反复重启(RESTART列的数字一直在涨),十有八九是启动命令有问题或者依赖的服务没起来。这时候进容器内部一般也来不及,优先看日志报错最直接。

5.2 GDB 调试核心命令

gdb是 C/C++ 程序调试的重型工具,速查表里只写几个核心命令,够你入门和应急:

gdb ./program # 加载可执行程序 (gdb) break main # 在 main 函数打断点 (gdb) run # 开始运行 (gdb) bt # 程序崩溃时查看调用栈 (gdb) info locals # 查看当前局部变量 (gdb) print 变量名 # 打印变量值 (gdb) continue # 继续运行到下一个断点 (gdb) quit # 退出

最常用的是bt,程序一崩,bt一下,崩溃调用栈就出来了,可以直接定位到是哪个函数、哪一行出的问题。这个命令的价值怎么强调都不为过。

5.3 面试高频 Linux 命令题参考

结合这些年面试和被面试的经验,Linux 命令相关的面试题集中在这几个方向:

  • 如何查看系统负载?top、uptime。要能解释 load average 的含义。
  • 如何查找占用端口 8080 的进程?ss -lntp | grep 8080或者lsof -i:8080。
  • 如何实时查看日志文件?tail -f或者tail -f | grep 关键字。这题很常见,而且面试官常追问“如果日志文件被轮转了怎么办”,答案是用tail -F(大写 F),它会跟踪文件重新创建。
  • 如何查看系统内存?free -h。
  • 如何批量杀掉匹配某个关键字的进程?ps aux | grep "java" | grep -v grep | awk '{print $2}' | xargs kill -9。这是一个组合拳,面试官很爱考。
  • 如何将命令输出保存到文件并同时显示?tee,比如df -h | tee disk.txt。

注意:kill -9是要慎用的。它强行终止进程,不给进程任何清理资源的机会,可能导致数据丢失、文件损坏。面试问“为什么不用 kill -9”时,标准回答是:先kill(默认 SIGTERM)让进程优雅退出,不行再升级到kill -9。

6. 常见问题与排查技巧实录

6.1 命令找不到、权限不够怎么办

“command not found”是新手最常碰到的报错,原因通常有几种:命令没安装、不在 PATH 路径里、或者你想执行的文件不在当前目录。排查方式:

which 命令名 # 查看命令路径 echo $PATH # 查看 PATH 路径有哪些 ls /usr/bin/ | grep 命令名 # 看看包里有没有这个命令

比如你用nslookup报 not found,在 CentOS 上可能是没装bind-utils,装一下就行。还有一种情况是文件明明存在,直接./script.sh报“Permission denied”,这是没有执行权限,chmod +x script.sh解决。

6.2 管道与转义:新手最容易踩的坑

管道是 Linux 命令组合的精髓,但有几个细节容易踩坑。第一,grep过滤出来的进程会匹配到grep自己,所以ps aux | grep nginx结果里总有一行grep --color=auto nginx,这是它自己。排除办法是grep -v grep,更优雅的写法是pgrep nginx。

第二,$符号在双引号和单引号里的行为不一样。grep "error$"里$有正则的意思,表示行尾;但在echo "$HOME"里$HOME是变量。如果你想把$符号当普通字符传给 grep,一定要用单引号包起来:grep '$' file。

6.3 现场排查流程:一个真实故障案例

去年有次生产环境的订单服务突然告警,接口超时率飙到 30%。我接到通知后的排查路径是这样的:

  1. top看负载,发现 load average 到了 8(机器是 4 核),CPU 100%。确认是负载问题,不是网络问题。
  2. 按P排序,看到java进程占了 300% 多的 CPU。多核情况下一个进程可以占多个核的 CPU,这个记一下,不要看到超过 100% 就觉得是 bug。
  3. ps aux | grep java拿到完整的启动参数,确认是订单服务的进程。
  4. jstack PID打印 Java 线程栈,发现大量线程卡在同一个方法的getConnection上,初步判断是数据库连接池打满了。
  5. ss -lnt | grep 3306看数据库端口连接数,确实暴涨。
  6. 反馈给 DBA 排查数据库慢查询,最后定位到一条新上线的 SQL 没走索引,全表扫描把连接池拖垮了。

整个过程大概 15 分钟,核心就是:先用top找到嫌疑进程,再用ps确认身份,最后用对应语言的排查工具(Java 用jstack,其他语言也有类似工具)定位到具体代码层面。Linux 命令在这里扮演的是帮你在系统层面快速缩小范围的角色。

排查类的技能,练得多了就有手感。我自己整理了大概半年时间,把上面这些命令用到“不用过脑子就能敲出来”的程度,之后再遇到故障,压力就会小很多。你可以在自己的机器上多模拟几遍故障场景,比如故意kill一个进程、把磁盘写满、把一个端口占掉,然后用这套命令体系去诊断。练过一次,比看十遍速查表都管用。

最后再分享一个小习惯:我平时会把速查表做成一个cheatsheet.md存在本地,每次遇到新命令或者踩了新坑,就顺手往里面加一行。这个文件到现在已经积累了上千行,但它仍然只是我的“提词器”——真正干活时靠的是手感和思路,表只是兜底的。你也试着建一个属于自己的速查表吧,从整理今天看到的这几条开始,慢慢它会变成你的私人排障手册。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询