Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Linux

แก้ไข: Could not open lock file /var/lib/dpkg/lock

ข้อความผิดพลาด could not open lock file /var/lib/dpkg/lock อาจสับสนเพราะอาจถามทันทีว่า "are you root?" แม้คุณจะรันคำสั่งอัปเดตด้วย prefix sudo ข้อผิดพลาดนี้จะขึ้นบนทุกอย่างที่ใช้ตัวจัดการแพ็กเกจ apt-get ไม่ว่าจะอัปเดตเดสก์ท็อป/แล็ปท็อป Ubuntu รุ่นต่างๆ หรือ Raspberry Pi ด้วย Raspbian Debian spin อาจเจอปัญหานี้บนแพลตฟอร์มไหนก็ได้

อย่างไรก็ตาม วิธีแก้ค่อนข้างง่าย สามารถละเลยคำถามว่าคุณเป็น root หรือไม่ และไปตรงหัวใจปัญหา ซึ่งเกี่ยวกับสองโปรเซสที่พยายามเข้าถึงไฟล์ที่ถูกล็อกพร้อมกัน

วิธีที่ 1: ตรวจสอบว่า sudo เข้าถึงทุกส่วนของคำสั่งได้

หากรัน sudo apt-get update && apt-get upgrade อาจเจอข้อผิดพลาดนี้ เพราะโปรเซสที่สองไม่มีอำนาจเข้าถึงไฟล์ /var/lib/dpkg/lock

แก้ไข: Could not open lock file /var/lib/dpkg/lock

ลองรัน sudo apt-get update && sudo apt-get upgrade แทน ดูว่าต่างหรือไม่ หากต่างออกไป แสดงว่าปัญหาแก้แล้ว เพราะแค่ไม่ได้ให้สิทธิ์โปรเซสที่สองเพียงพอ จำไว้ว่าคำสั่งนี้จะ update แล้ว upgrade ทุกแพ็กเกจ อาจขอให้ approve และใช้เวลานาน

มิฉะนั้น ปัญหาแก้แล้วสมบูรณ์ ไม่ต้องทำอะไรเพิ่ม

วิธีที่ 2: ลบไฟล์ /var/lib/dpkg/lock (Removing the lock file)

ผู้ใช้ curl, wget หรือคำสั่งดาวน์โหลดไฟล์แบบแยกต่างหาก อาจต้องเพิ่ม sudo นำหน้าคำสั่งนั้น หากทำงานจาก Raspbian เนื่องจากมันแทนที่ apt-get ในบางกรณี ผู้ใช้ Debian ทึบ, Xubuntu, Lubuntu, Linux Mint และเดสก์ท็อป/แล็ปท็อปคล้ายๆ ไม่ต้องกังวลเรื่องนี้ แต่ลองดูอีกทีก็ได้

หากยังไม่ได้ ให้ตรวจสอบว่าไม่มีโปรแกรมอื่นพยายามเข้าถึงไฟล์ขณะคุณรันอัปเดต ใช้ sudo lsof /var/lib/dpkg/lock ดูว่ามีโปรเซสอื่นเปิดไฟล์นี้อยู่หรือไม่ หากเปิดอยู่ ให้ปิดแอปพลิเคชันนั้นลง

จำไว้ว่าการมีสิทธิ์อ่าน/เขียนเพื่อเปิดไฟล์นี้ หมายถึงโปรแกรมนั้นต้องมีสิทธิ์ root ด้วย ดังนั้นต้องมีสิทธิ์ root เพื่อปิดโปรแกรมนั้น สามารถดูผ่าน Task Manager หากใช้ desktop environment ที่รองรับ คลิกขวาที่โปรเซสที่ผิดปกติและปิดได้ ลองคำสั่ง kill หรือ killall จากบรรทัดคำสั่งได้

ตอนนี้ลองรันคำสั่ง apt-get อีกครั้งดูว่าต่างหรือไม่ แต่ไม่ต้องทำอะไรเพิ่มหากแก้ได้ หากยังมีปัญหา ให้ลองลบ lock files โดยตรง แม้ควรมองว่าเป็น last resort แต่โดยปกติไม่ก่อให้เกิดปัญหากับโปรแกรม apt-get ยังควรลองวิธีอื่นก่อน เพราะอาจสับสนระบบ apt

Reboot บางครั้งช่วยได้ แต่อาจไม่เป็นทางเลือกบนเซิร์ฟเวอร์ที่ต้องเปิดตลอดเวลา หรืออุปกรณ์ Raspbian ลองรัน sudo rm /var/lib/dpkg/lock && sudo rm /var/lib/apt/lists/lock ซึ่งจะปลดล็อกไฟล์เฉพาะที่ apt ดูตอนรัน ต้องระมัดระวังชื่อไฟล์ เพราะรัน rm เป็น root ทำลายได้

สมมติว่าทำแล้วหลังลองวิธีอื่นหมดแล้ว ให้ลองรันคำสั่งอัปเดตอีกครั้งดู ไม่ควรมีปัญหาต่อไป เพราะไฟล์จะไม่มีอยู่แล้ว แต routines ของ apt-get จะสร้างใหม่ขณะรัน