Tìm hiểu quá trình đang viết vào một thư mục cụ thể


19

Tôi có một thư mục / some / dir và tôi thấy rằng các tệp mới xuất hiện ở đó mọi lúc. Làm cách nào để biết quy trình nào đang tạo các tệp đó?

Câu trả lời:


18

Hãy thử lsof +r2 | grep '/some/dir'. Điều này sẽ hiển thị các quá trình truy cập / some / dir và làm mới cứ sau 2 giây.


2
Thaks, cái này khá gần với những gì tôi cần, vì nó tạo ra toàn bộ danh sách các tệp đang mở trước, sau đó lọc theo / some / dir. Tuy nhiên, nếu các quy trình tạo các tệp rất nhanh và không giữ chúng mở, tôi hiểu rằng ở trên có thể bỏ lỡ một số thậm chí. Tôi nghĩ trong trường hợp đó, lựa chọn duy nhất là hệ thống con kiểm toán, phải không?
homer5439

Giả định của bạn là đúng. Ý tưởng khác là sử dụng inotifywait, xem linux.die.net/man/1/inotifywait
weeheavy

cảm ơn, tôi đã xem xét các công cụ inotify trước đây, tuy nhiên tôi thấy rằng chúng hoạt động hoàn toàn ở cấp hệ thống tập tin và dường như không thể cung cấp thông tin về ai đã làm gì.
homer5439

18

Sử dụng audithệ thống con kernel

auditctl -w /some/dir/ -p war -k whatsgoingon

Điều đó thiết lập một cái móc chờ đợi một cái gì đó xảy ra dưới / some / dir /.

Sau đó hãy chắc chắn rằng bạn có auditddaemon đang chạy. Sau đó, chỉ cần đợi cho đến khi các tệp xuất hiện và xem từ /var/log/auditd.loghoặc bất cứ nơi nào trong hệ thống của bạn viết và đọc những gì đã xảy ra và theo quy trình nào.


Cảm ơn, điều này có vẻ như chính xác, mặc dù nó yêu cầu các công cụ kiểm toán được cài đặt mà có lẽ không phải ở đâu cũng được mặc định. Nhưng ok, nếu ai cần thông tin đó, chúng luôn có thể được cài đặt.
homer5439

Lưu ý cho những người nhìn thấy điều này: bạn không thể đặt đồng hồ trên các thư mục cấp cao nhất (bị cấm bởi kernel)
Tony Sepia

1
Đó thực sự là một cách hiệu quả! Cảm ơn rất nhiều!!! BTW, khi bạn hoàn thành, bạn có thể xóa tất cả các móc để tránh ghi nhật ký kiểm toán mãi mãi auditctl -D. Bạn có thể sử dụng auditctl -lđể liệt kê tất cả các móc.
Robert

0

lsof có thể giúp đỡ:

# lsof -r1 /some/dir/*

1
Cảm ơn. Có đúng không khi lệnh trên chỉ cho tôi biết ai đang truy cập các tệp hiện có nhưng không hiển thị bất cứ điều gì cho các tệp mới được tạo? Sự hiểu biết của tôi là / some / dir / * mở rộng ra danh sách các tệp có mặt tại thời điểm lệnh được gọi.
homer5439
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.