Câu hỏi Không thể khóa thư mục quản trị (/ var / lib / dpkg /) là một quá trình khác bằng cách sử dụng nó?


Tôi gặp lỗi này khi cố gắng sử dụng apt-get:

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?  

Làm thế nào tôi có thể sửa lỗi này?


838
2017-11-30 02:12


gốc


Điều này cũng đúng nếu bạn khởi động lại? Có lẽ một số thread apt cũ là khóa tập tin, bạn cần phải tìm ra và giết nó hoặc chỉ cần khởi động lại sẽ làm điều đó. - Bruno Pereira
Thủ tục này hầu như luôn luôn khắc phục vấn đề này, và khi nó không, đầu ra của nó (văn bản từ Terminal) đôi khi hữu ích. Nếu bạn quyết định làm điều đó, bạn có thể thêm văn bản này vào câu hỏi của bạn. - Eliah Kagan
Tôi sẽ đề nghị một điều nữa mà bạn có thể lưu ý khi đối mặt với vấn đề này. Hãy kiểm tra xem ổ đĩa của bạn có được gắn kết hay không. Nếu không, bạn có thể không có được khóa vì trình cài đặt gói sẽ không thể truy cập hệ thống tệp. Hi vọng điêu nay co ich. :) - Hari
Bạn có thể dùng sudo lsof /var/lib/dpkg/lock để tìm quá trình sở hữu tệp khóa (nếu trống, hãy giả sử khóa còn lại từ lần khởi động trước đó và có thể là sudo rmd), sau đó xem xét thực hiện sudo kill -9 <PID> (lấy <PID> từ lsof đầu ra. - waltinator
Đây có thể là dấu hiệu cho thấy có thứ gì đó khác đang cài đặt hoặc gỡ bỏ phần mềm và đã khóa cơ sở dữ liệu apt trong khi nó thực hiện các hành động. - Foreever


Các câu trả lời:


Điều này nên được sử dụng như phương sách cuối cùng. Nếu bạn sử dụng điều này bất cẩn, bạn có thể kết thúc với một hệ thống bị hỏng. Hãy thử khác  câu trả lời  Đầu tiên trước khi làm điều này.

Bạn có thể xóa tệp khóa bằng lệnh sau:

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

Bạn cũng có thể cần xóa tệp khóa trong thư mục bộ nhớ cache

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

Sau đó, thử mở lại Synaptic.


719
2018-02-07 02:22



ok ... nhưng tại sao lại xảy ra chuyện này? - Jaime Hablutzel
@jaime: có thể apt-get (hoặc một số giao diện GUI cho nó) đã bị tạm dừng trong khi thực hiện, để lại apt trong trạng thái bị khóa. - bouke
Tôi sẽ chấp nhận điều này như là câu trả lời tốt nhất. đúng. - Anwar
@AnwarShah không, có những cân nhắc khác trước khi đi xung quanh loại bỏ các tập tin của hệ thống. - Braiam
rm / var / lib / dpkg / lock; dpkg --configure -a: - WitchCraft


Tôi thấy khá nhiều câu trả lời khuyên bạn nên xóa khóa. Tôi không khuyên bạn nên làm điều đó như một biện pháp đầu tiên; có lẽ nếu không có thay thế. Khóa được đặt khi quá trình apt đang chạy và được loại bỏ khi quá trình hoàn tất. Nếu có một khóa không có quá trình rõ ràng đang chạy, điều này có thể có nghĩa là quá trình bị kẹt vì một lý do nào đó.

Nếu bạn thử

ps aux | grep apt

sẽ bắt các quy trình chứa từ apt, ít nhất. Nếu bạn thấy apt-get quá trình hoặc một aptitude quá trình bị kẹt, bạn có thể thử

kill processnumber

và nếu nó không hoạt động

kill -9 processnumber

Điều này sẽ giết quá trình và có thể loại bỏ khóa. Giết một apt hoặc là aptitude quá trình là vô hại trừ khi nó đang thực sự ở giữa cài đặt gói. Trong mọi trường hợp, nếu quá trình này bị kẹt, có thể bạn không có lựa chọn nào khác ngoài việc giết nó.

Giết một dpkg quy trình trực tiếp, nếu có, không phải là một ý tưởng hay, bởi vì nếu dpkg đang hoạt động, nó có lẽ là thao tác cơ sở dữ liệu gói và giết nó có thể rời khỏi cơ sở dữ liệu gói trong trạng thái không nhất quán; tức là bị hỏng.

Giết một apt-get hoặc là aptitude quá trình nói chung an toàn hơn nhiều.


550
2017-07-03 09:01



@ Link Tôi không nghĩ giết người dpkg là một ý tưởng hay, bởi vì thường là dpkg điều khiển trực tiếp cơ sở dữ liệu gói và điều này có thể gây ra tham nhũng. - Faheem Mitha
Nếu giết dpkg có thể làm hỏng cơ sở dữ liệu của nó, dpkg được thiết kế tồi. Giai đoạn. - Jay Sullivan
đối với tôi, điều này dẫn đến lỗi dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem. khi chạy sudo apt-get dist-upgrade lần nữa. Chạy lệnh rồi giải quyết vấn đề. Tôi yêu Nix! - Wayne Phipps
Chú thích, killall apt-get làm điều tương tự như của bạn ps/kill kết hợp. - Cerin
Lưu ý rằng tôi thấy rằng tôi cần chạy sudo dkpg --configure -a sau khi giết quá trình apt rogue để mọi thứ trở lại bình thường. - starbeamrainbowlabs


Xóa của bạn /var/lib/dpkg/lock tập tin và buộc cấu hình lại.

sudo rm /var/lib/dpkg/lock
sudo dpkg --configure -a

Nó sẽ làm việc sau này.


175
2018-01-29 11:27



các lệnh này đã giúp, nhưng bây giờ khi tôi thử cài đặt lại, nhận được trả lời này: Không thể lấy khóa / var / cache / apt / archives / lock - mở. Tôi nghĩ rằng tôi sẽ phải làm như vấn đề mở khóa trước đó, nhưng xin vui lòng cho tôi biết các từ khóa chính xác cho lệnh. Tôi là người mới bắt đầu tuyệt đối. - kern
sudo - thực thi lệnh dưới dạng root, rm - xóa tệp. Có thể thử sudo rm /var/cache/apt/archives/lock - kubahaha
Đây không phải là một gợi ý tốt: loại bỏ một cách mù quáng may mắn có thể làm hỏng trạng thái của dpkg. - poolie
Tại sao nó không sửa chữa nó ngày nay? - Marian Klühspies
Điều này làm việc cho tôi. Những aws ở trên không. - 1rq3fea324wre


Bạn sẽ nhận được thông báo này nếu bạn quên sử dụng sudo khi thực hiện lệnh apt.

Nếu không, đây là dấu hiệu cho thấy có thứ gì đó khác đang cài đặt hoặc gỡ bỏ phần mềm và đã khóa cơ sở dữ liệu apt trong khi nó thực hiện các hành động. Các chương trình có thể thực hiện điều này là:

  • Trung tâm phần mềm
  • Trình quản lý cập nhật
  • Trình cài đặt liên kết apt (Tôi nghĩ rằng điều này bây giờ đi qua SC)
  • Các tiện ích dòng lệnh apt-get hoặc aptitude.
  • Trình quản lý gói Synaptic

QUAN TRỌNG: chỉ thử dưới đây như một phương sách cuối cùng vì nó có thể làm hỏng hệ thống của bạn. Đầu tiên hãy thử giết bất kỳ phiên bản đang chạy nào của apt hoặc là aptitude như được mô tả trong Câu trả lời của Faheem.

Bạn có thể buộc khóa bằng cách xóa tệp nhưng nó không được khuyến khích mà không cần đóng chương trình giữ khóa an toàn trước tiên, vì bạn có thể gây hỏng hoặc làm gián đoạn quá trình cài đặt (xấu). Lệnh do João cung cấp phải đóng chương trình giữ khóa và sau đó tháo khóa nhưng sẽ không bảo vệ bạn khỏi gián đoạn cài đặt:

sudo fuser -cuk /var/lib/dpkg/lock; sudo rm -f /var/lib/dpkg/lock   

Và cùng một lệnh có thể được sử dụng cho khóa apt cache:

sudo fuser -cuk /var/cache/apt/archives/lock; sudo rm -f /var/cache/apt/archives/lock

97
2017-11-30 02:17



Tôi đã cập nhật phần mềm của mình khi tôi nhận được thông báo lỗi. - raindrop
Điều này bị rơi cho tôi- - umpirsky
sudo fuser -cuk /var/cache/apt/archives/lock trực tiếp khởi động lại máy tính của tôi. apt-get hiện đã được mở khóa. - Maxime R.
Điều này đã làm hỏng toàn bộ máy chủ của tôi. - 에이바
Giết chết apt hoặc dpkg một nửa thông qua không phải là một ý tưởng tuyệt vời. - poolie


Cách có khả năng nhất để đạt được điều này là:

  • khởi động Ubuntu
  • bắt đầu một thiết bị đầu cuối
  • kiểu sudo apt-get install whatever

và dòng lệnh apt chồng chéo với update-manager tự động bỏ phiếu.

Vì vậy, nếu bạn thử lại sau vài phút để khắc phục.


67
2017-11-30 03:08



Gợi ý tuyệt vời trái ngược với nửa tá trả lời cho thấy chỉ cần loại bỏ các tập tin ;-) Tôi ngẫu nhiên chạy trong vấn đề này và rất có thể đây là nó! - Alex
Đủ an toàn, phải đợi một chút trước sudo apt-get install có thể làm việc. - sargas
Vâng Điều này không phải lúc nào cũng hoạt động, vâng tôi đã sử dụng khởi động lại nhiều lần. Nếu nó không thích hợp hãy thử điều này askubuntu.com/a/315791/378845 trước khi bạn tháo khóa - Menuka Ishan
@menuka, tại sao không chỉ để cho nó kết thúc. - poolie
@poolie Bởi vì có những hạn chế khác đang ngăn chặn quá trình hoàn thiện - Menuka Ishan


