Làm cách nào để biết tập tin nào được thực thi khi tôi mở ứng dụng?


12

Tôi muốn biết những gì xảy ra đằng sau màn hình khi tôi mở một số ứng dụng. Ví dụ, khi tôi mở firefox, tôi muốn biết tệp nào được đọc và tệp nào được thực thi. Có cách nào để làm điều này. Ngay cả việc mở firefox từ thiết bị đầu cuối cũng không hiển thị bất kỳ thông tin nào. HĐH: Ubuntu 12.04

Câu trả lời:


21

Sử dụng strace!

Ví dụ: Liệt kê tất cả các tệp được Firefox mở trong một phiên:

strace -f firefox 2>&1 | grep 'open('

Kết quả tương tự như thế này nếu bạn mở phiên bản thứ hai của FireFox: http://pastebin.com/iRqxgiWN (Tùy chọn '-f' chỉ tạo ra các bước tiến trình theo quy trình.)

Ví dụ 2: Liệt kê tất cả các quy trình được thực hiện bởi FireFox:

strace -f firefox 2>&1 | grep -P 'exec[vlpe]*\('

Kết quả trong một cái gì đó như thế này khi truy cập YouTube:

[pid 25020] execve("/usr/lib/firefox/plugin-container", ["/usr/lib/firefox/plugin-containe"..., "/usr/lib/adobe-flashplugin/libfl"..., "-greomni", "/usr/lib/firefox/omni.ja", "-appomni", "/usr/lib/firefox/browser/omni.ja", "-appdir", "/usr/lib/firefox/browser", "15198", "false", "plugin"], [/* 57 vars */]) = 0
[pid 25024] execve("/bin/sh", ["sh", "-c", "ps x | grep netscape"], [/* 57 vars */]) = 0
[pid 25025] execve("/bin/ps", ["ps", "x"], [/* 57 vars */] <unfinished ...>
[pid 25026] execve("/bin/grep", ["grep", "netscape"], [/* 57 vars */]) = 0

Bạn có thể làm điều này với nhiều cuộc gọi hệ thống khác ...

Bằng cách khớp các tham số open()trong greptìm kiếm của bạn, bạn cũng có thể tìm ra chế độ nào tệp được mở:

Chỉ cần thêm | grep -P 'O_RDONLY|O_RDWR'(ký tự ống dẫn là quan trọng!) Để lọc truy cập đọc hoặc | grep -P 'O_WRONLY|O_RDWR'để truy cập ghi vào lệnh của bạn ...

CHỈNH SỬA :

Như đã đề cập trong các bình luận, bạn cũng có thể sử dụng strace -fe open firefoxđể liệt kê tất cả các tệp được mở bởi FireFox. Bạn cũng có thể sử dụng strace -fe trace=file firefoxđể liệt kê tất cả các thao tác tệp được thực hiện bởi FireFox có đường dẫn tệp dưới dạng đối số (mở, stat, lstat, chmod, access, ...).

Nhiều hơn nữa có sẵn! Kiểm tra trang hướng dẫn strace (1) .


1
Tôi khá ngạc nhiên khi firefox sẽ chạy shell để grep "Netscape" từ danh sách tiến trình.
Michael

1
strace có khả năng lọc tích hợp rộng rãi. Cố gắng strace -e openchỉ hiển thị các cuộc gọi đến open(), ví dụ.
John Kugelman

@Michael nó sinh ra một shell bởi vì nó sử dụng một đường ống ("|") là cú pháp shell. Bạn có thể thiết lập cùng một đường ống thủ công từ mã nhưng việc để shell thực hiện nó dễ dàng hơn nhiều - miễn là bạn biết không có cơ hội mã thoát vỏ được truyền từ người dùng, điều này có thể dẫn đến lỗ hổng bảo mật.
Alistair Buxton

1

thực sự có chế độ được đặt tên là chế độ dài dòng nhưng tôi không chắc chắn rằng firefox có tùy chọn như vậy. Một số thường có. Nhưng không có vấn đề gì, mọi ứng dụng sẽ bao gồm log.so của bạn, bạn có thể kiểm tra hoạt động của ứng dụng bằng cách kiểm tra dữ liệu nhật ký của nó.

Nếu bạn muốn kích hoạt nhật ký cho firefox thì bạn có thể kiểm tra điều này

http://bertrandbenoit.blogspot.in/2011/09/activate-logging-for-mozilla.html

mọi hoạt động ứng dụng trong Ubuntu bạn có thể kiểm tra với nhật ký cụ thể của chúng. Tất cả các ứng dụng sẽ đăng nhập vào /var/logthư mục.

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.