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

แก้ไข "ไม่สามารถล็อคไดเร็กทอรีการดูแลระบบ (/var/lib/dpkg/)" ใน Ubuntu


ในขณะที่ใช้คำสั่ง apt-get หรือเครื่องมือจัดการแพ็คเกจ APT ที่ค่อนข้างใหม่ใน Ubuntu Linux หรืออนุพันธ์เช่น Linux Mint (ซึ่งจริงๆ แล้วฉันใช้เป็นระบบปฏิบัติการหลักสำหรับ ทำงานประจำวัน) คุณอาจพบข้อผิดพลาด – “ไม่สามารถล็อคไดเร็กทอรีการดูแลระบบ (/var/lib/dpkg/) เป็นอีกกระบวนการหนึ่งที่ใช้มัน ” บรรทัดคำสั่ง

ข้อผิดพลาดนี้อาจสร้างความรำคาญโดยเฉพาะสำหรับผู้ใช้ Linux (Ubuntu) ใหม่ที่อาจไม่ทราบสาเหตุของข้อผิดพลาดอย่างแน่ชัด

ด้านล่างนี้คือตัวอย่าง ซึ่งแสดงข้อผิดพลาดของไฟล์ล็อคใน Ubuntu 16.10:

tecmint@TecMint:~$ sudo apt install neofetch
[sudo] password for tecmint:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg), is another process using it?

ผลลัพธ์ด้านล่างนี้เป็นอีกตัวอย่างที่เป็นไปได้ของข้อผิดพลาดเดียวกัน:

E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/ 
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) 
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

คุณจะแก้ไขข้อผิดพลาดข้างต้นได้อย่างไรในกรณีที่คุณเจอมันในอนาคต? มีหลายวิธีในการจัดการกับข้อผิดพลาดนี้ แต่ในคู่มือนี้ เราจะอธิบายสองวิธีที่ง่ายที่สุดและอาจเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการแก้ปัญหา

1. ค้นหาและฆ่ากระบวนการ apt-get หรือ apt ทั้งหมด

เรียกใช้คำสั่งด้านล่างเพื่อสร้างรายการกระบวนการทั้งหมดที่มีชื่อประกอบด้วยคำว่า apt คุณจะได้รับรายการที่รวม apt หรือ apt-get< ทั้งหมด ประมวลผลโดยใช้คำสั่ง ps และ grep ร่วมกับไปป์ไลน์

ps -A | grep apt

สำหรับแต่ละกระบวนการ apt-get หรือ apt ที่คุณเห็นในผลลัพธ์ของคำสั่งด้านบน ให้ฆ่าแต่ละกระบวนการโดยใช้คำสั่งด้านล่าง

พบกระบวนการ ID (PID) ในคอลัมน์แรกจากภาพหน้าจอด้านบน

sudo kill -9 processnumber
OR
sudo kill -SIGKILL processnumber

ตัวอย่างเช่น ในคำสั่งด้านล่าง โดยที่ 9 คือหมายเลขสัญญาณสำหรับสัญญาณ SIGKILL จะฆ่ากระบวนการ apt แรก:

sudo kill -9 13431
OR
sudo kill -SIGKILL 13431

2. ลบไฟล์ล็อค

ไฟล์ล็อคจะป้องกันการเข้าถึงไฟล์อื่นหรือข้อมูลบางอย่างบนระบบ Linux ของคุณ แนวคิดนี้มีอยู่ใน Windows และระบบปฏิบัติการอื่นๆ เช่นกัน

เมื่อคุณรันคำสั่ง apt-get หรือ apt ไฟล์ล็อคจะถูกสร้างขึ้นภายใต้ไดเรกทอรีใด ๆ เหล่านี้ /var/lib/apt/lists/, /var/lib/dpkg/ และ /var/cache/apt/archives/

ซึ่งจะช่วยหลีกเลี่ยงกระบวนการ apt-get หรือ apt ที่กำลังทำงานอยู่จากการถูกขัดจังหวะโดยผู้ใช้หรือกระบวนการของระบบอื่น ๆ ที่จะต้องทำงานกับไฟล์ที่ถูกใช้โดย apt-get หรือ apt เมื่อกระบวนการดำเนินการเสร็จสิ้น ไฟล์ล็อคจะถูกลบออก

ข้อสำคัญ: ในกรณีที่การล็อคยังคงออกอยู่ในสองไดเรกทอรีด้านบนโดยไม่มีกระบวนการ apt-get หรือ apt ที่เห็นได้ชัดเจนทำงานอยู่ นี่อาจหมายความว่ากระบวนการถูกระงับด้วยเหตุผลเดียว หรืออื่นๆ ดังนั้นคุณต้องลบไฟล์ที่ล็อคเพื่อล้างข้อผิดพลาด

ขั้นแรกให้รันคำสั่งด้านล่างเพื่อลบไฟล์ล็อคในไดเร็กทอรี /var/lib/dpkg/:

sudo rm /var/lib/dpkg/lock

หลังจากนั้นบังคับให้แพ็คเกจกำหนดค่าใหม่ดังนี้:

sudo dpkg --configure -a

หรือลบไฟล์ล็อคใน /var/lib/apt/lists/ และไดเร็กทอรีแคชดังต่อไปนี้:

sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock

ถัดไป อัพเดตรายการแหล่งที่มาของแพ็คเกจของคุณดังนี้:

sudo apt update
OR
sudo apt-get update

โดยสรุป เราได้อธิบายวิธีการที่สำคัญสองวิธีในการจัดการกับปัญหาทั่วไปที่ผู้ใช้ Ubuntu (และอนุพันธ์) เผชิญ ขณะใช้งาน apt-get หรือ apt ตลอดจน คำสั่งความถนัด

คุณมีวิธีการอื่นที่เชื่อถือได้ในการแบ่งปันเพื่อจัดการกับข้อผิดพลาดทั่วไปนี้หรือไม่? จากนั้นติดต่อเราผ่านแบบฟอร์มข้อเสนอแนะด้านล่าง

นอกจากนี้ คุณอาจต้องการเรียนรู้วิธีค้นหาและหยุดกระบวนการที่กำลังทำงานอยู่ และอ่านคำแนะนำง่ายๆ ในการยุติคำสั่ง kill, pkill และ killall เพื่อยุติกระบวนการใน Linux