Linux 问题解决场景:现实世界的挑战和解决方案

Linux是一个功能强大且可靠的操作系统,但即使是经验丰富的用户也会遇到意想不到的问题。无论是删除的文件、忘记 root 密码还是运行缓慢的系统,了解如何有效地排除故障是成为真正的 Linux 专家的关键。

本指南介绍了现实世界中的 Linux 问题解决方案以及分步解决方案,这些方案在系统管理员、开发人员和日常 Linux 用户中很常见。

场景一:您不小心删除了重要文件

您不小心删除了一个重要文件,现在您需要恢复它。不像视窗macOS,Linux没有内置的“回收站” 对于从终端删除的文件。

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

对于 EXT3/EXT4 文件系统

使用溢出,这是一个开源实用程序,旨在从 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 文件系统

如果您的系统使用XFS,Btrfs, 或者NTFS, 这工具是一个更好的选择。

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

跑步测试盘并按照交互式提示恢复丢失的文件。

sudo testdisk

预防技巧:

    • 使用trash-cli: 而不是rm, 使用trash-cli将文件发送到可恢复的垃圾箱。
sudo apt install trash-cli  
trash-put myfile.txt  
  • 启用定期备份: 设置或者时移自动备份重要文件。

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

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

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

使用恢复模式 (Ubuntu/Debian)

第一的,重新启动您的系统并按住Shift在启动期间访问GRUB菜单,然后选择“高级选项” → “恢复模式”并选择“进入 root shell 提示符”。

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

mount -o remount,rw /
passwd root

重新启动系统。

reboot

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

第一的,重新启动您的系统,请按e在 GRUB 菜单中找到以linux并添加rd.break在最后。

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

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

最后退出并重新启动。

exit  
reboot  

预防技巧:

  • 创建一个以避免被锁定而无法获得 root 访问权限。
  • 使用 SSH 密钥代替密码进行身份验证。

场景 3:您安装了软件包,但它不起作用

您安装了一个软件包,但它说“command not found” 当您尝试运行它时,这通常发生在二进制文件不在您的系统中时小路、软件包安装不正确,或者缺少依赖项。

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

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

如果丢失,请重新安装:

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

接下来,检查该命令是否在您的系统中小路

which package-name  
echo $PATH

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

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

预防技巧:

  • 重新启动终端或运行hash -r安装新软件包后。
  • 使用包管理器,例如或者,可以更好地处理依赖关系。

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

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

以下是如何回收磁盘空间并保持系统平稳运行。

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

解决方案是,首先您需要使用以下命令检查系统上每个分区使用了多少空间。

df -h

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

接下来,通过运行找到消耗空间最大的文件,它将扫描您的系统并列出前 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)

当您更新系统时,尤其是在乌班图或者,经常会安装新版本的Linux内核。

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

删除它们是释放空间而不影响系统功能的安全有效的方法。

sudo apt autoremove --purge  

预防技巧:

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

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

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

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

  • 由于失控的进程。
  • 磁盘 I/O 瓶颈,系统因读/写操作而过载。
  • 内核恐慌或系统崩溃。
  • 网络故障,阻止远程访问。

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

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

如果 SSH 不起作用,请尝试直接访问服务器或通过 TTY 会话访问服务器:

  • 在物理机上,使用本地控制台。
  • 在虚拟机上,使用虚拟机管理程序的控制台。
  • 对于 Linux 系统,使用以下命令切换到另一个 TTY 会话Ctrl + Alt + F2(或者F3,F4, ETC。)。

第 2 步:检查系统负载

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

uptime  

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

top  
Or
htop

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

第 3 步:识别并终止失控进程

要识别资源最密集的进程,请运行:

ps aux --sort=-%cpu | head  

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

kill -9 PID  

代替PID以及有问题的应用程序的进程 ID。

第四步:检查系统日志

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

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

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

第 5 步:使用 SysRq 安全重启

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

echo b > /proc/sysrq-trigger  

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

结论

故障排除是每个 Linux 用户的一项基本技能。无论是恢复已删除的文件、重置密码还是修复系统错误,了解正确的命令都可以节省时间并减少挫败感。

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