
一提到 Linux很多人第一反应就是“命令太多、记不住”尤其是刚入行的同学打开终端面对黑乎乎的界面不知道从哪里下手。这篇是咱们 Linux 系列的第六篇我把平时开发、运维、面试里最高频的 Linux 常用命令重新捋了一遍按场景拆开讲清楚不光是“这个命令怎么用”更重要的是“什么时候用它、为什么用它”。对刚接触 Linux 的朋友这是一份能直接照着敲的笔记对已经用了两三年的开发者也可以当一回查漏补缺的清单。我接触 Linux 差不多有十年踩过的坑比敲对的命令多得多。很多命令手册上也写着但真正能救命的用法往往藏在工作里的各种细节中。这篇内容我按照四条主线来组织文件与目录、进程与系统、网络与排查、开发运维组合拳。大家不用急着背先看思路再动手敲慢慢就会形成肌肉记忆。提示本文涉及命令均为 Linux 发行版通用操作在 CentOS/RHEL、Ubuntu/Debian、openEuler、麒麟等主流发行版上均可直接使用。部分命令可能需要提权执行文内会单独说明。1. 先把思路理清楚命令学习的四条主线1.1 学命令不是背命令经常有人问我“Linux 命令大全是不是背下来就行”我每次都回答千万别。你看一遍命令大全能记住的可能不超过 10%而且转眼就忘。真正有效的方式是“用场景驱动学习”。也就是说当你有一个明确要解决的问题时——比如“日志刷太快我想只看报错”“磁盘满了我想找到大文件”“服务挂了我想看它为什么挂”——这时候学到的命令才是真正属于你的。每一个终端命令都可以拆成三部分命令本身、选项-l、-a 这些、参数操作对象。带着问题去敲你会慢慢熟悉这个结构。比如你发现ls后面加-l能列出权限和大小加-a能显示隐藏文件加-h能让文件大小变成人类友好的 KB/MB 单位。命令还是那个命令只是通过选项调整了输出形式。理解了这一层后面所有命令都不需要死记硬背你只需要知道工具库里有哪几个工具具体怎么用随时可以用man 命令名或命令名 --help查询。1.2 文件与目录操作是地基Linux 里“一切皆文件”这个设计哲学意味着你处理的大部分问题本质上都是在处理文件。对初学者来说把文件操作学扎实比什么都重要。比如ls、cd、cp、mv、rm、mkdir、touch这七个命令覆盖了你在目录里做的 90% 操作。不要小看它们有几个点很多人用了好几年都没搞明白。cd除了cd /xxx之外还有三个快捷方式特别实用cd ~回当前用户的家目录cd -回到上一次所在的目录cd ..回到上级目录。cp复制目录时绝大部分发行版默认是不带递归的你要复制一个带子目录的文件夹必须加上-r参数。mv比cp多了移动和重命名的能力同一个目录内mv是重命名跨目录才是“剪切”。而rm是真正危险的那一个rm -rf是把目录及其所有内容一并删除且不可撤销新手经常手滑。我的建议是长期保留一个习惯把rm改成rm -i的别名删除前让系统问一句很多灾难都能避免。1.3 进程与系统状态是运维关键不管你是开发还是运维早晚会遇到“我这台机器怎么这么慢”的灵魂拷问。这时候只知道文件操作是不够的你得学会看进程和系统状态。ps查看当前进程快照top实时刷新 CPU、内存占用kill给进程发信号。三个命令形成一个闭环先用ps或top找到可疑进程再用kill结束它或者进一步排查它的父进程、启动参数等。这里面有个小细节kill -9强杀和kill -15正常终止差别很大-15是给进程机会做清理-9是内核直接终结进程能不用-9就别用否则等于直接把进程“拍死”它来不及保存状态可能留下脏数据。1.4 网络与排查是实战刚需服务器网络出问题是最能拉开普通人和资深工程师差距的场景。曾经有个同事问我“端口明明监听了为什么连不上”我让他先跑一遍ss -tlnp他连监听地址和进程都看不明白。网络排查不是上来就 ping而是分层看先看网卡有没有流量用ip addr再看端口是否监听用ss -tlnp再看服务响应用curl -v最后才考虑防火墙、路由这些。脑子里有这个顺序排查效率会高很多。这部分我在第 3 节会结合真实场景展开。2. 高频命令逐个拆解结合场景讲透2.1 文件与目录操作命令先把最常用的一组过一遍。ls的完整形态我建议直接ls -lah就是把所有文件、人类可读大小、隐藏文件一起列出来。ls -l输出的第一列是权限位共 10 个字符第一位是文件类型d表示目录、-表示普通文件、l表示软链接后面每 3 个字符一组分别对应用户、用户组、其他用户的读取/写入/执行权限。理解了权限位后面 chmod 的数字你也能看懂。cp -r复制目录、cp -i覆盖前提示很多发行版默认就是 i-p尽量保留原文件的权限、时间戳。如果你要把服务器上的文件下载到本地或反向传上去用scp或rsync更顺手scp 用户名服务器IP:/远程路径 本地路径。rsync适合大量文件和增量同步第一次全量之后只传变化的部分比scp更节约带宽和时间。文件内容这块cat适合看小文件less适合大文件的翻页阅读head -n看头部 N 行tail -n看尾部 N 行。运维日常里tail -f是神级命令它能让文件内容实时刷新到屏幕上你开一个终端挂着日志一有新行立刻出现排查线上问题时几乎每天都要用。还有人常问cat file | grep xxx和grep xxx file哪个好后者更好少起一个管道进程而且 grep 能直接处理文件没必要让 cat 先跑一遍。2.2 文本处理三剑客grep、sed、awk很多面试题都会问“你熟练使用哪些文本处理命令”如果只说一个 grep面试官大概率会觉得你还有提升空间。grep是“筛选”sed是“替换和编辑”awk是“按列处理和统计”。这三兄弟基本覆盖了文本处理的全部主流场景。前端正在排障看到日志里一堆乱码用grep -E ERROR|Exception app.log筛出所有错误行想要把配置文件里的端口从 8080 改成 9090sed -i s/8080/9090/g config.yaml一步搞定想统计日志里不同状态码出现次数awk {print $NF} access.log | sort | uniq -c | sort -rn一条管道串起来瞬间从一大摞日志里拿到数字结论。这几个命令单独看不难难点在于组合。管道符|把前一个命令的输出作为后一个命令的输入这是 Linux 命令最迷人的地方。你可以像搭乐高一样把一个个小命令拼出强大的效果。理解管道之后再看任何命令教程都会有豁然开朗的感觉。2.3 权限与用户管理命令开发环境里权限问题出现的频率不高但一旦出现通常很致命——比如你写了个脚本明明本地能跑换到服务器上报 “Permission denied”。这就要说到chmod。权限位有两种表达方式符号表达和数字表达。数字表达很好记r4w2x1每类用户把对应数字加起来就是权限值。比如chmod 755 script.sh7421 表示用户自己可读可写可执行541 表示用户组和其他人只读可执行。再配合chown修改文件所有者chown root:root file。如果某个目录需要让多个同事协同读写还可以用chmod -R 2770 目录配合 SGID 特殊位不过我建议新手先用基本权限跑通特殊位等内容后续专门开一篇讲。用户管理方面useradd、passwd、usermod、userdel是核心。用户管理最需要留意的点是useradd不会自动帮你设置密码必须跟着执行passwd 用户名否则用户无法登录userdel -r会连同家目录一起删除不加-r就只是删除账户家目录和邮件池里的文件会留着。2.4 进程管理与系统监控命令刚才提到的ps -ef和ps aux是两条最常用的查进程命令。区别不大ps -ef是 System V 风格ps aux是 BSD 风格输出信息略有差异但都能看到 PID进程号、PPID父进程号、CPU、内存、启动命令。top进入后几个快捷键必须会P按 CPU 排序大写M按内存排序k输入 PID 后会问你要发什么信号默认是 15q退出。如果机器有多个核心按1可以展开每个 CPU 的使用情况排查某个核打满、其他核空闲的问题时非常有用。当一个进程突然占用大量资源你需要先top -H -p 进程PID看线程级别的消耗再结合strace跟踪系统调用才能定位到具体是卡在 I/O 上还是忙在计算上。注意这里的-H是展示线程别和 2.1 的ls -h人类可读混淆同样的字母在不同命令里的含义可能完全不同查看具体命令的帮助即可。2.5 磁盘与内存管理命令磁盘空间告警是运维值班公告里出现频率最高的告警之一。df -h看整个文件系统的使用情况du -sh *统计当前目录下每个目录或文件占用多大再配合du -h --max-depth1一层层往里找大文件。很多人一上来就在根目录执行du -sh *其实是统计当前目录下所有子项逻辑没问题但如果目录特别深建议先定位到怀疑的目录再统计不然耗时很长。内存方面free -h看一眼 total、used、free缓存 cached 其实是可以回收的别一看 free 只有几百 MB 就慌。很多新人以为 free 小代表内存不够实际上 Linux 会把空闲内存用作 page cache真正判断内存是否紧张要看free里的 available 这一列。内存还有一个很常见的排查姿势ss -s查看 socket 统计信息vmstat 1 5每秒刷新一次虚拟内存及 I/O 状态iostat看磁盘读写。如果你的应用偏向 Java 或 Node 方向可能还会接触到jstat、pmap这类针对特定运行时的工具这些属于进阶内容原理相通都是观察系统资源在某个进程上的分配和消耗。3. 开箱即用的实战组合从真实场景说起3.1 日志排障的标准操作流很多开发者的日常工作不只是写代码更多是改 bug。改 bug 第一步不是猜是看日志。我给出一个我每天都在用的日志排障操作流。假设业务服务日志写在/data/app/app.log先确认日志文件存在并且确实在写ls -l /data/app/app.log tail -n 5 /data/app/app.log同时开两个终端一个挂tail -f /data/app/app.log一个去复现问题实时观察异常输出。日志量太大刷得飞快用grep过滤关键字tail -f /data/app/app.log | grep -E ERROR|Exception屏幕上只保留你关心的行。恢复现场时需要看异常发生前后的上下文用grep -n -B 5 -A 10 NullPointerException /data/app/app.log-B看前 5 行-A看后 10 行这样比单纯的 grep 更有现场感。如果日志文件被切割过比如按天滚动的app.log.2025-01-01可以grep 关键字 /data/app/app.log*用通配符一把扫过所有相关文件。这套流程里-B/-A和tail -f | grep是很多人用不好但非常救命的小技巧建议动手多试几次。3.2 容器环境里的命令实践容器化已经是主流面试题里也常常出现“docker 常用命令”。我挑几个最高频的讲docker ps看正在运行的容器-a把已经停止的也列出来docker logs -f 容器名拉取容器日志这个和tail -f体感完全一致docker exec -it 容器名 bash进入容器交互式 Shell里面就是一个精简的 Linux 环境docker compose up -d一次性启动整个编排好的服务栈适合本地开发环境。容器里面排查问题思路和宿主机完全一样只不过你多了一个“先进入容器再排查”的步骤。我曾经遇到一次容器一直在重启docker logs什么也没输出最后是docker inspect看入口脚本和挂载卷才发现启动脚本里路径写错了。所以我的建议是容器排障先把docker ps -a、docker logs、docker inspect这个三连用熟覆盖大多数问题。3.3 vim 编辑器速记在服务器上改配置你不可能每次都把文件拖回本地。vim是出现频率最高的编辑器但很多人一进去就不知道怎么退出网上有好多个经典段子。这里给一套最小集合进入后用i进入插入模式此时可以正常输入文字按Esc回到普通模式输入:wq保存并退出输入:q!不保存强制退出按dd删除当前行按gg跳到文件第一行按G跳到最后一行按/后输入关键词再回车可以搜索按n跳到下一个匹配按N跳回上一个。就这十几招足以覆盖日常 95% 的运维操作。刚开始不熟练切换到可视化模式会慢但真正干活时别怕慢多敲几天自然就快了。如果你发现自己经常在服务器上改脚本还有一个小建议在 vim 配置文件里加上set number显示行号和syntax on语法高亮阅读和排查配置的体验能提升一个档次。3.4 性能排查三板斧CPU、内存、磁盘服务器卡顿排查有一套固定流程。第一步看负载uptime看 load average这个数字除以 CPU 核数超过 4 就说明系统非常繁忙。第二步用top排序看是哪个进程在吃 CPU如果进程是 Java 应用用top -H -p PID找到消耗最大的线程号再配合线程栈工具把线程号转成十六进制分析定位到具体代码逻辑。第三步看内存free -h看可用量ps aux --sort-%mem | head -20把占用内存最多的进程列出来。第四步看磁盘 I/Oiostat 1 5看 wa 值wa 过高说明 CPU 在等待磁盘多半有慢查询或读盘密集操作。这套三板斧排查完之后80% 的问题都能定位到方向。剩下 20%可能是内核参数、文件句柄、网络栈的问题那些属于进阶话题后面我会在系列里单独写。3.5 面试常见命令题怎么答才不像背题整理了面试里出现频率很高的几个命令场景给准备求职的朋友做个参考。如何查看进程占用的端口ss -tlnp或netstat -tlnp注意-p需要提权才能看到进程名。如何查找 /var/log 下所有大于 100M 的文件find /var/log -type f -size 100M如何实时查看日志中的 ERROR 行并计数tail -f app.log | grep ERROR | wc -l不过要注意wc -l统计的是命令执行以来累计出现的行数。如何杀掉僵尸进程ps aux | grep Z先找到僵尸进程僵尸进程本身无法被 kill需要处理它的父进程或让父进程调用 wait 收尸。kill -9杀僵尸是没用的很多候选人都答错这一条。vim 中如何跳到第 100 行100G。面试里问编辑器的不多但一旦问就基本考这类快捷键。这些题不偏但答得好不好直接反映你平时有没有真正在终端前面敲过。基本功扎实的人回答这些题会很自然因为那是他天天在敲的东西。4. 排查实录我踩过的坑和应急技巧4.1 常见问题速查表我把自己这些年遇到的最高频问题整理成了表你可以直接收藏这个分区出了问题查表定位。现象排查命令常见原因磁盘满df -hdu -sh /data/*日志未轮转、临时文件堆积端口无法访问ss -tlnpsystemctl status 服务名服务未启动、防火墙拦截命令找不到which 命令名echo $PATHPATH 未包含安装目录权限不足ls -lid文件属主/权限位不正确系统时间不对timedatectl时区或时间同步服务未配置内存告警free -hps aux --sort-%memhead -20僵尸进程ps auxawk $8 ~ /Z/ {print $2}4.2 误删文件之后的抢救思路误删文件是每个运维都绕不开的噩梦。rm之后数据能不能恢复取决于删除后那个磁盘区域有没有被立刻写入新数据。正确做法是发现误删后第一时间停止对该分区的一切写入操作不是马上重启重启本身可能触发日志、临时文件写入。然后借助恢复工具比如 ext4 文件系统可以尝试extundelete或者用 debugfs 做深入分析。但我坦白讲恢复成功率没有一个固定数字最好的策略是提前做远程备份。rsync配合定时任务就能实现rsync -avz /data/ backup备份机:/backup/data/再加上一个简单的保留天数控制是最朴素的保命手段。4.3 终端里那些让你少踩坑的小习惯最后分享几个我自己用下来的小习惯谈不上高深但真的能少踩坑。不要用 root 随便乱敲。平时操作尽量用普通用户需要提权时用sudo至少能避免“命令拼错导致系统文件被覆盖”这类惨剧。删除命令养成先ls再rm的习惯。准备删除/data/old时先敲ls -l /data/old看一眼内容确认没拼错路径再去删。多用 tab 键补全。输入目录名只要打前几个字母再按 tab系统自动补全既省时间又能帮你确认真实存在的路径到底叫什么很多手滑都是因为路径拼写错误。学会用 history 翻历史。history | grep 命令名能快速找到你几天前敲过的命令比自己翻聊天记录或者靠记忆重建快得多。我经常遇到“上周用某条命令解决过一个问题但记不清完整命令了”history 一搜就出来了。别名是效率放大器。在~/.bashrc或~/.zshrc里写几行alias llls -lah、alias ggit status一类的配置新开终端就可以减少重复劳动。不用背太多日常你用哪个命令次数多就给哪个命令配个别名。以上这几条习惯说白了就是一句话养成“终端操作前多想一步操作后多看一眼输出”的肌肉记忆。所有代价惨重的线上事故几乎都发生在控制台上那双急着回车的手上。我们不可能百分之百不犯错但通过这些小习惯完全可以把犯错成本压到最低。我自己是越用越觉得Linux 命令这玩意儿与其背不如泡在终端里敲。多敲几次肌肉记忆比脑子记得牢固。这篇系列六的内容是个地基后续我会继续往下写比如 shell 脚本自动化、系统服务管理、网络抓包分析。基础打牢了再看那些高级话题你会发现自己已经能顺着思路一路走下去了。