Chỉ một chương trình có thể giữ khóa. Đảm bảo rằng bạn không chạy aptitude, synaptic hoặc adept. Đóng chương trình và chạy lại nó sẽ hoạt động. Bạn có thể mở synaptic hoặc mở một cửa sổ dòng lệnh khác đang chạy apt-get, hoặc chạy trình quản lý cập nhật. Kiểm tra nó và xem liệu có bất kỳ chương trình nào đang chạy hay không, nếu có họ đang chạy gần nó và thử lại.

Hãy thử lệnh này trong terminal để tìm những gì đang chạy

ps -e | grep -e apt -e adept | grep -v grep

Chú thích:
Nếu điều đó không in được gì, hãy nhập thông tin sau vào thiết bị đầu cuối để xóa khóa

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

Bây giờ bạn có thể cài đặt bất kỳ Gói nào.


48
2017-11-30 04:55



Xóa tệp khóa là, những gì tôi sẽ xem xét, một điều nguy hiểm để làm. Nếu quá trình khác bị khóa vì lý do hợp lệ - và bạn xóa tệp khóa đó và buộc cài đặt với những gì bạn đã làm trước đó - bạn có thể nghiêm túc, theo cách tiêu cực, ảnh hưởng đến hệ thống của bạn. - Marco Ceppi♦
Đó là lý do tại sao tôi đã cho rằng trong Note.If tất cả các bên trên thất bại cách duy nhất là để loại bỏ các khóa. Nó sẽ không gây ra bất kỳ vấn đề miễn là dpkg và apt-get / aptitude quy trình không chạy - karthick87
pgrep -f 'apt|adept|dpkg' ngắn hơn rất nhiều. - Barry
Cám ơn! những công việc này. pgrep -f 'apt | adept | dpkg' và sau đó sudo kỹ năng (số), giết tất cả các số và sau đó cài đặt các công trình! - creator


