ค้นหาเว็บไซต์

การแก้ไขปัญหา 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 เพื่อส่งไฟล์ไปยังถังขยะที่กู้คืนได้
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 ที่เป็นประโยชน์ด้วยกัน