Linux问题解决方案:现实世界中的挑战与解决方案

Linux是一个强大而可靠的操作系统,但即使是经验丰富的用户也会遇到意外问题。无论是意外删除文件、忘记 root 密码还是系统运行缓慢,有效地进行故障排除对于成为真正的 Linux 专家至关重要。

本指南介绍了真实的 Linux 故障解决场景以及逐步解决方案,这些场景在系统管理员、开发人员和日常 Linux 用户中很常见。

场景1:意外删除了重要文件

您使用 rm 命令意外删除了一个重要文件,现在需要恢复它。与 WindowsmacOS 不同,Linux 没有针对从终端删除的文件的内置“回收站

您的恢复选项取决于正在使用的文件系统。

对于 EXT3/EXT4 文件系统

使用 extundelete,这是一个专为在 Linux 中从 ext3 和 ext4 文件系统中恢复已删除文件而设计的开源实用程序。

sudo apt install extundelete  # Debian-based  
sudo yum install extundelete  # RHEL-based  

在尝试恢复之前,卸载该分区以防止进一步写入可能覆盖已删除数据:

sudo umount /dev/sdX

接下来,运行以下命令以恢复已删除的文件,并确保将 /dev/sdX 替换为实际删除文件的分区。

sudo extundelete /dev/sdX --restore-all

对于 XFS、Btrfs 或 NTFS 文件系统

如果您的系统使用XFSBtrfsNTFS,则testdisk工具是一个更好的选择。

sudo apt install testdisk  # Debian-based  
sudo yum install testdisk  # RHEL-based  

运行testdisk并按照交互提示来恢复丢失的文件。

sudo testdisk

预防提示:

    • 使用trash-cli:使用rm之外,使用trash-cli将文件发送到可恢复的垃圾箱。
sudo apt install trash-cli  
trash-put myfile.txt  
  • 启用定期备份:设置rsyncTimeshift来自动备份重要文件。

场景2:恢复忘记的Root密码

您忘记了Root密码,无法执行管理任务,这意味着您无法安装软件、更改系统设置或访问关键文件。

您可以通过进入恢复模式或修改GRUB引导加载程序来重置Root密码。

使用恢复模式(Ubuntu/Debian)

首先,在系统重启时按住Shift键以访问GRUB菜单,然后选择“高级选项”→“恢复模式”,选择“切换到 root shell 提示符”。

在这里,将根文件系统重新挂载为可写,并重置root密码。

mount -o remount,rw /
passwd root

重新启动系统。

reboot

使用 rd.break(适用于 RHEL/CentOS/Fedora)

首先,在系统重启时,在 GRUB 菜单中按下e键,找到以linux开头的行,并在末尾添加rd.break

接下来,挂载根文件系统并重置 root 密码。

mount -o remount,rw /sysroot  
chroot /sysroot  
passwd root  

最后,退出并重新启动。

exit  
reboot  

预防提示:

  • 创建一个无密码的 sudo 用户以避免无法访问 root 权限。
  • 使用 SSH 密钥而不是密码进行身份验证。

情景 3: 安装了一个软件包,但它不起作用

您安装了一个软件包,但在尝试运行时显示“command not found”,这通常发生在二进制文件不在系统的PATH中、软件包未正确安装或存在缺失依赖项时。

解决方案是,首先需要验证软件包是否已安装。

dpkg -l | grep package-name  # Debian-based  
rpm -qa | grep package-name  # RHEL-based  

如果缺失,请重新安装它:

sudo apt install package-name  
sudo yum install package-name  

接下来,检查命令是否在您的系统PATH中。

which package-name  
echo $PATH

如果二进制文件位于非标准位置,请将其添加到PATH

export PATH=$PATH:/usr/local/bin  

预防提示

  • 安装新软件包后,请重新启动终端或运行hash -r
  • 使用像SnapFlatpak这样更好处理依赖关系的软件包管理器。

