news 2026/10/11 15:26:23

Linux命令与终端快捷键:从入门到高效排查实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux命令与终端快捷键:从入门到高效排查实战

搞 Linux 的朋友都有过这种经历:刚接触那会儿,命令抄了满满几页纸,一到真要干活的时候脑子一片空白;快捷键更是只用 Ctrl+C 和 Ctrl+V,连中断程序用的 Ctrl+C 都是在网上搜“怎么终止卡死的命令”才学会的。我用 Linux 当主力系统也有不少年头了,踩过的坑比看过的教程多,这里把我认为最值得掌握的 Linux 命令和终端快捷键从头到尾梳理一遍,从文件操作到文本处理,从进程管理到网络排查,再配上实测有用的组合技巧。这篇内容适合刚入门但不想只停留在“能开机”阶段的新手,也适合那些已经会几个常用命令、想系统补齐短板的朋友。

1. 用好命令的前提:先建立正确的学习思路

1.1 命令不是背出来的:理解命令的三层结构

很多人学 Linux 命令最大的误区是“背命令”。今天背了个ls -la,明天背了个ps aux,后天忘了到底有没有空格、要不要加横杠,结果一通操作直接坐蜡。我个人的体会是,Linux 命令的底层逻辑极其统一,绝大多数命令都逃不过一个格式:

命令名 [选项] [参数]

命令名决定“我要干什么”,选项决定“怎么干”,参数决定“对谁干”。

拿最普通的ls来举例:ls -la /var/log,命令名是ls,选项-l表示以长格式展示详细信息,-a表示显示隐藏文件,参数/var/log指定了要看的目录。一旦你适应了这个结构,以后遇到任何新命令,第一反应不应该是“硬背”,而是“先找帮助”。man或者命令 --help永远是第一资料源。

这个思路有点像学做饭:命令就是“炒、蒸、炸”,选项是“大火、中火、小火”,参数是“食材”。你不需要背几千道菜谱,掌握了基本动作就能临场发挥。Linux 命令本身也是这个道理,核心命令也就几十个,真正让你效率飞起来的,是组合和变通。

1.2 终端环境和 Shell 的选择

命令是跑在 Shell 里的,Shell 相当于命令的“翻译官”。默认的 Shell 绝大多数发行版都是 Bash,但作为一个经常折腾的人,我强烈建议新手优先熟悉 Bash,因为它是最通用的,服务器上基本都有,脚本兼容性也最好。等你把 Bash 玩顺了,再去碰 Zsh、Fish 这些更花哨的,体验会好很多。

另外两个小细节很影响体验:一是终端模拟器的选择,我用的是系统自带的终端加一个自定义配色,不折腾那些漫天特效的主题,稳定省心最重要;二是.bashrc这个文件,它就是你的命令环境预设,别名、PATH、提示符样式都可以在这里配置。每次改完记得source ~/.bashrc,不然要重新登录才生效,这个坑我踩过不止一次。

1.3 一份够用很久的命令清单

为了让你有个整体感,先放一张我平时整理过的核心命令矩阵。不需要现在全记住,收藏起来,后面章节会逐个拆解。

类别代表命令解决什么问题
文件操作ls、cd、cp、mv、rm、find看文件、切目录、复制、移动、删除、查找
文本处理cat、less、tail、head、grep、sed、awk、sort、uniq查看内容、筛选、去重、统计、流式修改
系统监控ps、top、free、df、du、systemctl看进程、内存、磁盘、服务状态
网络排查ping、curl、ss、lsof、ssh、scp连通测试、接口调试、端口排查、远程管理
效率神器Tab、Ctrl+R、Ctrl+Z、alias、管道、xargs少打字、快速切换、批量处理

这张表对应的就是 Linux 日常运维和开发里 90% 的高频场景。下面我开始逐个展开。

2. 文件与目录操作:最常用,也最容易翻车

2.1 ls 的进阶玩法:别只停留在 ls

