Linux 日志中常见报错含义解析

5次阅读

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

Linux 日志中常见报错含义解析

Linux 日志里出现的报错,多数不是随机字符串,而是有明确含义的系统错误代码。理解它们能快速定位问题根源,避免盲目重启或重装。

权限与访问类错误

这类错误最常见,直接反映操作被系统拒绝的原因。

  • EACCES (Permission denied):当前用户无权读/写/执行目标文件或目录。比如用普通用户启动需要绑定 80 端口的服务,或尝试删除 root 所有、权限为 600 的配置文件。
  • EACCES/EAGAIN 混合出现:有时日志里同时看到这两个码,说明权限不足,且系统资源(如文件描述符)也临时耗尽。需同时检查 ulimit -nls -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 -lcat /proc/sys/kernel/pid_max 对比即可确认。
text=ZqhQzanResources