Linux常用命令速查与排错实战:从磁盘权限到进程日志

发布时间:2026/10/28 9:38:58

Linux常用命令速查与排错实战:从磁盘权限到进程日志 简介《最全Linux常用命令大全.pdf》面向Linux初学者、运维入门者及需要频繁使用命令行的开发人员定位为命令速查与基础操作梳理文档帮助读者在文件管理、磁盘维护、压缩备份、权限设置和网络操作等场景中快速理解常用命令。资源包仅含1个PDF文件约130KB体量轻便适合本地留存或随时查阅。内容按文件和目录管理、磁盘空间、备份压缩、用户与权限、线上查询、文件阅读、网络操作、定位查找等模块组织既说明pwd、cd、ls、cp、mv、rm等基础命令的功能与常用选项也涉及mount、umount、df、du、fsck等磁盘操作并补充gzip、bzip2、zip等压缩工具及grep、cat等查找阅读用法便于建立较完整的命令索引。已有5592人学习可作为日常排错、复习和查阅的轻量参考。1. 一份 PDF 速查表能救什么场Linux 命令记不住不是你的问题半夜被叫起来处理一台线上机器磁盘写满服务起不来没有桌面环境只有一行闪烁的光标。我脑子里能想起来的是「df 看空间」「du 找大文件」但 df 后面跟哪个选项能按文件系统类型过滤、du 的 -x 到底限制了什么范围全靠猜。那次之后我在手机里存了一份按功能分类的 Linux 命令速查 PDF就是这份《最全 Linux 常用命令大全》。它把命令拆成文件与目录、磁盘空间、备份压缩、关机与系统信息、用户与权限、线上查询、文件阅读、网络操作、定位查找、杂项十块每块先给一张功能对照表再逐条讲用法、选项和示例。适合刚接手 Linux 服务器的人当字典翻也适合熟手在压力下核对参数——真正记不住的不是命令名是选项和它们的边界。下面按我自己翻这份手册的顺序拆一遍重点放在能抄、能跑、能排错的地方。2. 文件与目录十件套先用 pwd、cd、ls 定位再用 cp、mv、rm 动手这一章覆盖手册第 1 节的全部内容也是所有后续操作的起点。很多人命令敲错问题不在于不会 cp 或 rm而在于敲之前没确认「我在哪、这个路径指向谁、目标位置有没有同名文件」。三个定位命令加三个写操作命令构成一条最小闭环定位 → 确认 → 执行 → 复核。手册把这十个命令排在最前面顺序是对的只是它把每个命令单独讲实际用的时候得串起来。2.1 三段式定位pwd 拿基准、cd 换位置、ls 做确认pwd 的英文是 print working directory输出当前目录的绝对路径。它在交互式终端里看着没什么用因为提示符里通常已经带了路径但在脚本里它是唯一的基准来源——所有相对路径都以它为起点。我一般在脚本开头强制跑一次 pwd把结果打到日志里出问题时能直接判断是路径拼错还是文件真的不存在。cd 的两种路径写法必须分清。cd /usr是绝对路径从根目录开始找cd test是相对路径从当前目录往下找。手册里给的两个例子是对的但它没提cd ~和cd -的区别这两个在日常里出现频率极高cd ~回当前用户的家目录cd -回上一次所在的目录来回跳两个目录时比敲全路径快得多。ls 是这一组里选项最多的也最容易被随手敲成ls -l就完事。手册列了 -a、-l、-f、-r、-R、-s、-h 七个选项实际组合里最常用的是-laha 把隐藏文件带出来l 出详细信息h 把字节数换成 K/M/G。少一个 -a你可能会漏掉一个.env或者.gitignore然后花半小时怀疑文件被删了。# 打印当前目录的绝对路径脚本里用它当所有相对路径的基准 pwd # 绝对路径从根目录进入 /usr cd /usr # 相对路径进入当前目录下的 test 子目录 cd test # 回到上一次所在的目录两个目录之间来回跳时最省事 cd - # 列出全部文件含隐藏文件详细信息大小用人类可读单位 ls -lah # 只看单个文件的全部属性权限、属主、大小、修改时间 ls -l examples.doc # 递归列出目录树管道接 head 防止刷屏 ls -R /etc | head -30ls -l输出的第一列是十个字符比如-rwxr-xr-x第一位是文件类型-普通文件、d目录、l符号链接后九位每三位一组分别是属主、属组、其他人的 rwx 权限。这一列读不懂后面 chmod 那章就只能靠背数字所以在这里先把它看熟。手册里还列了-f显示文件类型、-s按大小排序、-r逆序这三个用得少但排查「目录里到底堆了什么」时有用比如ls -lSr | head能按从大到小把占空间最多的文件顶到前面。2.2 cp、mv、rm 的三个开关-i 是后悔药-r 是范围-v 是过程手册里这三个命令的选项表几乎一模一样-i 交互、-f 强制、-v 详细、-r 递归。这不是巧合因为它们背后都涉及「对已存在的目标做什么」。默认行为是静默覆盖——这是新手最容易翻车的地方一条cp a.txt b.txt敲下去b.txt 原来的内容就没了没有任何提示。-i 的作用是在覆盖前问一句-f 是反过来强制不提示。-i 和 -f 同时出现时后写的那个生效但如果你在 shell 里给 cp 配过别名很多发行版的 root 账号默认就带alias cpcp -i实际生效的是别名展开后的结果而不是你手敲的顺序。所以真正可靠的做法不是指望 -i而是执行前用 ls 确认目标或者干脆先cp到临时名再 mv 覆盖。-r 是递归开关只对目录有效。cp 不加 -r 复制目录会直接报omitting directorymv 移动目录不需要 -r移动不涉及内容遍历rm 删目录必须加 -r这三个差异手册没明说但实际用起来天天撞上。另外补一个手册没写但很常用的 -a归档模式等价于-dpR保留权限、属主、时间戳和符号链接本身做备份时用它比-r靠谱。# 复制单个文件到目录并改名Document 目录必须已经存在 cp t.txt Document/t # 归档式复制整个目录保留权限和时间戳目标名带日期便于回溯 cp -a ./conf /backup/conf-$(date %F) # 显示复制过程文件多的时候用它确认没有漏拷 cp -rv ./site /backup/site-$(date %F) # 移动前先看一眼目标位置有没有同名文件 ls -l Document/t.txt 2/dev/null; mv -i t.txt Document/ # 同目录下 mv 就是重命名 mv t.txt t.bak # 删之前先确认对象是谁 保证两条命令都执行 ls -l t.txt rm -i t.txtrm -r和rmdir的区别值得单独说一句rmdir 只能删空目录目录里但凡有一个文件就报Directory not empty所以它天然带一层保护rm -r会连目录带内容一起删且默认不确认。手册把 rmdir 放在 rm 后面简单带过实际排错时它是更安全的首选——先rm -r清空内容再 rmdir比一条rm -rf全清掉更容易在中途发现问题。2.3 把十件套串成一条可复现的操作链单个命令看懂了不代表能干活真正的考验是组合。下面这段是我做「备份一个配置目录、校验备份完整性、清理临时产物」时的固定套路可以整段复制到测试机上跑注意把路径换成你自己的。#!/bin/bash # 任何一条命令失败就退出用到未定义变量就退出管道中任一环节失败也退出 set -euo pipefail # 1. 建工作目录路径里带日期避免覆盖上一次的备份 WORK/tmp/demo-$(date %Y%m%d) mkdir -p $WORK echo [INFO] 工作目录: $(cd $WORK pwd) # 2. 确认源目录存在且非空避免 cp -a 复制了个空壳还不知道 ls -la /etc/ssh | head -10 # 3. 归档复制保留权限和符号链接 cp -a /etc/ssh $WORK/ssh.bak # 4. 校验比对文件数量数量对不上就说明有文件没拷过来 SRC_COUNT$(find /etc/ssh -type f | wc -l) DST_COUNT$(find $WORK/ssh.bak -type f | wc -l) echo [INFO] 源文件数$SRC_COUNT 备份文件数$DST_COUNT [ $SRC_COUNT -eq $DST_COUNT ] || { echo [FAIL] 文件数不一致; exit 1; } # 5. 清理先删内容再删目录rmdir 只在目录为空时成功等于多做一次校验 rm -rf $WORK/ssh.bak rmdir $WORK echo [OK] 完成这段脚本里值得注意的是set -euo pipefail和「文件数比对」两处。前者让脚本在任何一个环节出错时立刻停下而不是带着错误状态继续往下跑——很多「备份脚本跑完了但备份是空的」事故根源就是脚本没有这个开关。后者是通过可验证的结果做一次自检比肉眼看ls输出可靠得多。参数上还有两个细节cp -a里的 a 会保留属主普通用户执行时属主会变成自己只有 root 才能完整保留这一点在做系统级备份时要留意$(cd $WORK pwd)是为了拿绝对路径因为$WORK本身可能包含符号链接直接用 echo 输出的不一定是真实路径。这条链跑通之后手册第 1 节里剩下的 touch、cat、grep 就可以按需插进来——touch 建空文件、cat 看小文件全文、grep 在文件里找字符串这三个在下一章的日志排查里会反复出现。3. 归档与磁盘tar 的四个字母和 df 与 du 对不上账的三种原因手册第 2、3 节讲的是磁盘空间和压缩归档这两块在实际工作里几乎总是连着出现先发现磁盘满了再去找哪个目录大最后压缩归档腾空间。它把 mount、umount、df、du、fsck 放在一起把 bzip2、gzip、zip、tar 放在一起分类清楚但没讲清楚一个关键问题——df和du报出来的数字经常对不上而对不上的时候该信谁。3.1 tar 的四个字母-czvf 和 -xzvf 只差一个字母含义差很远tar 最早的用途是往磁带上写备份现在主要用来把一堆文件和目录打成一个归档文件。手册列了七个选项c 创建、x 抽取、t 列表、v 显示进度、f 指定文件名、z 走 gzip、j 走 bzip2。这里面最容易出错的是 f因为它必须紧挨着归档文件名tar -cvfz backup.tar.gz dir这种写法会把z当成文件名的一部分然后报一个让人摸不着头脑的错。第二个容易误解的点是tar 默认不压缩只打包。tar -cvf backup.tar dir出来的 backup.tar 体积约等于原目录总和只有加上 z 或 j 才真正压缩。很多人看到 .tar 后缀以为已经压过了结果备份盘不够用。# 创建并用 gzip 压缩c 创建、z 走 gzip、v 打印文件列表、f 指定归档名 tar -czvf backup-$(date %F).tar.gz /home/mine/documents # 只看归档里有什么不落地解包排查备份里到底有没有那个文件时用 tar -tzvf backup-2024-05-01.tar.gz # 解包到指定目录-C 必须放在最后且目标目录要事先存在 mkdir -p /tmp/restore tar -xzvf backup-2024-05-01.tar.gz -C /tmp/restore # 换成 bzip2压缩率更高、速度更慢后缀习惯写 .tar.bz2 tar -cjvf backup.tar.bz2 ./conf选项顺序上有个经验-czvf里的 f 永远放最后因为它后面紧跟的就是文件名。解包时-C也必须放在最后它后面跟目标目录。归档路径如果写成绝对路径/home/mine/documents解包时会按原路径还原可能覆盖现有文件写成相对路径./documents则解到当前目录下这是我做恢复时优先选的写法多一层目录比覆盖生产文件便宜太多。3.2 gzip、bzip2、zip 怎么选压缩率、速度、跨平台兼容性三选二手册说 bzip2 提供最大限度的压缩、zip 兼容性好这个判断是对的但没给出选择依据。实际选型看三个维度压缩率、压缩速度、对方能不能解开。给 Linux 服务器之间传gzip 最平衡给 Windows 同事发zip 最省事长期归档、对体积敏感且不在意时间才轮到 bzip2。工具典型后缀压缩率速度跨平台能否打包多文件gzip.gz中快一般否只能单文件bzip2.bz2高慢一般否只能单文件zip.zip中中好是保留目录结构tar gzip.tar.gz中快好是gzip 和 bzip2 有一个共同行为要注意它们默认原地压缩压完把原文件删掉只留 .gz 或 .bz2。这在磁盘快满的时候是优点但在你需要保留原文件时就是坑。gzip 有-k保留原文件bzip2 有-kzip 本身就不动原文件。# gzip 默认删除原文件-k 保留-l 看压缩比 gzip -k access.log gzip -l access.log.gz # 解压gunzip 等价于 gzip -d压缩包会被删掉、还原成原文件 gunzip access.log.gz # zip 递归打包目录Windows 双击即可解开跨平台首选 zip -r site-$(date %F).zip ./site # 只看 zip 内容不解压 unzip -l site-2024-05-01.zip手册里 bzip2 和 gzip 的示例段落写的是「把 file1、file2、file3 以及某个目录压缩起来放入 filename.bz2」这个描述有误导——gzip 和 bzip2 都不能把多个文件塞进一个压缩包那条命令实际只会压缩第一个参数后面的会被当成多余参数忽略或报错。要打包多文件必须先 tar 再压缩也就是tar -cjvf这种组合。这类示例描述上的偏差照抄会浪费时间看到「压缩多个文件」的描述时优先信命令本身的行为。3.3 df 与 du 对不上账挂载点遮蔽、inode 耗尽、已删除未释放df 看的是文件系统层面的容量数据来源是超级块du 是遍历目录把每个文件的大小累加。两者口径不同对不上是常态但差值巨大时通常对应三种具体原因。第一种是挂载点遮蔽。你在根分区上往/data写了 50G 数据后来又把一块新盘挂到/data此时df /data报的是新盘du -sh /data报的是新盘里的内容而那 50G 还占着根分区藏在挂载点下面看不见。判断方法是du -shx /加-x限制不跨文件系统如果结果远小于df -h /的已用值基本可以确认。第二种是 inode 耗尽。df -h显示还有空间写入却报No space left on device先跑df -i看 inode 使用率。小文件极多的场景缓存目录、邮件队列、session 文件几天就能把 inode 吃光而 inode 数量在格式化时就定死了删文件才能释放。第三种是已删除但仍被进程持有的文件。进程删了一个大日志文件文件系统标记为可回收但只要还有进程持有该文件的句柄空间就不会真正释放du也统计不到它。lsof L1能列出 link count 为 0 的打开文件重启对应进程或让它重新打开日志即可释放。# 按文件系统看容量和类型-T 显示文件系统类型一眼看出哪个是 overlay 哪个是 xfs df -hT # 看 inode 使用率磁盘有空间却写不进去八成是这里满了 df -i # 只看指定目录的总占用-s 汇总、-x 不跨文件系统 du -sh /var/log du -shx /var/* | sort -rh | head -10 # 找已删除但仍被进程占用的文件需要 lsof没装就先装 lsof L1 2/dev/null | head -20手册里 df 的选项表列了 -a、-i、-k、-t、-x、-T其中-i和-T是排查时最有用的两个-k现在基本被-h取代。du 的 -s 和 -h 组合du -sh是日常最高频用法-x在排查挂载点遮蔽时是关键。fsck 那一节要额外注意手册自己也写了「最好在没有人或没有分区挂上来时使用」实际执行时对已挂载的读写分区跑 fsck 有损坏文件系统的风险正确做法是先 umount实在不行就进单用户模式这条不要图省事。4. 进程与权限从 ps 的一屏 PID 到 chmod 的 751手册第 4、5 节讲系统信息和用户权限。这两块在排障时是连着的服务异常 → 查进程状态 → 发现是权限问题 → 改权限。它把 shutdown、reboot、ps、top、kill、date、cal 放在一节把 chmod、su、useradd 放在另一节实际用的时候顺序经常是反的——先看进程再回头改权限再重启服务。4.1 ps 与 top从一屏 PID 里定位到那个吃 CPU 的进程ps 是快照top 是持续刷新。手册对 ps 的描述是「查看有哪些程序正在执行」选项列了 -l、-u、-m、-r、-x这偏 BSD 风格实际更常用的是ps aux和ps -ef两种写法前者输出 USER、PID、%CPU、%MEM、VSZ、RSS、STAT、START、TIME、COMMAND后者输出 UID、PID、PPID、C、STIME、TTY、TIME、CMD。排障时我关注三列%CPU 看谁在算、%MEM 和 RSS 看谁在吃内存、STAT 看进程状态。STAT 里的R是运行中、S是可中断睡眠、D是不可中断睡眠通常在等 IOkill 不掉、Z是僵尸父进程没回收占着 PID 但不占资源。看到一堆D状态的进程说明问题在磁盘或网络 IO不在 CPU。# 全量进程按 CPU 倒序取前 10 行含表头 ps aux --sort-%cpu | head -11 # 全量进程按内存倒序 ps aux --sort-%mem | head -11 # 精确找一个服务grep -v grep 排除掉 grep 自己 ps -ef | grep -v grep | grep nginx # 看进程树确认父子关系和是谁拉起来的 ps -ef --forest | grep -A 3 nginx # top 批处理模式采一次样适合写进脚本或日志 top -b -n 1 | head -15ps aux里的 VSZ 是虚拟内存大小RSS 是实际驻留物理内存——判断内存泄漏要看 RSS 是否持续增长看 VSZ 容易被虚拟地址空间误导。top 顶部的 load average 三个数分别是 1、5、15 分钟的平均负载单核机器上超过 1 就要关注但它统计的是「可运行 不可中断」的进程数IO 卡住时 load 也会飙高而 CPU 是闲的这种情况配合ps aux | grep D 一起看才不会误判。4.2 kill 发的不是「杀死」指令是一个信号手册写「kill 的实际意义是送一个信号给这个正在执行的程序叫它自杀」这个说法虽然口语但比很多教材准确。kill 默认发 15 号信号 TERM进程收到后可以选择忽略、可以捕获后做清理再退出9 号信号 KILL 不能被捕获或忽略由内核直接回收进程进程没有任何机会写日志、落盘或释放锁。所以标准动作是「先 15 后 9」先发 TERM 给它几秒钟收拾等 5 到 10 秒还在就补一个 KILL。手册里直接给了kill -9 323的例子没讲为什么如果每次都用 9迟早会遇到数据没落盘或者共享内存段没释放的问题。# 先定位 PID注意排除 grep 自身否则会拿到一个假 PID ps -ef | grep -v grep | grep demo-app # 优先发 TERM(15)给进程清理的机会 kill -15 1234 # 等几秒确认是否退出还活着再补 KILL(9) sleep 5; ps -p 1234 /dev/null kill -9 1234 # 列出所有信号名称记不住编号时查这个 kill -l # 让进程重读配置HUP1等价于很多服务的 reload kill -HUP 1234kill -HUP这个用法值得单独记HUP 原意是终端挂断但绝大多数守护进程把它实现成「重新加载配置文件」改完 nginx 或 rsyslog 的配置不想中断服务时用它比 restart 温和。手册里提到了 HUP 代表重跑但没展开实际这是 kill 除了终止之外最有价值的用法。4.3 chmod 数字法751 到底对应哪三个权限手册第 5 节把 chmod 的符号法讲得比较细u/g/o/a 三类使用者/-/ 三种操作r/w/x 三种权限。数字法的对应关系是 r4、w2、x1三位数从左到右分别是属主、属组、其他人所以 751 等于urwx,gr-x,o--x。这里有一个手册里的笔误要提醒它在举例等价命令时写的是chmod urwx,grx,0x filename这里的0应该是字母o其他人敲成数字 0 会直接报错。手册里其他示例也有类似的小问题比如head –20 文件名用的是长破折号且少了-n正确写法是head -n 20或head -20。这类笔误不影响理解但照抄会卡住遇到报错先检查字符本身。目录权限和文件权限要分开理解。目录的 x 位表示「能否进入这个目录」r 位表示「能否列出目录内容」w 位表示「能否在目录内创建或删除文件」。所以一个目录是 644 时即使文件本身是 777你也进不去。反过来目录是 777 时任何人都能删掉里面的文件哪怕文件本身是 600——删除的权限来自目录不来自文件。这是新手最容易搞混的一条。# 符号法属主读写执行属组读执行其他人无权限 chmod urwx,grx,o /path/to/app # 数字法7rwx 5r-x 0---与上一条完全等价 chmod 750 /path/to/app # 递归改权限前先数一下影响范围避免误伤整个目录树 find /var/www -type f | wc -l find /var/www -type d -exec chmod 755 {} find /var/www -type f -exec chmod 644 {} 递归改权限时常见做法是目录统一 755、文件统一 644用find -type d和-type f分开处理而不是一条chmod -R 755全糊上去——后者会把所有文件也变成可执行既不安全也容易触发一些程序的校验。-exec ... 比-exec ... \;效率高因为它把多个文件批量传给一条命令而不是每个文件起一次进程。su 和 useradd 这两条相对简单su 切换用户后记得 exit 回来useradd 之后要跟着 passwd 设密码否则账号是锁定状态登不进去。5. 排查现场的五条踩坑记录从现象倒推命令哪里用错了这一章不按命令分类按「出问题时的样子」组织。下面五条都是我在真实环境里遇到或复现过的共同点是命令本身没写错错在对参数边界的理解。每条按现象、原因、解决三段写你可以对照自己手上的脚本看有没有同类问题。5.1 现象一条清理脚本跑完目录被清空了原因几乎总是变量为空加通配符。脚本里写了rm -rf $DIR/*某次$DIR因为上游命令失败而没赋值展开后变成rm -rf /*前缀斜杠让通配符从根目录开始匹配。更隐蔽的版本是rm -rf $DIR/变量为空时变成rm -rf /直接删根。解决办法有三层。第一层给脚本加set -u用到未定义变量立刻退出第二层用${DIR:?DIR 未设置}语法变量为空时直接报错中止第三层在执行前先 echo 出最终命令确认无误再真跑。我现在的习惯是任何带通配符的删除命令前面必须有一行echo rm -rf $DIR/*肉眼看一遍再执行。set -euo pipefail DIR${1:-} # 变量为空时立刻退出不往下走 : ${DIR:?用法: $0 目标目录} # 再确认一次目录存在且不是根目录 [ -d $DIR ] [ $DIR ! / ] || { echo 拒绝执行; exit 1; } # 先打印确认后再去掉 echo 真跑 echo rm -rf ${DIR:?}/*这里第三个坑是很多人以为加了引号就安全但$DIR/*的引号只包住变量星号仍在引号外照样展开。真正要防的是变量本身不是星号。5.2 现象find 的 -exec 报错或者行为诡异原因是分号没转义。find . -name *.tmp -exec rm {} ;里的分号会被 shell 当成命令分隔符吃掉find 收到的参数不完整要么报missing argument to -exec要么把后面的内容当成新命令执行。正确写法是\;反斜杠让 shell 把分号原样传给 find。另一种更高效的写法是用代替\;-exec rm {} 会把所有匹配文件一次性传给 rm而不是每个文件起一次进程。文件数量上千时两者耗时能差出一个数量级。# 正确分号转义每个文件执行一次 find /tmp -type f -name *.tmp -exec rm -i {} \; # 更高效批量传给一条命令等价于 rm -i f1 f2 f3 ... find /tmp -type f -name *.tmp -exec rm -i {} # 只打印不删除先确认匹配范围再动手 find /tmp -type f -name *.tmp -print | head -205.3 现象tail -f 跟了一段时间后不再输出新内容但服务日志明明还在写原因是日志轮转。logrotate 把 access.log 改名成 access.log.1 并新建了一个 access.logtail 进程持有的还是旧文件的 inode新写入的内容进了新文件tail 看不到。这时你会以为服务停了实际它一直在正常写日志。解决办法是把-f换成-F。-F等价于--followname --retry它跟踪的是文件名而不是文件描述符文件被替换或删除后会重新打开。同理tail -f在文件被删掉后会一直空转-F会给出提示并等待文件重新出现。# 不推荐文件轮转后跟丢 tail -f /var/log/messages # 推荐跟踪文件名轮转后自动重新打开 tail -F /var/log/messages # 配合 grep 只看关键行注意 grep 要加 --line-buffered 否则输出会攒着 tail -F /var/log/app.log | grep --line-buffered -E ERROR|FATAL5.4 现象为了省事执行 chmod -R 777之后 SSH 登不上、服务起不来原因是被改的不只是业务文件还有~/.ssh和系统配置。sshd 对密钥权限有硬性校验私钥必须是 600.ssh目录不能是组或其他用户可写否则直接拒绝认证并记一条Authentication refused: bad ownership or modes。把~/.ssh改成 777等于自己把登录通道关了。解决办法是先搞清楚哪些路径有权限要求再针对性改。.ssh目录 700、私钥 600、公钥和 known_hosts 644、authorized_keys 600 或 644 视发行版而定。真被改了就先从控制台或另一台机器登录把权限改回来。# 修复被递归改坏的 ssh 权限 chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa ~/.ssh/authorized_keys chmod 644 ~/.ssh/id_rsa.pub ~/.ssh/known_hosts # 检查哪些文件被改成了组或其他用户可写 find ~/.ssh -perm /022 -ls5.5 现象df -h 显示还有空间写入却报 No space left on device这个现象上一章从原理上讲过这里给完整的排查顺序。第一步df -i看 inode使用率 100% 就是它第二步lsof L1看有没有已删除未释放的大文件第三步du -shx /*逐层定位确认是不是挂载点遮蔽导致某个目录的数据藏在另一块盘下面。还有第四种少见但确实存在的原因文件系统保留块。ext 系列默认给 root 保留 5% 的空间df显示可用但普通用户写不进去用tune2fs -m可以调整保留比例。排查时按 inode → 已删除文件 → 挂载点 → 保留块这个顺序走基本能覆盖所有情况。# 一次把四类可能性都看一眼 df -hT; echo ---; df -i; echo --- lsof L1 2/dev/null | awk NR1 || $71024*1024 | head -10 du -shx /* 2/dev/null | sort -rh | head -10 # ext 系列文件系统看保留块比例 tune2fs -l /dev/sda1 2/dev/null | grep -i reserved block6. 进阶把速查表变成自己的命令库加一份开机自检清单手册的价值在于查但查的前提是你知道要查什么。真正把这份 PDF 用出效果的路径是三步把高频命令固化成别名把踩过的坑记进 history 的检索习惯里把「拿到一台新机器先跑什么」变成固定清单。第一步是别名。手册里 cp、mv、rm 都提供了 -i 选项但没有默认开启。在~/.bashrc里加几条别名相当于给这三个命令默认装上后悔药尤其是 rm多问一句的成本远低于误删的代价。注意别名只在交互式 shell 生效脚本里不生效所以脚本内的安全还得靠上一章讲的变量校验。# 追加到 ~/.bashrc然后 source ~/.bashrc alias cpcp -i alias mvmv -i alias rmrm -i alias llls -alh --colorauto alias dfdf -hT alias dudu -sh # 危险操作前先看一眼最终命令长什么样用 \rm 绕过别名 alias checkrmecho rm -rf第二步是把 history 当成自己的命令库。手册给的是通用示例而你真正会复用的是自己上周敲对的那条 tar 或那条 find。history | grep tar比翻手册快CtrlR反向增量搜索比翻 history 列表更快。我一般会在跑通一条复杂命令后立刻用history -s或者直接记到一个小抄文件里文件放在~/.cheatsheet格式就是一行注释加一行命令随时 grep。第三步是开机自检清单。手册第 2、4、9 节里分散着 df、du、ps、top、netstat、which、whereis、man 这些命令单独看没什么串起来就是一套五分钟能跑完的环境确认流程。拿到一台新机器、或者怀疑环境有异常时我固定按这个顺序跑一遍输出贴到排查记录里。顺序命令判断什么1df -hT; df -i磁盘容量和 inode 是否吃紧2free -h内存和 swap 余量3ps aux --sort-%cpu | head -6谁在占 CPU4ps aux --sort-%mem | head -6谁在占内存5netstat -tlnp哪些端口在监听、被谁监听6ls -l /var/log日志有没有异常增长配套的定位命令是手册第 9 节那组which从 PATH 里找可执行文件位置whereis找可执行文件加 manpagewhatis一句话说明命令用途locate靠数据库快速定位——但 locate 的数据库是定时更新的刚创建或刚改名的文件它找不到得先updatedb。手册里提到了这一点实际排查时我一般直接用find / -name 文件名 2/dev/null虽然慢但结果是实时的不会因为索引过期给出错误结论。最后说一个我自己的教训。早些年我很依赖「记性好」觉得命令查一次就记住了结果在一次故障处理中明明知道要用du -shx排查挂载点遮蔽手一抖敲成了du -sh多跑了两分钟才发现结果不对。从那以后我每次遇到不常用的参数组合都会先在一台测试机上跑一遍确认输出符合预期再上生产set -euo pipefail和先 echo 后执行这两个习惯也是那时候养成的。手册是死的命令的行为边界得自己踩一遍才算真会。希望帮到你。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/28 9:38:58

