Computer >> Máy Tính >  >> Xử lý sự cố >> Linux

Khắc phục:Không thể mở tệp khóa / var / lib / dpkg / lock

Việc nhận được thông báo lỗi không thể mở tệp lock / var / lib / dpkg / lock có thể gây nhầm lẫn vì nó rất có thể hỏi bạn có root ngay sau đó không ngay cả khi bạn đang chạy lệnh cập nhật với tiền tố sudo. Lệnh lỗi này sẽ hiển thị trên hầu hết mọi thứ sử dụng trình quản lý gói apt-get. Cho dù bạn đang cập nhật máy tính để bàn hoặc máy tính xách tay chạy một trong các phiên bản khác nhau của Ubuntu hoặc Raspberry Pi với vòng quay Raspbian Debian, thì bạn có thể thấy rằng đó có thể là sự cố trên bất kỳ nền tảng nào trong số này.

Tuy nhiên, cách khắc phục khá đơn giản. Bạn thường có thể bỏ qua bất kỳ điều gì hỏi bạn có root hay không và đi thẳng vào trọng tâm của vấn đề, liên quan đến hai quá trình cố gắng truy cập vào một tệp bị khóa cùng một lúc.

Phương pháp 1:Đảm bảo sudo có thể truy cập mọi phần của lệnh

Nếu bạn đang chạy sudo apt-get update &&apt-get upgrade, thì bạn có thể gặp lỗi này vì quy trình thứ hai không có quyền truy cập vào tệp / var / lib / dpkg / lock.

Khắc phục:Không thể mở tệp khóa / var / lib / dpkg / lock

Thay vào đó, hãy thử chạy sudo apt-get update &&sudo apt-get upgrade để xem liệu điều đó có tạo ra sự khác biệt nào không. Nếu đúng như vậy, thì sự cố của bạn đã được khắc phục và đó chỉ là do bạn không cấp đủ quyền cho quy trình thứ hai để truy cập tệp. Hãy nhớ rằng lệnh này sẽ cập nhật và sau đó nâng cấp tất cả các gói của bạn, vì vậy nó có thể nhắc bạn phê duyệt và có thể mất một lúc để chạy.

Tuy nhiên, nếu không, sự cố đã được xử lý hoàn toàn và bạn không cần phải làm gì khác.

Phương pháp 2:Xóa tệp / var / lib / dpkg / lock

Những người đang sử dụng curl, wget hoặc một lệnh khác tải xuống tệp một cách riêng lẻ cũng có thể phải mở đầu lệnh đó bằng sudo nếu họ đang làm việc từ Raspbian vì điều này thay cho apt-get trong một số trường hợp. Những người làm việc với Debian thuần túy, Xubuntu, Lubuntu, Linux Mint và các loại máy tính để bàn / máy tính xách tay tương tự khác sẽ không phải lo lắng về điều này, nhưng có thể đáng để thử một lần nữa.

Nếu cách này vẫn không hiệu quả, thì bạn có thể phải kiểm tra xem bạn không có chương trình nào khác đang cố gắng truy cập tệp khi bạn đang chạy bản cập nhật của mình. Thử sử dụng sudo lsof / var / lib / dpkg / lock để xem liệu có bất kỳ quy trình nào khác đang chạy có mở nó hay không. Nếu bạn đã mở nó ở đâu đó, thì bạn chỉ cần đóng ứng dụng lại.

Hãy nhớ rằng việc có quyền đọc và ghi đối với ứng dụng để mở tệp này có nghĩa là theo tiện ích mở rộng cho biết chương trình phải có đặc quyền root, vì vậy bạn sẽ cần có đặc quyền root để đóng chương trình. Bạn thậm chí có thể thử xem qua ứng dụng Trình quản lý tác vụ nếu bạn đang sử dụng môi trường màn hình đồ họa hỗ trợ tính năng này. Chỉ cần nhấp chuột phải vào quy trình vi phạm và đóng nếu bạn có quyền làm như vậy. Hãy thử các lệnh kill hoặc killall từ dòng lệnh.

Bây giờ, bạn có thể thử chạy lại các lệnh apt-get của mình và xem điều đó có tạo ra sự khác biệt nào không, nhưng bạn sẽ không phải làm bất cứ điều gì khác nếu có. Nếu bạn vẫn gặp sự cố, hãy thử xóa hoàn toàn các tệp khóa. Mặc dù điều này nên được xem là phương sách cuối cùng, nhưng nó thường không gây ra bất kỳ vấn đề nào liên quan đến chương trình apt-get. Bạn vẫn muốn sử dụng hết các phương pháp khác trước khi thực hiện việc này vì nó có thể gây rối với hệ thống apt.

Khởi động lại đôi khi có ích, nhưng nếu bạn đang sử dụng máy chủ hoặc thiết bị Raspbian liên tục thì đây có thể không phải là một lựa chọn khả thi. Thử chạy sudo rm / var / lib / dpkg / lock &&sudo rm / var / lib / apt /ists / lock , điều này sẽ giải phóng các tệp cụ thể mà apt đang xem khi bạn chạy nó. Đảm bảo cẩn thận về tên của các tệp đó, vì chạy rm dưới dạng thư mục gốc là hành vi phá hoại.

Giả sử rằng bạn đã làm như vậy sau khi chỉ sử dụng hết các tùy chọn khác, thì bạn có thể thử chạy lại các lệnh cập nhật của mình và xem điều gì sẽ xảy ra. Bạn sẽ không gặp bất kỳ sự cố nào nữa vì các tệp sẽ không còn tồn tại vào thời điểm đó, mặc dù các quy trình apt-get sẽ có thể tạo lại chúng trong khi chúng chạy.