附录 A · 02 常见报错与排查三列表 本节摘要:遇到报错时,按「报错信息 → 最可能原因 → 第一步排查方向」三列定位。覆盖 Linux 日常最常见的 20 来个报错,从权限、空间、端口、命令缺失到文件占用。这张表的价值在于「把报错翻译成下一步动作」——你不用记报错的全部含义,只要知道「看到它先敲什么」。 内容来源:综合全书各章踩坑整理。 一、权限与认证类 报错信息 | 最可能原因 | 第一步排查 | 无读写/执行权限 | 看权限位;是否需要 | 命令不存在或不在 PATH | ;确认装了( / ); | sudo 的 PATH 与你不同 | 用命令绝对路径( ) | 你无权用 sudo | 用 root 把你加入 sudo 组 / sudoers;或 加规则 (SSH) |
本节摘要:遇到报错时,按「报错信息 → 最可能原因 → 第一步排查方向」三列定位。覆盖 Linux 日常最常见的 20 来个报错,从权限、空间、端口、命令缺失到文件占用。这张表的价值在于「把报错翻译成下一步动作」——你不用记报错的全部含义,只要知道「看到它先敲什么」。
内容来源:综合全书各章踩坑整理。
| 报错信息 | 最可能原因 | 第一步排查 |
|---|---|---|
Permission denied |
无读写/执行权限 | ls -l 看权限位;是否需要 sudo |
command not found |
命令不存在或不在 PATH | which 命令;确认装了(apt install/yum install);echo $PATH |
sudo: 用户: command not found |
sudo 的 PATH 与你不同 | 用命令绝对路径(/usr/bin/xxx) |
user is not in the sudoers file |
你无权用 sudo | 用 root 把你加入 sudo 组 / sudoers;或 visudo 加规则 |
Permission denied (publickey) (SSH) |
密钥认证失败 | 检查公钥是否上传、~/.ssh 权限 700、私钥 600 |
Host key verification failed (SSH) |
服务器指纹变了 | 确认服务器确实换过,ssh-keygen -R 主机 清旧记录 |
| 报错信息 | 最可能原因 | 第一步排查 |
|---|---|---|
No such file or directory |
路径不存在 | 路径拼对没?相对路径的基准对吗?ls 逐层确认 |
No space left on device |
磁盘满 | df -h 看分区;du -sh * | sort -h 找大目录;删日志/旧文件 |
Disk quota exceeded |
用户配额满 | quota 查你的配额;删自己的大文件 |
| 删大文件空间没释放 | 进程还持有该文件 fd | lsof | grep deleted 找进程,重启它 |
Text file busy |
可执行文件正被运行,无法覆盖 | 先停掉运行它的进程,再覆盖 |
device is busy (umount) |
目录有文件被占用 | lsof +D /mnt 找占用进程,关掉 |
too many levels of symbolic links |
软链接循环(指向自己) | 检查软链接目标,修复循环 |
| 报错信息 | 最可能原因 | 第一步排查 |
|---|---|---|
Address already in use |
端口被占 | ss -tlnp | grep 端口 或 lsof -i :端口 找占用进程 |
Connection refused |
目标端口没服务监听 | 服务起了没?绑 0.0.0.0 还是 127.0.0.1? |
Connection timed out |
防火墙丢包 / 主机不可达 | ping 测链路;检查防火墙/安全组;traceroute |
fork: Resource temporarily unavailable |
PID 或用户进程数超限 | 查僵尸堆积(ps aux | grep Z);查 ulimit |
Too many open files |
文件描述符耗尽 | lsof -p PID | wc -l 看 fd 数;调 ulimit -n 或修代码泄漏 |
| 僵尸进程堆积 | 父进程不 wait 收尸 | 找父进程 ps -o ppid= -p 僵尸PID,kill -CHLD 父PID 或杀父进程 |
kill -9 杀不掉的进程 |
D 状态(不可中断睡眠) | cat /proc/PID/stack 看卡在哪;通常等 IO 返回 |
| 报错信息 | 最可能原因 | 第一步排查 |
|---|---|---|
binary operator expected (脚本) |
变量含空格未加引号 | 变量用 "$var" 包裹 |
unbound variable (set -u) |
用了未定义变量 | 检查变量名拼写;设默认 ${var:-默认} |
| cron 任务不触发/失败 | 环境/路径/输出问题 | 命令用绝对路径、>> log 2>&1、脚本有 #!/bin/bash |
curl: (7) Failed to connect |
端口没开或被防火墙挡 | ss -tlnp 确认监听;telnet 主机 端口 测连通 |
curl: (28) timed out |
连接超时 | --max-time 设短些;查网络/防火墙 |
curl: (60) SSL certificate problem |
TLS 证书不受信 | 公开站:补 CA;内网/自签:-k 跳过(⚠️) |
重定向无权限 (> /root/file) |
重定向是 Shell 做的,没 sudo | cmd | sudo tee 文件 |
| 报错信息 | 最可能原因 | 第一步排查 |
|---|---|---|
tar: Error exit delayed |
tar 解包时某文件失败 | 解压目录权限够吗?空间够吗? |
| 解压后文件到处都是 | 归档没有顶层目录 | 解压前 tar -tf 看结构;用 -C 目录 解到指定位置 |
| 中文文件名乱码(zip) | 编码不一致 | unzip -O GBK 文件 |
遇到任何报错,按这个顺序走,通常能在第 2-3 步定位:
ls -l/df -h/ss -tlnp/ps aux。lsof(谁占资源)、strace(程序卡在哪)。下一节是「未收录命令导航」——本书没讲的 500 多条命令怎么查。