Làm thế nào để xác định quá trình khóa một tập tin?


35

Tôi muốn biết chính xác quá trình sử dụng tệp khóa. Tôi không muốn sửa nó, nhưng chỉ để biết hệ thống của tôi đang làm gì. Làm thế nào tôi có thể tìm ra?

Ví dụ: tin nhắn này:

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?

Một lần nữa, tôi chỉ muốn xác định quá trình sử dụng nó, không phải làm thế nào để sửa nó.

Câu trả lời:


38

Có tiếng khét tiếng lsof:

sudo lsof /var/lib/dpkg/lock
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
aptitude 4974 root    3uW  REG   8,23        0 815673 /var/lib/dpkg/lock

Trong trường hợp này, aptitude đang sử dụng tập tin. Bạn nên sử dụng root trong trường hợp bạn không chắc chắn người dùng nào đang khóa tệp. Nó cũng hữu ích cho rất nhiều thứ, thật đáng buồn là nó không được cài đặt với Ubuntu, vì vậy bạn phải cài đặt nó trước.

Đối với phần còn lại của người phàm, có fuserlệnh. Điều này là đặc biệt vì nó chỉ trả về PID thay vì tên của quá trình:

➜  ~  sudo fuser /var/lib/dpkg/lock
/var/lib/dpkg/lock:   4974

Ở đây nó nói rằng tệp và PID, là 4974, vì vậy chúng tôi phải điều tra xem ai là:

➜  ~  ps 4974
  PID TTY      STAT   TIME COMMAND
 4974 pts/1    Sl+    0:06 aptitude

6
Tại sao lại lsofkhét tiếng? Có một số vấn đề với nó?
Ruslan

3
@Ruslan Vâng, nó cho phép người dùng không biết gì về cách sử dụng thực tế của các hệ thống trái với những gì hệ thống quản trị viên muốn ...
Braiam

@Braiam Quá nhiều thông tin có thể là một điều nguy hiểm, trong tay phải? ^ -_- ^
Peter David Carter

Tùy chọn thứ hai trong một dòng:ps $(sudo fuser /var/lib/dpkg/lock)
wjandrea

8

lslocks là một cách đơn giản để làm điều đó.

lslocks |grep /var/lib/dpkg/lock

Để sử dụng shell để xử lý id quá trình:

for pid in `lslocks -rn | grep /var/lib/dpkg/lock|awk '{print $2}'`;
do 
    echo $pid; 
done

Vâng. lslockslà cách tốt nhất để đi về nó Việc sử dụng lsofđã cho tôi lỗi này: "lsof: CẢNH BÁO: không thể stat () fuse.gvfsd-fuse hệ thống tệp / run / user / 1000 / gvfs Thông tin đầu ra có thể không đầy đủ"
Nav

@Nav đó không phải là lỗi, mà là CẢNH BÁO.
Braiam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.