ls大概是每个 Linux 用户敲的第一条命令,但很多人两年后还只会ls和ls -l。我把自己最常用的几个变种列出来:

  • ls -lah:-h选项把文件大小显示成人类可读的 K、M、G,而不是一长串字节。看目录大小时你会感谢这个选项。
  • ls -lt:按修改时间倒序排列,配合-l能快速找出“最近动过哪个文件”。排查问题时,比如配置改了没生效,这个命令比stat还直观。
  • ls -d */:只看当前目录下的一级子目录,不把所有文件都列出来。这在目录里文件很多、只想找文件夹时特别省眼。
  • ls *.log:配合通配符用。*匹配任意字符,?匹配单个字符,[abc]匹配指定字符集合。比如ls config?*.conf可以匹配config1.conf、config-test.conf这类带编号的配置文件。

一个我实测很实用的场景:日志目录里文件多到屏幕刷不完,用ls -lt /var/log/ | head -15,只看最新的 15 个文件,一眼定位问题日志。

2.2 cd 的高效技巧:来回切换不再痛苦

cd看起来简单,但几个细节不掌握,你的操作速度会慢一大截。

首先是cd -,这个命令会在“当前目录”和“上一次所在目录”之间来回跳。我经常在项目目录和日志目录之间来回切,一个cd -直接跳回去,不用把长路径再敲一遍。

然后是cd ~回家目录,这个大家都知道。但很少人用cd ~/Downloads/这种带波浪号的绝对定位方式,在任何位置都能直接回到家目录下的指定路径。

如果你经常要跳到一个很深的路径,比如/opt/software/xxx/conf/yz/,建议用软链接。在~/bin/下建一个快捷方式:

ln -s /opt/software/xxx/conf/yz ~/yz cd ~/yz

这就像给文件夹在桌面上建了个快捷方式,不用每次都输那么长一串。

2.3 find 与 grep:定位文件和内容的两把利器

如果说ls是“我知道文件在哪,看一眼目录”,那find就是“我不知道文件在哪,全盘搜”。

find的常见套路:

# 在当前目录下找所有以 .log 结尾的文件 find . -name "*.log" # 找最近一天内修改过的文件 find . -mtime -1 # 找大于 500M 的文件,常用于排查磁盘占用 find / -size +500M # 找到文件并直接删除(慎用!建议先不删,先找出来看一遍) find /tmp -name "*.tmp" -exec rm -f {} \;

grep则是内容检索大杀器。我最常用的是:

# 在日志里搜 ERROR 关键词,忽略大小写,显示行号 grep -in "error" app.log # 递归搜索整个目录,找某个函数或配置项在哪些文件里出现过 grep -rn "timeout" /etc/nginx/ # 反向匹配,排除某类干扰行 grep -v "^#" /etc/ssh/sshd_config

grep -v这个反向匹配在查看配置文件时极其好用,直接过滤掉注释行,剩下的全是有效配置。我排查ssh配置时几乎必用,不然密密麻麻的#注释会让人眼瞎。

2.4 复制、移动、删除的正确姿势和防呆操作

这块必须重点说,因为rm 是 Linux 新手翻车率最高的命令,没有之一。

