Linux / Shell 常见报错速查

开发中常遇到的 Linux / Shell 报错信息,快速定位原因和解决方案。

Permission denied

出现场景:执行命令或访问文件时

原因:当前用户没有执行/读取/写入权限

解决方案:

  1. 用 sudo 提权:sudo <command>
  2. 修改文件权限:chmod +x script.sh(添加执行权限)
  3. 修改文件所有者:sudo chown $USER:$USER <file>
  4. 检查当前权限:ls -la <file>

预防:理解 Linux 权限模型(rwx),避免用 chmod 777

command not found / 未找到命令

出现场景:执行任何命令时

原因:命令未安装或不在 PATH 中

解决方案:

  1. 确认命令名拼写正确
  2. 安装命令:apt install <package> 或 yum install <package>
  3. 检查 PATH:echo $PATH
  4. 用完整路径执行:/usr/local/bin/command
  5. 如果是自己的脚本:确认有执行权限且路径正确

预防:安装新工具后检查是否在 PATH 中,必要时添加到 ~/.bashrc

Address already in use / EADDRINUSE

出现场景:启动服务时端口被占用

原因:另一个进程已经监听了该端口

解决方案:

  1. 查找占用进程:lsof -i :8080 或 ss -tlnp | grep 8080
  2. 杀掉占用进程:kill <PID> 或 kill -9 <PID>
  3. 换一个端口启动服务
  4. 如果是上次异常退出:等几秒让 TIME_WAIT 释放

预防:开发时用不同端口,或在启动脚本中先检查端口

No space left on device

出现场景:写入文件或安装软件时

原因:磁盘空间已满

解决方案:

  1. 查看磁盘使用:df -h
  2. 找大文件:du -sh /* | sort -rh | head -10
  3. 清理日志:sudo journalctl --vacuum-size=100M
  4. 清理 apt 缓存:sudo apt clean
  5. 清理 Docker:docker system prune -a
  6. 删除不需要的文件

预防:设置磁盘使用告警,定期清理日志和临时文件

ssh: connect to host xxx port 22: Connection timed out

出现场景:SSH 连接远程服务器时

原因:网络不通、防火墙阻止、SSH 服务未运行

解决方案:

  1. 检查网络连通性:ping <host>
  2. 检查端口是否开放:telnet <host> 22 或 nc -zv <host> 22
  3. 确认 SSH 服务运行:systemctl status sshd(在服务器上)
  4. 检查防火墙规则:iptables -L 或 ufw status
  5. 确认安全组/网络 ACL 允许 22 端口

预防:配置 SSH keepalive:在 ~/.ssh/config 中加 ServerAliveInterval 60