Diberikan path file, bagaimana saya bisa menentukan proses mana yang membuatnya (dan/atau membaca/menulis)?
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.
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.
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
lsof |grep (filename)
Ini akan menunjukkan kepada Anda proses yang saat ini menggunakan file.