การแก้ไขปัญหา Linux: 5 ปัญหาทั่วไป & วิธีแก้ไข
Linux เป็นระบบปฏิบัติการที่ทรงพลังและเชื่อถือได้ แต่แม้แต่ผู้ใช้ที่ช่ําชองก็ยังประสบปัญหาที่ไม่คาดคิด ไม่ว่าจะเป็นไฟล์ที่ถูกลบ รหัสผ่านรูทที่ลืม หรือระบบที่ซบเซา การรู้วิธีแก้ไขปัญหาอย่างมีประสิทธิภาพเป็นกุญแจสําคัญในการเป็นผู้เชี่ยวชาญ Linux ที่แท้จริง
คู่มือนี้นําเสนอสถานการณ์การแก้ปัญหา Linux ในโลกแห่งความเป็นจริงพร้อมกับวิธีแก้ปัญหาทีละขั้นตอน ซึ่งพบได้ทั่วไปในหมู่ผู้ดูแลระบบ นักพัฒนา และผู้ใช้ Linux ในชีวิตประจําวัน
สถานการณ์สมมติที่ 1: คุณลบแฟ้มสําคัญโดยไม่ได้ตั้งใจ
คุณลบไฟล์สําคัญโดยไม่ได้ตั้งใจโดยใช้คําสั่ง rm และตอนนี้คุณต้องกู้คืนไฟล์นั้น ซึ่งแตกต่างจาก Windows และ macOS Linux ไม่มี "ถังรีไซเคิล" ในตัวสําหรับไฟล์ที่ถูกลบออกจากเทอร์มินัล
ตัวเลือกการกู้คืนของคุณจะขึ้นอยู่กับระบบไฟล์ที่ใช้งานอยู่
สําหรับระบบไฟล์ EXT3/EXT4
ใช้ extundelete ซึ่งเป็นยูทิลิตี้โอเพ่นซอร์สที่ออกแบบมาเพื่อกู้คืนไฟล์ที่ถูกลบจากระบบไฟล์ ext3 และ ext4 ใน Linux
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 เครื่องมือ testdisk เป็นตัวเลือกที่ดีกว่า
sudo apt install testdisk # Debian-based
sudo yum install testdisk # RHEL-based
เรียกใช้ testdisk และทําตามคําแนะนําแบบโต้ตอบเพื่อกู้คืนไฟล์ที่สูญหาย
sudo testdisk
เคล็ดลับการป้องกัน:
- ใช้ trash-cli: แทนที่จะใช้
rm
ให้ใช้trash-cli
เพื่อส่งไฟล์ไปยังถังขยะที่กู้คืนได้
- ใช้ trash-cli: แทนที่จะใช้
sudo apt install trash-cli
trash-put myfile.txt
- เปิดใช้งานการสํารองข้อมูลเป็นประจํา: ตั้งค่า rsync หรือ Timeshift เพื่อสํารองข้อมูลไฟล์สําคัญโดยอัตโนมัติ
สถานการณ์สมมติที่ 2: การกู้คืนรหัสผ่านรูทที่ลืม
คุณลืมรหัสผ่านรูทและไม่สามารถทํางานด้านการดูแลระบบได้ ซึ่งหมายความว่าคุณไม่สามารถติดตั้งซอฟต์แวร์ เปลี่ยนการตั้งค่าระบบ หรือเข้าถึงไฟล์สําคัญได้
คุณสามารถรีเซ็ตรหัสผ่านรูทได้โดยการบูตเข้าสู่โหมดการกู้คืนหรือแก้ไข GRUB bootloader
การใช้โหมดการกู้คืน (Ubuntu/Debian)
ขั้นแรกให้รีบูตระบบของคุณและกด Shift
ค้างไว้ระหว่างเริ่มต้นเพื่อเข้าถึงเมนู GRUB จากนั้นเลือก "ตัวเลือกขั้นสูง" → "โหมดการกู้คืน" แล้วเลือก "วางไปที่พรอมต์เชลล์รูท"
ที่นี่ ให้ต่อเชื่อมระบบไฟล์รูทอีกครั้งตามที่เขียนได้และรีเซ็ตรหัสผ่านรูท
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
เคล็ดลับการป้องกัน:
- สร้างผู้ใช้ sudo แบบไม่ใช้รหัสผ่านเพื่อหลีกเลี่ยงการถูกล็อคไม่ให้เข้าถึงรูท
- ใช้คีย์ SSH แทนรหัสผ่านสําหรับการตรวจสอบสิทธิ์
สถานการณ์ที่ 3: คุณติดตั้งแพคเกจ แต่ไม่ทํางาน
คุณติดตั้งแพ็คเกจ แต่มีข้อความว่า "ไม่พบคําสั่ง
" เมื่อคุณพยายามเรียกใช้ ซึ่งมักจะเกิดขึ้นเมื่อไบนารีไม่ได้อยู่ใน 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
หลังจากติดตั้งแพ็คเกจใหม่ - ใช้ตัวจัดการแพ็คเกจ เช่น Snap หรือ Flatpak ซึ่งจัดการกับการพึ่งพาได้ดีกว่า
สถานการณ์ที่ 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 แต่การเชื่อมต่อหมดเวลาหรือปฏิเสธที่จะสร้าง คุณอาจสังเกตเห็นว่าเซิร์ฟเวอร์ยังคงเปิดอยู่ แต่ไม่ตอบสนองต่อคําสั่งใดๆ
สถานการณ์นี้อาจเกิดจากปัญหาต่างๆ ได้แก่:
- การใช้งาน CPU หรือหน่วยความจําสูงเนื่องจากกระบวนการที่หลบหนี
- คอขวด I/O ของดิสก์ ซึ่งระบบโอเวอร์โหลดด้วยการดําเนินการอ่าน/เขียน
- เคอร์เนลตื่นตระหนกหรือระบบขัดข้อง
- ความล้มเหลวของเครือข่าย ป้องกันการเข้าถึงระยะไกล
เมื่อต้องการคืนค่าการควบคุม ให้ทําตามขั้นตอนการแก้ไขปัญหาเหล่านี้
ขั้นตอนที่ 1: เข้าถึงเซิร์ฟเวอร์ในเครื่องหรือผ่าน TTY
หาก SSH ไม่ทํางาน ให้ลองเข้าถึงเซิร์ฟเวอร์โดยตรงหรือผ่านเซสชัน TTY:
- บนเครื่องจริง ให้ใช้คอนโซลภายในเครื่อง
- บนเครื่องเสมือน ให้ใช้คอนโซลของไฮเปอร์ไวเซอร์
- สําหรับระบบ Linux ให้เปลี่ยนไปใช้เซสชัน TTY อื่นโดยใช้
Ctrl + Alt + F2
(หรือF3
,F4
เป็นต้น)
ขั้นตอนที่ 2: ตรวจสอบโหลดระบบ
เมื่อเข้าสู่ระบบแล้ว ให้ตรวจสอบโหลดของระบบและการใช้ทรัพยากร ซึ่งจะแสดงค่าเฉลี่ยโหลดของระบบในช่วง 1, 5 และ 15 นาที ค่าโหลดที่สูงกว่าจํานวนคอร์ CPU บ่งชี้ถึงความต้องการสูง
uptime
จากนั้นใช้ top หรือ htop เพื่อตรวจสอบกระบวนการแบบเรียลไทม์:
top
Or
htop
มองหากระบวนการที่ใช้ CPU หรือหน่วยความจํามากเกินไป
ขั้นตอนที่ 3: ระบุและฆ่ากระบวนการที่หลบหนี
หากต้องการระบุกระบวนการที่ใช้ทรัพยากรมากที่สุด ให้เรียกใช้:
ps aux --sort=-%cpu | head
รายการนี้แสดงรายการกระบวนการที่ใช้ CPU อันดับต้น ๆ ซึ่งคุณสามารถค้นหากระบวนการที่มีปัญหาและยุติกระบวนการโดยใช้:
kill -9 PID
แทนที่ PID
ด้วย ID กระบวนการของแอ็พพลิเคชันที่มีปัญหา
ขั้นตอนที่ 4: ตรวจสอบบันทึกระบบ
หากระบบยังคงตอบสนอง ให้ตรวจสอบบันทึกเพื่อหาข้อผิดพลาด:
sudo tail -f /var/log/syslog
Or
sudo dmesg | tail
คําสั่งเหล่านี้แสดงข้อความระบบล่าสุดและบันทึกเคอร์เนล ซึ่งสามารถช่วยระบุปัญหาฮาร์ดแวร์หรือซอฟต์แวร์ได้
ขั้นตอนที่ 5: รีบูตอย่างปลอดภัยโดยใช้ SysRq
หากระบบค้างอย่างสมบูรณ์ ให้ใช้คีย์ผสม SysRq เพื่อรีบูตอย่างปลอดภัย:
echo b > /proc/sysrq-trigger
สิ่งนี้จะทริกเกอร์การรีบูตอย่างปลอดภัย เพื่อให้มั่นใจถึงความสมบูรณ์ของข้อมูลโดยการซิงค์ดิสก์และยกเลิกการต่อเชื่อมระบบไฟล์
บทสรุป
การแก้ไขปัญหาเป็นทักษะที่จําเป็นสําหรับผู้ใช้ Linux ทุกคน ไม่ว่าจะเป็นการกู้คืนไฟล์ที่ถูกลบการรีเซ็ตรหัสผ่านหรือแก้ไขข้อผิดพลาดของระบบการรู้คําสั่งที่ถูกต้องสามารถประหยัดเวลาและความยุ่งยากได้
คุณมีเคล็ดลับการแก้ไขปัญหาของคุณเองหรือไม่? แบ่งปันในความคิดเห็น! มาสร้างชุมชน Linux ที่เป็นประโยชน์ด้วยกัน