it-swarm-id.com

Bagaimana cara menentukan proses mana yang membuat file?

Diberikan path file, bagaimana saya bisa menentukan proses mana yang membuatnya (dan/atau membaca/menulis)?

67
Anton Barkovsky

Perintah lsof (sudah disebutkan dalam beberapa jawaban) akan memberi tahu Anda proses apa yang membuka file pada saat Anda menjalankannya. lsof tersedia untuk hampir semua varian unix.

lsof /path/to/file

lsof tidak akan memberi tahu Anda tentang file yang dibuka dua mikrodetik yang lalu dan ditutup satu mikrodetik yang lalu. Jika Anda perlu menonton file tertentu dan bereaksi ketika diakses, Anda memerlukan alat yang berbeda.

Jika Anda dapat merencanakan sedikit sebelumnya, Anda dapat meletakkan file pada sistem file LoggedFS. LoggedFS adalah Fuse sistem file bertumpuk yang mencatat semua akses ke file dalam hierarki. Parameter logging sangat dapat dikonfigurasi. Sekering tersedia di semua unit utama . Anda ingin mencatat akses ke direktori tempat file tersebut dibuat. Mulailah dengan file konfigurasi sampel yang disediakan dan Tweak sesuai dengan panduan ini .

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

Banyak persatuan menawarkan fasilitas pemantauan lainnya. Di Linux, Anda dapat menggunakan subsistem audit yang relatif baru . Tidak banyak literatur tentang itu (tetapi lebih dari tentang logf); Anda dapat mulai dengan tutorial ini atau abeberapacontoh atau hanya dengan auditctl halaman manual . Di sini, itu harus cukup untuk memastikan daemon dimulai, kemudian jalankan auditctl:

auditctl -w /path/to/file

(Saya pikir sistem yang lebih lama membutuhkan auditctl -a exit,always -w /path/to/file) dan perhatikan log-nya /var/log/audit/audit.log.

Yah Anda bisa menjalankan lsof berulang kali, dan jika Anda beruntung pelakunya akan menahan file cukup lama untuk ditampilkan. Yaitu.:

$ lsof -r1 /path/to/file

atau untuk banyak file

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

Ini akan mencantumkan semua akses ke jalur yang diberikan pada titik waktu tertentu, sekali per detik. Ini termasuk daftar PID dari proses mengakses file.

Jika itu tidak berhasil, yaitu, file dibuka dan ditutup dengan sangat cepat, yang sering terjadi, saya percaya Anda perlu mencari alat yang lebih rumit. Mungkin logfs bisa menjadi sesuatu?

Hackland
Jika sekali per detik lsof tidak berfungsi, Anda tentu saja dapat meretas perulangan sementara yang menjalankan lsof berulang kali secepat mungkin. Suka:

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

Tidak cantik, tapi siapa tahu, mungkin hanya melakukannya.

11
0scar

Anda dapat menggunakan lsof untuk itu:

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

Dikatakan proses bernama less adalah menjaga file "/ tmp/file" terbuka.

NOTE : Anehnya, itu tidak berfungsi jika saya menggunakan geany atau nano. Saya menantikan saran yang lebih baik.

1
tshepang

Anda dapat menggunakan ls dan grep untuk mencari tahu file yang digunakan oleh 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

Cara lain adalah dengan menggunakan lsof dan grep

$ 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)

Ini akan menunjukkan kepada Anda proses yang saat ini menggunakan file.

0
Matthew