情景4:您的系统磁盘空间不足

您的系统显示“设备上没有剩余空间”错误,导致软件更新、日志记录和正常操作受阻。

以下是如何回收磁盘空间并使系统正常运行的方法。

步骤1:检查磁盘使用情况

解决方法是,首先使用df命令检查系统上每个分区使用了多少空间。

df -h

步骤2:查找并删除大文件

接下来,通过运行 du 命令 找到占用空间最大的文件,这将扫描您的系统并列出前 10 个最大文件或目录。使用 rm 删除不必要的文件或将它们移动到外部驱动器。

du -ah / | sort -rh | head -10

步骤 3:删除不必要的日志

日志对于故障排除和监控系统活动至关重要,但它们可能迅速增长并占用大量磁盘空间。

随着时间的推移,旧日志可能不再需要,使它们成为清理的主要候选者。

sudo journalctl --vacuum-time=2d  # Deletes logs older than 2 days  
sudo apt autoclean                # Removes outdated package files  

步骤 4:删除旧内核(Ubuntu/Debian)

当您更新系统时,特别是在 Ubuntu基于 Debian 的发行版 上,通常会安装新的 Linux 内核版本。

然而,旧内核不会自动删除,随着时间的推移,这些旧内核可能会积累并占用大量磁盘空间。

删除它们是一种安全有效的方式,可以释放空间而不影响系统的功能。

sudo apt autoremove --purge  

预防提示

  • 设置日志轮转:使用logrotate来自动管理日志文件大小和保留期限。
  • 监控磁盘使用情况:安装像ncdu这样的工具来跟踪磁盘使用情况并识别占用空间过多的文件。
  • 定期清理:安排定期清理以删除临时文件、缓存和未使用的软件包。

场景5:您的服务器突然无响应

您正在管理一台Linux服务器,突然间它停止响应,您尝试通过SSH连接,但连接超时或拒绝建立。您甚至可能会注意到服务器仍然通电,但不对任何命令做出反应。

这种情况可能是由各种问题引起的,包括:

要恢复控制,请按照以下故障排除步骤。

第一步:本地访问服务器或通过TTY

如果SSH不能正常工作,请尝试直接访问服务器或通过TTY会话:

  • 在物理机器上,请使用本地控制台。
  • 在虚拟机器上,请使用hypervisor的控制台。
  • 对于Linux系统,请使用Ctrl + Alt + F2(或F3F4等)切换到另一个TTY会话。

第二步:检查系统负载

登录后,请检查系统的负载和资源使用情况,这将显示系统在1、5和15分钟内的平均负载。负载值高于CPU核心数表示需求高。

uptime  

接下来,使用tophtop实时监控进程:

top  
Or
htop

查找消耗过多CPU或内存的进程。

第三步:识别和终止失控进程

要识别最消耗资源的进程,请运行:

ps aux --sort=-%cpu | head  

这将列出最消耗CPU的进程,您可以找到有问题的进程,并使用以下命令终止它:

kill -9 PID  

PID替换为有问题应用程序的进程ID。

第四步:检查系统日志

如果系统仍然响应,请检查错误日志:

sudo tail -f /var/log/syslog  
Or
sudo dmesg | tail  

这些命令显示最近的系统消息和内核日志,这可以帮助识别硬件或软件问题。

步骤 5:使用 SysRq 安全重启

如果系统完全冻结,请使用 SysRq 键组合安全重启:

echo b > /proc/sysrq-trigger  

这会触发安全重启,通过同步磁盘和卸载文件系统确保数据完整性。

结论

故障排除是每个 Linux 用户必备的技能。无论是恢复已删除的文件、重置密码,还是修复系统错误,知道正确的命令可以节省时间和挫折感。

你有自己的故障排除技巧吗?在评论中分享它们吧!让我们一起建立一个有用的 Linux 社区。

Source:
https://www.tecmint.com/linux-troubleshooting-tips/