我自己刚学 Linux 时,有一段刻骨铭心的经历:某次执行rm -rf /home/young/temp/*,结果因为路径写错,差点把家目录整个删掉。从那以后我给自己定了三条铁律:

  1. 删除之前先ls确认路径,再执行rm。
  2. 能用相对路径的时候尽量用相对路径,但关键删除操作一律用绝对路径并反复核对。
  3. 能不删就不删,用mv移动到/tmp目录“缓刑”几天,确认没问题再做清理。这个习惯救了我好几次。

复制和移动也有一些技巧:cp -r递归复制目录,cp -a保留权限和时间戳,mv在同一个文件系统内是瞬间完成的,不会真复制数据,所以你移动大目录时不用担心耗时。跨文件系统移动时,实际上是“复制+删除”,时间取决于数据量。

还有两个命令容易忽略:du -sh *可以看当前目录下每个子目录或文件占多大空间;df -h看整个磁盘分区的使用率。排查“磁盘满导致服务挂掉”这类问题,这两个命令是黄金组合。

3. 文本查看与处理命令:服务端排查问题的基本功

3.1 tail、head、less:日志阅读三件套

服务器上排查问题,百分之八十的时间都在跟日志打交道。日志文件动不动几百 M,用cat直接读会把整个屏幕刷烂,而且终端会卡住。正确做法是:

  • 看尾部最新内容,用tail -n 50 app.log或者直接tail -f app.log实时跟踪。-f这个选项就像“盯着文件看”,文件一旦有新行写入就立刻显示,排查线上问题时一边tail -f一边复现 bug,效果极佳。
  • 看头部内容,用head -n 20 app.log,通常在日志文件被截断或需要看启动信息时用。
  • 文件太长需要翻页阅读,用less而不是more。less支持上下方向键翻页,支持/关键词搜索,支持g跳转首行、G跳转末行。进入less后按v还能直接用编辑器打开当前文件,按q退出。

我自己的习惯是:小文件用cat,中等文件用less,大文件直接grep+tail组合。反正一句话,别在终端里硬生生刷几千行日志。

3.2 grep、sort、uniq:三分钟统计出你要的数据

文本处理最实用的一个组合是“grep 过滤 → sort 排序 → uniq 去重 → wc 计数”。这个组合在分析日志时堪称神器。

举个例子:你的应用日志里记录了每个请求的响应码,想知道今天返回 500 错误的有多少次:

grep "500" access.log | wc -l

想统计访问量排名前 10 的 IP:

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

逐段拆解一下:awk '{print $1}'取出日志每行的第一个字段(通常就是 IP),sort排序让相同 IP 相邻,uniq -c去重并统计每个 IP 出现次数,sort -rn按次数倒序排列,head -10取前十。

这个管道链我用的频率非常高,它背后的逻辑是:一个命令解决一个小事,然后用管道把它们串起来。这也是 Linux 哲学的核心,不需要写复杂的程序就能完成数据分析。

3.3 sed 和 awk:流式修改和文本处理的进阶力量

很多初学者一听到sed和awk就头大,觉得是“上古神术”。说句实话,如果不做特别复杂的文本解析,你只需要掌握几个招式就够了。

sed最常用的场景是“批量替换文本”。比如把配置文件里的旧端口 8080 全部改成 9090:

sed -i 's/8080/9090/g' config.conf

注意-i是直接修改原文件,如果不加-i,只会打印替换结果到屏幕,原文件不变。我建议第一次批量替换时先不加-i跑一遍,确认输出无误再真正落盘。另外s是替换动作,g表示全局替换,如果不加g,每行只处理第一个匹配到的内容。

awk最常用的场景是“按列取数据”。它的默认分隔符是空白字符,所以awk '{print $1}'就能取出第一列。如果你想以冒号分隔(比如处理/etc/passwd文件),用awk -F: '{print $1}'。再进阶一点,awk可以进行求和、平均值等简单统计,比如对文件第二列求和:

awk '{sum += $2} END {print sum}' data.txt

3.4 实战演练:一条命令分析日志中的异常趋势

纸上谈兵没意思,放一个我遇到过的真实问题。某次服务在半夜出现大量超时,需要快速确认是偶发还是持续恶化。

我先tail -n 5000 app.log | grep -i "timeout" | wc -l看看最近 5000 条日志里超时有多少条,得到一个总数后,再按小时统计分布:

tail -n 50000 app.log | grep "timeout" | awk '{print $4}' | cut -c2-13 | uniq -c

这里稍微解释下:$4是日志里的时间字段,cut -c2-13截取其中 “日/月/年:时” 的部分,uniq -c把同一分钟内的超时聚合成一行。看到分布是“某个时间点突然飙升”还是“均匀散布”,基本就能判断是并发尖峰还是持续性故障。

这种组合命令看起来很“酷”,但本质就是前面那些小命令的拼接。只要熟悉每个小工具,你也能随手写出类似的排查命令。

4. 系统状态与进程管理:知道你的机器在干什么

4.1 ps、top:进程查看的正确姿势

服务器变卡了,第一反应应该是看进程和资源占用。ps是静态快照,top是动态刷新。

ps我用得最多的是这两个变种:

# 查看所有用户的全部进程,附带完整命令行参数 ps aux # 精确匹配某个进程 ps -ef | grep java

ps aux输出里每一列的含义:USER是进程用户,PID是进程号,%CPU和%MEM是资源占用,STAT是进程状态(S休眠、R运行、Z僵尸),最后COMMAND是完整命令。

看到STAT列出现Z要警惕,这是僵尸进程。僵尸进程杀不死,只能处理它的父进程,或者重启机器。后面常见问题里我会专门讲。

top是动态的,打开后按P按 CPU 排序,按M按内存排序,按q退出。实时观察哪个进程在“吃 CPU”,一眼就能看穿。如果你的发行版支持htop,装一个,显示更友好,彩色界面还支持鼠标操作,我几乎一上服务器就敲htop。

4.2 kill、jobs、Ctrl+Z:进程控制三板斧

知道哪个进程有问题,下一步就是管住它。kill命令不少人以为就是“杀死进程”,其实它本质是“发信号”。

  • kill -15 PID:请求进程正常退出,给它时间和机会做清理操作,这是默认格式。
  • kill -9 PID:强制杀死,内核直接回收资源,进程没有机会保存任何状态。属于最后通牒。
  • kill -1 PID:让进程重新加载配置文件,常用于 Nginx、守护进程类服务。

实际排查时我建议先用-15,等几秒没反应再上-9。别一上来就-9,有些程序会丢数据或者留下脏文件。

另外有个快捷键组合容易被忽略:Ctrl+Z是把当前运行的前台进程挂起,不是终止。挂起后敲jobs能看到挂起的任务列表,bg %1把它放到后台跑,fg %1把它拉回前台。我经常用这个“暂停→后台化”的操作来临时腾出终端,比另开一个会话方便得多。

4.3 free、df、du:内存和磁盘的体检工具

内存问题用free -h查看,-h选项同样是把数字转成人话。再看一眼free输出里的available,这个才是真正“可以随时分配给新程序”的内存量,别死盯着free那列。

磁盘问题用df -h看整体,用du -sh *定位具体目录。组合拳是这样打的:

df -h # 先发现 / 分区使用率 99% du -sh /var/log/ # 再定位到 /var/log 很大 du -sh /var/log/* | sort -rh | head -5 # 找到最大的那几个日志文件

然后该清理清理,该加磁盘加磁盘,问题定位清晰明了。

sort -rh里的-h表示按人类可读的大小排序,-r倒序,记住这个大文件查找技巧,比一条条看输出高效得多。

4.4 systemctl:新时代的服务管理标准

现在主流发行版都用systemd,对应的管理命令就是systemctl。你不用再记service httpd restart还是/etc/init.d/nginx restart了,统一一套:

systemctl status nginx # 看服务运行状态 systemctl start nginx # 启动 systemctl stop nginx # 停止 systemctl restart nginx # 重启 systemctl enable nginx # 设置开机自启 systemctl disable nginx # 取消开机自启

我遇到最多的情况是“服务怎么又挂了,我要看它挂了多久、为什么挂”。systemctl status nginx会直接显示最近几条相关日志,比单看进程列表更有价值。如果服务状态显示failed,再加上journalctl -u nginx -n 50查看最近 50 行服务日志,基本就能找到原因。

journalctl也是 systemd 家族的好工具,journalctl --since "1 hour ago"能看过去一小时的系统日志,排查那些“不明原因”的问题时,这个比翻/var/log/messages省力得多。

5. 网络诊断与远程操作:排查问题的另一只眼

5.1 ping、traceroute、curl:连通性测试三兄弟

网络类问题,排查顺序从近到远。先确认本机网络通不通:ping -c 4 某网站地址,-c 4指定发包次数,免得ping无限运行你要手动按 Ctrl+C。

ping能通只能说明 IP 层通了,不代表业务端口通。测端口连通性,我一般用curl -v telnet://目标IP:端口,通了会显示连接成功,不通会卡住或报错。这个技巧比telnet命令本身还常用,因为很多精简系统没装 telnet 客户端。

traceroute则是看数据包经过了多少跳、在哪一跳掉链子了。不过日常工作里用得不算频繁,大部分是运维排查链路质量时才碰。真正的高频选手是curl:

curl -I http://localhost:8080 # 只看响应头,确认服务活着没 curl -X POST -d 'key=value' http://localhost/api # 发 POST 请求测试接口 curl -o /dev/null -w '%{http_code}' http://localhost:8080 # 只看状态码

-w参数可以自定义输出格式,把 HTTP 状态码、响应时间等打出来,我写接口测试脚本时经常用。

5.2 ss、lsof:端口和连接的定位神器

服务器上出现“端口被占用”“连接数爆满”,用ss和lsof定位。

ss是现代 Linux 推荐用的命令,替代老的netstat。查看所有监听端口:

ss -tlnp

-t只看 TCP,-l只看监听中的端口,-n不解析服务名(数字端口更清晰),-p显示占用端口的进程号。一次执行,你能看到哪台服务器上的哪个端口被哪个进程占着,排查启动失败说“端口已占用”时必用。

如果想知道某个具体 PID 打开了哪些文件,用lsof -p PID。想查谁占用了某个端口,lsof -i :8080直接列出所有占用该端口的进程,比ss更直观一些。这两者配合使用,端口类问题基本手到擒来。

5.3 ssh、scp:远程操作和文件传输的标配

远程管理服务器没有花哨,就是 SSH。高频操作我总结一下:

ssh user@host # 常规登录 ssh -p 2222 user@host # 指定端口登录(非默认 22 端口时) ssh -i ~/.ssh/id_ed25519 user@host # 用密钥登录

个人强烈建议:把“密码登录”改成“密钥登录”。方法很简单:本地生成密钥对ssh-keygen -t ed25519,然后把公钥内容追加到服务器的~/.ssh/authorized_keys里,之后登录再也不用手输密码,而且比密码更安全。

文件传输用scp:

scp localfile.txt user@host:/tmp/ scp -r project/ user@host:/home/user/project/

-r用来传目录。如果文件很多很大,可以改用rsync,它支持增量传输,断点续传,效率高得多。传一个几十 G 的目录,rsync -avh --progress project/ user@host:/home/user/project/是唯一靠谱的选择。

5.4 实战:一次完整的端口排查过程

放一个实战过程,你照着这套思路走一遍就懂网络排查了。

场景:启动服务时提示“端口 8080 已被使用”。

第一步,找到占用的进程:

ss -tlnp | grep 8080

输出会显示类似users:(("java",pid=12345,fd=96)),说明是 java 进程 12345 占用了 8080。

第二步,确认这个进程是什么项目:

ps -ef | grep 12345

看到命令行就知道是哪个服务了。

第三步,决定是杀掉旧进程还是换端口。如果是旧版本残留,kill -15 12345,过两秒再ss -tlnp | grep 8080确认端口释放。如果杀不掉再上kill -9。

这套流程从发现问题到解决,控制在两分钟以内。新手容易卡在第一句“ss 是什么”上,练几次后就形成条件反射了。

6. 终端快捷键:把操作效率翻倍的核心技巧

6.1 必须刻进肌肉记忆的六个快捷键

命令再熟,如果只用鼠标复制粘贴,效率还是起不来。终端快捷键是我觉得“学了立刻就有回报”的投入。先记这六个:

快捷键作用使用场景
Ctrl + C终止当前前台进程某个命令卡住不动了,果断中断
Ctrl + Z挂起当前进程临时腾出终端,稍后用 fg 恢复
Ctrl + D退出当前 Shell相当于输入 exit,也用于结束输入流
Ctrl + L清屏比输入 clear 快,屏幕刷满了来一下
Ctrl + A光标跳到行首改命令开头时不用按半天方向键
Ctrl + E光标跳到行尾改命令结尾时快速直达

这里最容易被误解的是Ctrl+C:它不是“复制”,而是“发送中断信号”。很多从 Windows 过来的人下意识按 Ctrl+C 想复制,结果把正在跑的任务中断了,血的教训。

6.2 历史命令检索:Ctrl + R 和 ! 系列

你敲过的每条命令都被记住了。history命令可以看全部历史,但列出几百行没意义,关键是快速调用。

  • 按Ctrl + R,进入反向搜索模式,输入关键字,终端会从历史里匹配最近一条包含该关键字的命令,再按Ctrl + R继续向前翻,按回车直接执行。
  • !!代表上一条命令,在权限不够时很有用:先执行systemctl restart nginx提示权限不够,然后直接sudo !!,重新执行上一条并用 sudo 提升权限。
  • !$代表上一条命令的最后一个参数。比如你刚cat /etc/nginx/nginx.conf,现在想用 vim 编辑它,直接vim !$,不用再输入一遍长路径。

这三个技巧在敲长命令时能省不少时间。尤其sudo !!,用了就回不去。

6.3 Tab 补全:键盘上有最省力的按键

Tab 键是终端里最被低估的按键。输命令时按一下 Tab 会自动补全,模糊匹配时按两下 Tab 会列出所有候选。

我实测一个好处:你再也不用记住那些奇长的文件名和命令全称了。比如系统里有个nginx-module-vts-0.2.2.tar.gz,输完前面的nginx按一下 Tab,整个文件名瞬间补全,连中间那些容易拼错的连字符和下划线都不用管。

Tab 补全对cd和路径同样有效,配合目录软链接,我切换目录基本不超过三秒。初学阶段可能觉得“按两下 Tab 是麻烦”,但一个月后你会发现自己已经离不开它了。

6.4 自定义别名:把高频命令缩成短口令

别名alias是效率提升的隐藏大招。我自己的.bashrc里长期躺着这几行:

alias ll='ls -lah' alias grep='grep --color=auto' alias ..='cd ..' alias ...='cd ../..' alias pg='ps -ef | grep'

设置很简单,直接在~/.bashrc里追加一行,然后source ~/.bashrc生效。

alias ..='cd ..'这个设计我一直强烈推荐,敲三个点以内就能退到上级目录,配合cd -使用,目录切换几乎是零思考成本。pg这个别名则让我不用每次敲完ps -ef再拼一个管道符加 grep,直接pg nginx就能看进程。

注意别覆盖掉真正有用的命令名。比如有人会把alias rm='rm -i'设置成每次删除都问一下,新手期可以这样保护自己,但老手反而觉得多余。我的建议是宁可 alias 加长命令,也别轻易改写系统命令本身。

7. 管道重定向与工作流:从“会用命令”到“会解决问题”

7.1 管道和重定向:把命令串起来

前文反复出现的|管道符,它的作用是把左边命令的输出,作为右边命令的输入。这是 Linux 最强大的设计之一,也是“组合命令”的基础。

重定向符号同样重要:

# 覆盖写入文件 echo "hello" > /tmp/hello.txt # 追加写入文件 echo "world" >> /tmp/hello.txt # 丢弃输出,2>/dev/null 丢弃错误信息 ls /nonexist 2>/dev/null

这里的数字1是标准输出,2是标准错误,>是覆盖,>>是追加。记不住默认等于1>覆盖即可。把日志输出到文件、把错误信息过滤掉,这些是写自动化脚本的必备基本功。

7.2 xargs:批量处理文件的最强助手

xargs的作用是把输入数据转化成命令参数。它和管道的区别很微妙:管道传递的是“文本流”,而xargs让前一条命令的输出变成后一条命令的参数。

经典的场景:删除一大批符合条件的旧文件。

find /data/logs -name "*.log" -mtime +30 | xargs rm -f

这条命令会把所有 30 天前的.log文件名提取出来,交给rm -f处理。相比find -exec,xargs更高效,它会把参数攒一批再执行。

另一个我常用来批量压缩或批量传输的场景:

cat file_list.txt | xargs -P 4 -I {} scp {} user@host:/backup/

-P 4表示同时跑 4 个进程,-I {}指定把每一行内容替换成{}。这个写法虽然看着复杂,但实际处理成百上千个小文件时效率提升明显。有需求的时候再回头查-I的具体用法,不急着背全文。

7.3 一个顺手的小脚本:把常用排查步骤固化下来

与其每次都敲一遍组合命令,不如把最常用的步骤写成小脚本。我自己在~/bin/下放了一个qlog.sh,专门快速分析应用日志:

#!/bin/bash LOG_FILE=$1 KEYWORD=$2 echo "===== 关键词 $KEYWORD 出现次数 =====" grep -c "$KEYWORD" "$LOG_FILE" echo "===== 最近 20 条匹配内容 =====" grep "$KEYWORD" "$LOG_FILE" | tail -20 echo "===== 按分钟统计分布 =====" grep "$KEYWORD" "$LOG_FILE" | awk '{print $NF}' | cut -c2-13 | uniq -c | tail -20

给脚本加执行权限chmod +x ~/bin/qlog.sh,然后在.bashrc里加上export PATH="$HOME/bin:$PATH",之后在任何目录都能直接qlog.sh app.log "timeout",一次搞定日志分析。这种“把重复操作脚本化”的习惯,比多记一百条命令还值得培养。

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

8.1 command not found:八成是 PATH 的问题

敲命令提示command not found,先别慌,检查两件事:命令是否安装、PATH 里是否包含安装路径。比如你刚编译装了个软件到/opt/app/bin,直接敲app肯定不行,要么/opt/app/bin/app,要么把它加进 PATH。

排查方法:

echo $PATH # 看当前 PATH which nginx # 看某个命令在哪个目录 find / -name nginx -type f # 全盘找命令的真实位置

which输出为空,说明命令要么没装,要么不在 PATH 里。这个排查流程我几乎每周都会用到。

8.2 No space left on device:磁盘满了但 du 找不到

“设备没有空间,但du一看,明明目录都不大?”这种情况多半有文件被删除但进程还在占用。Linux 里,进程打开一个文件后再删掉,目录里看不见,但磁盘空间就是释放不掉,因为文件还在被进程持有。

排查手段:

df -h # 确认哪个分区满了 lsof | grep deleted # 找到正在占用已删除文件的进程

找到 PID 后,重启或 kill 那个进程,空间立刻释放。这个坑很隐蔽,我第一次遇到时愣是找了一个小时,后来才想起lsof | grep deleted。

8.3 僵尸进程杀不死

ps aux里看到许多Z状态的进程,PID 无法被kill -9杀掉。原理是:僵尸进程本身已经终止,只是父进程没有回收它的退出状态,在内核里留了个空壳。

解决办法是看它的父进程 PID(PPID):

ps -o pid,ppid,stat,cmd -p 12345

然后处理父进程:要么让父进程正常退出或重启,要么先kill父进程。父进程一结束,僵尸孤儿就会由 init 进程接管并统一回收。治标不治本的是:如果父进程是代码写得不严谨的长期运行程序,僵尸会反复出现,这时就该去修代码或重启对应服务了。

8.4 端口明明没监听,却提示端口被占用

这类问题和“僵尸进程”有一点像,也可能是 TIME_WAIT 状态的连接堆积。用ss -tlnp | grep 端口看只能看到监听中的端口,但ss -tan | grep 端口能看到包括 TIME_WAIT 在内的所有状态。

如果确认是 TIME_WAIT 过多,常见于高并发短连接服务,可以调整内核参数net.ipv4.tcp_tw_reuse,但这属于网络调优的范畴,一般裸写业务代码的朋友不用太纠结,知道有这回事、能用ss -tan排查就够了。

写在最后的一点经验

带过不少半路入行的朋友,我发现大家最容易卡住的不是“哪个命令学不会”,而是“学了想不起来用”。我的建议是:不要按命令表背,要按场景练。比如今天想清理日志,就顺手学du、find、rm;明天服务起不来,就边查边学systemctl、journalctl、ss。用需求驱动学习,命令不知不觉就长在手里了。

快捷键也一样,别指望一次记住所有。先强迫自己每天用Ctrl+R搜历史命令、用 Tab 补全、用sudo !!提权,一周后手就有记忆了。一个月后再回头看,你会发现自己敲命令的速度比原来快了一倍不止。这套东西没有门槛,唯一的代价就是多敲几下键盘。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 15:25:40

电子科技大学机器学习期末考备考指南:手推梯度与算法推导全解析

简介:这份PDF资料是电子科技大学机器学习课程的期末考试复习材料,面向正在备考该课程的学生以及希望系统梳理机器学习基础的学习者。内容围绕课程核心考点展开,涵盖梯度下降、模型评估与交叉验证、过拟合、线性回归、决策树、朴素贝叶斯、MP模…

作者头像 李华
网站建设 2026/10/11 15:21:38

软件工程课程设计报告写作指南:从需求分析到工程决策文档

简介:这份《软件工程课程设计》报告面向计算机相关专业学生与软件工程初学者,以中小型宾馆管理系统为案例,完整呈现从课题背景、可行性研究到需求分析与设计思路的全过程,帮助读者理解软件工程各阶段文档的编写规范与项目落地方法…

作者头像 李华
网站建设 2026/10/11 15:19:10

软件测试基础与进阶:从用例设计到物联网测试实战

经常有人问我:软件测试是不是就是“点点点”?每次听到这种话,我都想拉着他坐一下午,把测试这行的里里外外掰扯清楚。软件测试是软件开发链条里保命的一环,它不负责写代码,负责的是确认代码按预期工作、发现…

作者头像 李华
网站建设 2026/10/11 15:18:58

PGM编辑器:专治灰度图加载失败的交互式调试工具

简介:PGM-Editor是一款面向Java初学者与图像处理入门者的轻量级灰度图像编辑工具,专为理解PGM(Portable Graymap)格式原理及实践图形界面开发而设计。资源包共11个文件,含7个PGM示例图像(用于测试读写与显示…

作者头像 李华
网站建设 2026/10/11 15:18:28

不联网也能拥有『本地 Opus』:Qwen3.8-27B 离线部署完全指南

不联网也能拥有『本地 Opus』:Qwen3.8-27B 离线部署完全指南 【免费下载链接】Qwen3.8-27B-GSQ-RCO-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/ISTA-DASLab/Qwen3.8-27B-GSQ-RCO-GGUF 270 亿参数的开源模型,正在被越来越多的人称作&quo…

作者头像 李华
网站建设 2026/10/11 15:18:26

微信小程序问卷系统:SpringBoot+Vue+小程序三端实战指南

简介:本资源是一套面向计算机专业本科生的Java毕业设计实战项目,聚焦微信小程序端问卷调查系统的全栈开发,适用于课程设计、毕设选题与SpringBootVue全栈能力训练。系统采用SpringBoot构建RESTful后端,Vue开发Web管理端&#xff0…

作者头像 李华