Cho đến nay, cách tốt nhất để làm cho nó hoạt động mà không phá vỡ một nền tảng có thể đang chạy cài đặt (vì nó có thể xảy ra bằng cách loại bỏ tệp khóa), đang dừng dịch vụ bằng cách sử dụng apt:

Lỗi:

# sudo apt-get upgrade
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?`

Dung dịch:

sudo systemctl stop apt-daily.timer

Sau khi nâng cấp hệ thống, tôi đề nghị kích hoạt lại nó, vì lỗi khóa nó có thể được sửa với nâng cấp.

sudo systemctl start apt-daily.timer 

Tôi chưa xác minh lỗi này được khắc phục sau khi nâng cấp. Tôi sẽ thêm nhận xét mới khi tôi đã xác minh


35
2018-02-02 10:01



Sau khi nâng cấp hệ thống và bắt đầu lại dịch vụ apt-daily.timer, tôi sẽ không gặp vấn đề này. - Jairelee
Điều này giải quyết được vấn đề của tôi, cảm ơn bạn. - inkredibl
Đây có lẽ là phương pháp sạch nhất so với tất cả những câu hỏi bình chọn cao hơn ở trên. Nó làm việc trong trường hợp của tôi hoàn hảo, cảm ơn bạn! - CygnusX1
Điều này làm việc hoàn hảo trên 17.10 cũng - Elder Geek
Làm việc tốt trong năm 18.04. :) - Naveen Kumar V


Trước hết chúng ta nên kiểm tra xem quá trình nào đã tạo tệp khóa bằng lsof:

sudo lsof /var/lib/dpkg/lock

hoặc trong một tình huống khác /var/lib/apt/lists/lock có vấn đề:

sudo lsof /var/lib/apt/lists/lock

Đầu ra sẽ gần giống như sau:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
apt-get   12127 root   4uW  REG  252,1        0    86   /var/lib/apt/lists/lock

Sau đó, chúng ta nên kiểm tra những gì các dấu phẩy đang làm, chúng ta có thể tìm thấy nó bằng cách sử dụng ps, pgrep v.v. lệnh là apt-get vì vậy tôi chạy:

pgrep apt-get -a

Các -a chuyển danh sách lệnh đầy đủ cho tôi, trong trường hợp của tôi là:

 pgrep -a apt-get
 12127 apt-get update

chúng ta có thể thấy rằng nó đang chạy update tiểu ban, tôi có thể chạy một cái gì đó như thế này:

ps -f 12127

sản xuất:

UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root     12127 12126  0 09:39 pts/0    S+     0:00 apt-get update

Trong trường hợp này tôi sẽ chờ một vài phút để tài nguyên được giải phóng và nếu sau 2 hoặc 3 phút vấn đề vẫn tồn tại hoặc lệnh là thứ mà tôi không quan tâm hoặc không gây hại cho hệ thống (như thế này apt-get update) Tôi gửi một SIGTERM cho quá trình:

sudo kill -15 12127

Nó nên làm công việc, Nếu nó không phải tôi sẽ gửi SIGINT thời gian này (Nó giống như cách nhấn CTRL+C):

sudo kill -2 12127

Nếu nó không hoạt động, chúng ta nên gửi SIGHUP (kill -1), và cuối cùng nếu không có gì hoạt động tôi chỉ đơn giản là giết quá trình:

sudo kill -9 12127

hoặc là

sudo pkill -9 apt-get

Sau đó, tôi xóa tài nguyên bận rộn:

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

25
2018-04-24 07:29



Một điều nhỏ là /var/lib/dpkg/lock thay vì /var/lib/apt/lists/lock là tệp trong câu hỏi. - Chai T. Rex
@ ChaiT.Rex cảm ơn, đã cập nhật;) - Ravexina
Cảm ơn các vị thần gốc mà ai đó cuối cùng cũng đề cập pgrep và pkill. - Barry
Đây sẽ là câu trả lời được chấp nhận. - Marwan Nabil


Điều này sẽ xảy ra nếu bạn có 'Trình quản lý cập nhật' chạy song song cho bất kỳ kiểm tra cập nhật hoặc cài đặt nào khi quá trình cài đặt đặt Khóa. Nếu bạn đang gặp phải lỗi tương tự mà không có 'Trình quản lý cập nhật' đang chạy, bạn phải xóa nó khỏi /var/lib/dgkg/lock, chắc chắn bạn không thể làm điều đó theo cách thủ công

sudo fuser -cuk /var/lib/dpkg/lock
sudo rm -f /var/lib/dpkg/lock

hoạt động tốt. Được lấy từ: https://askubuntu.com/a/15469/68707


18
2018-06-06 07:17



Đây là vấn đề trong trường hợp của tôi! - LondonRob
Giải pháp tốt hơn vì lệnh fuser được sử dụng để theo dõi quá trình khác (nếu vẫn còn sống) - Lars Nordin


Lỗi này có thể được gây ra bởi Trình quản lý cập nhật cố gắng tự động làm mới danh sách các gói trong nền, thường ngay sau khi bạn đăng nhập, do đó khóa thư mục.

Trong trường hợp này chỉ cần chờ vài giây (hoặc nhiều hơn, nếu bản cập nhật cuối cùng của bạn đã lâu) để nó hoàn thành hoặc khởi chạy Trình quản lý cập nhật để kiểm tra trạng thái.


16
2017-10-04 12:39



Tôi đã có quyền này sau khi cài đặt Ubuntu 16.04. Hóa ra rằng có một tiến trình nền trong Trung tâm phần mềm Ubuntu đang chờ tôi cài đặt một số bản cập nhật theo cách thủ công. - jvriesem
Ditto sau khi cài đặt mới của 16.04. Nó quá dài hơn "một vài giây" trong trường hợp của tôi (tôi đã có thời gian để đọc toàn bộ trang Hỏi đáp này!) Nhưng sau khi làm mới ps một vài lần tôi có thể thấy dpkg đang cập nhật toàn bộ tải nội dung và tôi kiên nhẫn đợi tất cả để hoàn thành. Sau đó tôi chạy Trình cập nhật phần mềm cho đến khi mọi thứ đã được cập nhật trước khi thử cài đặt bất kỳ thứ gì mới. - Charlie Joynt