Linux 問題解決方案:實際挑戰與解決方案

Linux是一個強大且可靠的操作系統,但即使是經驗豐富的用戶也會遇到意外的問題。無論是刪除的文件、忘記的根密碼,還是系統緩慢,知道如何有效地進行故障排除是成為真正的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: 恢復忘記的根密碼

您忘記了根密碼,無法執行管理任務,這意味著您無法安裝軟件、更改系統設置或訪問重要文件。

您可以通過進入恢復模式或修改GRUB引導程序來重置根密碼。

使用恢復模式(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這樣的工具來追蹤磁盤使用量並識別佔用空間的文件。
  • 定期清理:定期清理臨時文件、緩存和未使用的軟件包。

情景五:您的服務器突然無響應

您正在管理一台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/