使用Flask在本地调用树莓派摄像头

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 9:38:58

ok-ww 鸣潮自动战斗与一键日常使用指南:10 分钟跑通

ok-ww 鸣潮自动战斗与一键日常使用指南:10 分钟跑通 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves ok-ww 是一个开源免…

2026/10/28 10:55:01

Swisslog分拆战略解析:百年工业巨头的转型之路

1. 百年老店的分拆迷局瑞士工业巨头Swisslog最近宣布将公司一分为二,这条消息在业内引发了不小的震动。作为一家拥有125年历史的瑞士老牌企业,这已经是第四次经历所有权变更后的重大战略调整。我跟踪工业自动化领域多年,这种百年老店主动&quo…

2026/10/28 10:55:01

2026年主流AI API技术特性与调用优化指南

1. 2026年主流AI API调用全景图四款代表性API的技术特性与典型应用场景:DeepSeek多模态API核心能力:支持文本/图像/音频的联合处理技术亮点:动态上下文窗口(1M tokens自适应)典型报错:"API Error: con…

2026/10/28 10:55:01

大模型应用开发:2026年程序员高薪技术栈解析

1. 为什么大模型应用开发成为2026年程序员高薪赛道?三年前如果有人告诉你"写提示词能月入五万",你可能会觉得是天方夜谭。但今天,大模型应用开发工程师的招聘薪资已经普遍突破30k/月,头部企业甚至开出了百万年薪。这个现…

