Linux / Shell 常见报错速查
开发中常遇到的 Linux / Shell 报错信息,快速定位原因和解决方案。
Permission denied
出现场景:执行命令或访问文件时
原因:当前用户没有执行/读取/写入权限
解决方案:
- 用 sudo 提权:sudo <command>
- 修改文件权限:chmod +x script.sh(添加执行权限)
- 修改文件所有者:sudo chown $USER:$USER <file>
- 检查当前权限:ls -la <file>
预防:理解 Linux 权限模型(rwx),避免用 chmod 777
command not found / 未找到命令
出现场景:执行任何命令时
原因:命令未安装或不在 PATH 中
解决方案:
- 确认命令名拼写正确
- 安装命令:apt install <package> 或 yum install <package>
- 检查 PATH:echo $PATH
- 用完整路径执行:/usr/local/bin/command
- 如果是自己的脚本:确认有执行权限且路径正确
预防:安装新工具后检查是否在 PATH 中,必要时添加到 ~/.bashrc
Address already in use / EADDRINUSE
出现场景:启动服务时端口被占用
原因:另一个进程已经监听了该端口
解决方案:
- 查找占用进程:lsof -i :8080 或 ss -tlnp | grep 8080
- 杀掉占用进程:kill <PID> 或 kill -9 <PID>
- 换一个端口启动服务
- 如果是上次异常退出:等几秒让 TIME_WAIT 释放
预防:开发时用不同端口,或在启动脚本中先检查端口
No space left on device
出现场景:写入文件或安装软件时
原因:磁盘空间已满
解决方案:
- 查看磁盘使用:df -h
- 找大文件:du -sh /* | sort -rh | head -10
- 清理日志:sudo journalctl --vacuum-size=100M
- 清理 apt 缓存:sudo apt clean
- 清理 Docker:docker system prune -a
- 删除不需要的文件
预防:设置磁盘使用告警,定期清理日志和临时文件
ssh: connect to host xxx port 22: Connection timed out
出现场景:SSH 连接远程服务器时
原因:网络不通、防火墙阻止、SSH 服务未运行
解决方案:
- 检查网络连通性:ping <host>
- 检查端口是否开放:telnet <host> 22 或 nc -zv <host> 22
- 确认 SSH 服务运行:systemctl status sshd(在服务器上)
- 检查防火墙规则:iptables -L 或 ufw status
- 确认安全组/网络 ACL 允许 22 端口
预防:配置 SSH keepalive:在 ~/.ssh/config 中加 ServerAliveInterval 60