it-swarm-vi.com

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

Đường dẫn tệp đã cho, làm thế nào tôi có thể xác định quá trình nào tạo ra nó (và/hoặc đọc/ghi vào nó)?

67
Anton Barkovsky

Lệnh lsof (đã được đề cập trong một số câu trả lời) sẽ cho bạn biết quá trình nào mở tệp tại thời điểm bạn chạy nó . lsof có sẵn cho mọi biến thể unix.

lsof /path/to/file

lsof sẽ không cho bạn biết về tệp đã được mở hai micrô giây trước và đóng một micrô giây trước. Nếu bạn cần xem một tập tin cụ thể và phản ứng khi nó được truy cập, bạn cần các công cụ khác nhau.

Nếu bạn có thể lên kế hoạch trước một chút, bạn có thể đặt tệp vào hệ thống tệp LoggedFS. LoggedFS là một Fuse hệ thống tệp xếp chồng, ghi nhật ký tất cả các truy cập vào các tệp trong một hệ thống phân cấp. Các thông số đăng nhập có cấu hình cao. Cầu chì có sẵn trên tất cả các đơn vị chính . Bạn sẽ muốn đăng nhập truy cập vào thư mục nơi tệp được tạo. Bắt đầu với tệp cấu hình mẫu được cung cấp và Tweak nó theo hướng dẫn này .

loggedfs -l /path/to/log_file -c /path/to/config.xml /path/to/directory
tail -f /path/to/log_file

Nhiều đơn vị cung cấp các cơ sở giám sát khác. Trong Linux, bạn có thể sử dụng tương đối mới hệ thống con kiểm toán . Không có nhiều tài liệu về nó (nhưng nhiều hơn về logfs); bạn có thể bắt đầu với hướng dẫn này hoặc avàiví dụ hoặc chỉ với auditctl trang nam . Ở đây, nó đủ để đảm bảo daemon được khởi động, sau đó chạy auditctl:

auditctl -w /path/to/file

(Tôi nghĩ các hệ thống cũ hơn cần auditctl -a exit,always -w /path/to/file) và xem nhật ký trong /var/log/audit/audit.log.

Chà, bạn có thể chạy lsof nhiều lần và nếu bạn may mắn, thủ phạm sẽ giữ tệp mở đủ lâu để nó hiển thị. I E.:

$ lsof -r1 /path/to/file

hoặc cho nhiều tập tin

$ lsof -r1 /path/to/folder/*

Điều này sẽ liệt kê tất cả quyền truy cập vào đường dẫn đã cho tại một thời điểm nhất định, mỗi giây một lần. Điều này bao gồm liệt kê PID của quá trình truy cập tệp.

Nếu điều đó không hiệu quả, nghĩa là, tệp được mở và đóng rất nhanh, điều này thường xảy ra, tôi tin rằng bạn cần tìm kiếm các công cụ phức tạp hơn. Có lẽ logfs có thể là một cái gì đó?

Hackland
[.__.] Nếu một lần một giây lsof sẽ không hoạt động, tất nhiên bạn có thể hack một vòng lặp while chạy lsof liên tục nhanh nhất có thể. Giống:

$ while true; do lsof /paht/to/file; done;

Không xinh, nhưng ai biết được, có thể sẽ làm được.

11
0scar

Bạn có thể sử dụng lsof cho điều đó:

$ lsof /tmp/file
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
less      4737 wena    4r   REG    8,6    90700 1643536 /tmp/file

Nó nói rằng quá trình có tên less là giữ cho tệp "/ tmp/file" mở.

GHI CHÚ : Thật kỳ lạ, nó không hoạt động nếu tôi sử dụng geany hoặc nano. Đang mong được đề xuất tốt hơn.

1
tshepang

Bạn có thể sử dụng lsgrep để tìm ra các tệp được sử dụng bởi chrome

$ ls -l /proc/*/fd | grep "chrome"
lrwx------ 1 ba abc 64 Jul 16 22:19 104 -> /home/abc/.config/google-chrome/Default/Cookies
lr-x------ 1 abc abc 64 Jul 16 22:19 113 -> /opt/google/chrome/nacl_irt_x86_64.nexe
lrwx------ 1 abc abc 64 Jul 16 22:19 121 -> /home/abc/.cache/google-chrome/Default/Cache/data_0
lrwx------ 1 abc abc 64 Jul 16 22:19 122 -> /home/abc/.cache/google-chrome/Default/Cache/data_1
lrwx------ 1 abc abc 64 Jul 16 22:19 123 -> /home/abc/.cache/google-chrome/Default/Cache/data_2
lr-x------ 1 abc abc 64 Jul 16 22:19 125 -> /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic

Một cách khác là sử dụng lsofgrep

$ lsof | grep "chrome"
chrome     2204       abc  cwd       DIR                8,5     4096 1441794 /home/abc
chrome     2204       abc  rtd       DIR                8,5     4096       2 /
chrome     2204       abc  txt       REG                8,5 87345336 5111885 /opt/google/chrome/chrome
chrome     2204       abc  mem       REG                8,5  4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache/data_3
chrome     2204       abc  mem       REG                8,5  1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache/data_2
chrome     2204       abc  mem       REG                8,5   270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache/data_1
chrome     2204       abc  mem       REG                8,5    45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache/data_0
0
SRINIVAS KATLA
lsof |grep (filename)

Điều này sẽ cho bạn thấy quá trình hiện đang sử dụng tệp.

0
Matthew