2026/10/28 10:55:01

大数据特征工程实战:核心技术与应用场景解析

1. 特征工程在大数据领域的核心价值第一次接触大数据项目时,我犯了个典型错误——把90%的时间花在模型调参上,结果发现效果还不如同事简单处理后的基准模型。后来才明白,在真实业务场景中,特征工程的质量直接决定了模型效果的上限…

2026/10/28 10:55:01

GPU显存优化:Unified Memory与Tensor Offloading技术解析

1. 显存不足的困境与解决方案概览当你在本地运行Stable Diffusion、视频火山大模型或其他AI应用时,最常遇到的报错可能就是"CUDA error: out of memory"。我最近帮同事调试一台配备RTX 3060(12GB显存)的工作站时,加载一…

2026/10/28 10:49:53

SylixOS驱动开发实战:从模块加载到LCD点亮的完整链路

简介:《SylixOS设备驱动程序开发1》面向具备一定操作系统基础、希望掌握 SylixOS 驱动开发的嵌入式工程师与学习者,系统讲解该实时操作系统下的驱动框架与内核机制。全书从驱动与操作系统的关系、ARM 处理器与教学平台入手,逐步展开并发与同步…

2026/10/27 14:24:03

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/28 0:02:13

Python股票自动交易系统源码解析:从行情获取到风控的完整链路

简介:这份资源是面向高校计算机、金融相关专业毕业设计场景的完整项目源码包,主题为基于Python的股票自动交易系统,适合需要完成毕设选题、课程设计或自学金融量化交易开发的学生与开发者参考。压缩包共收录687个文件,整体约14.93…

2026/10/28 0:02:13

视酷酷信IM源码部署指南:Java 17+MySQL 8.0.33实战配置

简介:这是一套2024年亲测可部署的视酷酷信IM即时通讯系统源码,面向具备Java、OC、C#及Vue开发能力的技术人员,解决私有化即时通讯平台快速搭建与二次定制需求,尤其适用于需集成商城、保障数据主权的中小型企业或独立开发者。资源共…

2026/10/28 0:02:13

Python爬取百度迁徙数据:接口解析、批量采集与避坑指南

简介:这份资源是一个用Python爬取百度迁徙数据的脚本压缩包,面向具备Python基础、希望入门网络爬虫与数据解析的开发者,解决按日期获取全国热门城市人口迁徙数据的问题。包内共1个文件,为单个py脚本,压缩包约1KB&#…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