☰
Linux常用命令实战详解:从文件操作到性能排查全覆盖
2026/10/1 21:23:27 网站建设 项目流程

一提到 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 改成 9090,sed -i 's/8080/9090/g' config.yaml一步搞定;想统计日志里不同状态码出现次数,awk '{print $NF}' access.log | sort | uniq -c | sort -rn一条管道串起来,瞬间从一大摞日志里拿到数字结论。

这几个命令单独看不难,难点在于组合。管道符|把前一个命令的输出作为后一个命令的输入,这是 Linux 命令最迷人的地方。你可以像搭乐高一样,把一个个小命令拼出强大的效果。理解管道之后,再看任何命令教程都会有豁然开朗的感觉。

2.3 权限与用户管理命令

开发环境里权限问题出现的频率不高,但一旦出现,通常很致命——比如你写了个脚本,明明本地能跑,换到服务器上报 “Permission denied”。这就要说到chmod。权限位有两种表达方式:符号表达和数字表达。数字表达很好记,r=4,w=2,x=1,每类用户把对应数字加起来就是权限值。比如chmod 755 script.sh,7=4+2+1 表示用户自己可读可写可执行,5=4+1 表示用户组和其他人只读可执行。再配合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 后会问你要发什么信号(默认是 15),q退出。如果机器有多个核心,按1可以展开每个 CPU 的使用情况,排查某个核打满、其他核空闲的问题时非常有用。

当一个进程突然占用大量资源,你需要先top -H -p 进程PID看线程级别的消耗,再结合strace跟踪系统调用,才能定位到具体是卡在 I/O 上还是忙在计算上。注意,这里的-H是展示线程,别和 2.1 的ls -h(人类可读)混淆,同样的字母在不同命令里的含义可能完全不同,查看具体命令的帮助即可。

2.5 磁盘与内存管理命令

磁盘空间告警是运维值班公告里出现频率最高的告警之一。df -h看整个文件系统的使用情况,du -sh *统计当前目录下每个目录或文件占用多大,再配合du -h --max-depth=1一层层往里找大文件。很多人一上来就在根目录执行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:

  1. 先确认日志文件存在并且确实在写:ls -l /data/app/app.log && tail -n 5 /data/app/app.log
  2. 同时开两个终端,一个挂tail -f /data/app/app.log,一个去复现问题,实时观察异常输出。
  3. 日志量太大刷得飞快,用grep过滤关键字:tail -f /data/app/app.log | grep -E "ERROR|Exception",屏幕上只保留你关心的行。
  4. 恢复现场时需要看异常发生前后的上下文,用grep -n -B 5 -A 10 "NullPointerException" /data/app/app.log,-B看前 5 行,-A看后 10 行,这样比单纯的 grep 更有现场感。
  5. 如果日志文件被切割过(比如按天滚动的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/O:iostat 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 -h,du -sh /data/*日志未轮转、临时文件堆积
端口无法访问ss -tlnp,systemctl status 服务名服务未启动、防火墙拦截
命令找不到which 命令名,echo $PATHPATH 未包含安装目录
权限不足ls -l,id文件属主/权限位不正确
系统时间不对timedatectl时区或时间同步服务未配置
内存告警free -h,`ps 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 ll='ls -lah'、alias g='git status'一类的配置,新开终端就可以减少重复劳动。不用背太多,日常你用哪个命令次数多,就给哪个命令配个别名。

以上这几条习惯,说白了就是一句话:养成“终端操作前多想一步,操作后多看一眼输出”的肌肉记忆。所有代价惨重的线上事故,几乎都发生在控制台上那双急着回车的手上。我们不可能百分之百不犯错,但通过这些小习惯,完全可以把犯错成本压到最低。

我自己是越用越觉得,Linux 命令这玩意儿与其背,不如泡在终端里敲。多敲几次,肌肉记忆比脑子记得牢固。这篇系列六的内容是个地基,后续我会继续往下写,比如 shell 脚本自动化、系统服务管理、网络抓包分析。基础打牢了,再看那些高级话题,你会发现自己已经能顺着思路一路走下去了。

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

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

立即咨询