linux日志错误代码含义明确,eacces表示权限拒绝,erofs表示只读文件系统,enoent表示路径不存在,eaddrinuse表示端口占用,enospc表示空间或inode耗尽,emfile表示文件描述符超限。

Linux 日志里出现的报错,多数不是随机字符串,而是有明确含义的系统错误代码。理解它们能快速定位问题根源,避免盲目重启或重装。
权限与访问类错误
这类错误最常见,直接反映操作被系统拒绝的原因。
- EACCES (Permission denied):当前用户无权读/写/执行目标文件或目录。比如用普通用户启动需要绑定 80 端口的服务,或尝试删除 root 所有、权限为 600 的配置文件。
-
EACCES/EAGAIN 混合出现:有时日志里同时看到这两个码,说明权限不足,且系统资源(如文件描述符)也临时耗尽。需同时检查
ulimit -n和ls -l输出。 -
EROFS (Read-only file system):文件系统被挂载为只读,常见于磁盘错误后内核自动降级保护。运行
mount | grep "ro"可确认,修复前勿强行写入。
路径与资源不存在类错误
程序找不到它要的东西,不一定代表配置错了,可能只是环境没准备好。
-
ENOENT (No such file or directory):路径中某个环节缺失——可能是脚本里写死了
/opt/app/config.yaml,但实际只解压到了/opt/app-v2/;也可能是 systemd 服务 Unit 文件里ExecStart=指向了未安装的二进制。 -
ENOTDIR (Not a directory):把文件当目录用了。例如
cd /etc/nginx.conf或在脚本中对一个普通文件执行find /path/to/file -type d。 -
EADDRNOTAVAIL (Address not available):绑定 IP 失败,典型场景是服务配置了
listen 192.168.10.100:80,但该 IP 并未配置在任何网卡上,或/etc/hosts中 localhost 解析异常。
端口与网络连接类错误
服务起不来、连不上,八成和这些错误有关。
-
EADDRINUSE (Address already in use):端口冲突。用
sudo ss -tulpn | grep :8080查谁占着,再决定 kill 进程还是改配置。 - ECONNREFUSED (Connection refused):目标端口有监听,但服务进程没响应请求。常见于数据库刚启动完还没 ready,或应用启动成功但健康检查接口返回 503。
-
ETIMEDOUT / EHOSTUNREACH:前者多因防火墙丢包、远端负载高或中间网络抖动;后者更底层,说明路由表里根本没有去往该 IP 的路径,
ip route get 10.20.30.40可验证。
资源耗尽与系统限制类错误
这类错误往往伴随服务突然失效,但系统看起来“一切正常”,容易误判。
-
ENOSPC (No space left on device):不只是磁盘满。inode 耗尽也会触发此错误(
df -i查),尤其大量小文件场景(如日志轮转未压缩、容器临时文件堆积)。 -
EMFILE (Too many open files):单个进程打开的文件描述符超限。Node.js、Java 应用常因连接池未关闭或日志句柄泄漏触发。调大
ulimit -n是临时解法,查 fd 泄漏才是根本。 -
fork: Cannot allocate memory:不一定是内存真不够。当
pid_max达到上限(默认 32768),或vm.overcommit_memory=2且剩余内存不足以满足新进程预估开销时,也会报这个错。用ps -eLf | wc -l和cat /proc/sys/kernel/pid_max对比即可确认。










