Jak mohu určit danou cestu k souboru, který proces vytvoří (a/nebo do něj přečte/zapíše)?
Příkaz lsof (již zmiňovaný v několika odpovědích) vám řekne, jaký proces má otevřený soubor v době jeho spuštění . lsof
je k dispozici téměř pro každou unixovou variantu.
lsof /path/to/file
lsof
vám neřekne o souboru, který byl otevřen před dvěma mikrosekundami a uzavřen před jednou mikrosekundou. Pokud potřebujete sledovat konkrétní soubor a reagovat, když je přístupný, potřebujete různé nástroje.
Pokud můžete plánovat trochu dopředu, můžete soubor umístit do LoggedFS souborového systému. LoggedFS je Fuse skládaný souborový systém, který zaznamenává všechny přístupy k souborům v hierarchii. Parametry protokolování jsou vysoce konfigurovatelné. Pojistka je k dispozici na všechny hlavní indexy . Budete chtít protokolovat přístupy do adresáře, kde je soubor vytvořen. Začněte poskytnutým ukázkovým konfiguračním souborem a upravte jej podle tato příručka .
loggedfs -l /path/to/log_file -c /path/to/config.xml /path/to/directory
tail -f /path/to/log_file
Mnoho poboček nabízí další monitorovací zařízení. V systému Linux můžete použít relativně nový subsystém audit . Není o tom mnoho literatury (ale více než o přihlášených); můžete začít s tento tutoriál nebo amálopříklady nebo jen s auditctl
man stránka . Zde by mělo stačit, aby se ujistil, že je démon spuštěn, a potom spusťte auditctl
:
auditctl -w /path/to/file
(Myslím, že starší systémy potřebují auditctl -a exit,always -w /path/to/file
) a sledujte protokoly /var/log/audit/audit.log
.
Dobře byste mohli spustit lsof
opakovaně, a pokud budete mít štěstí, viník bude mít soubor otevřený dostatečně dlouho, aby se mohl zobrazit. Tj.:
$ lsof -r1 /path/to/file
nebo pro mnoho souborů
$ lsof -r1 /path/to/folder/*
Tím se zobrazí seznam všech přístupů k dané cestě v určitém časovém bodě, jednou za sekundu. To zahrnuje výpis PID procesu přístupu k souboru.
Pokud to nefunguje, to znamená, že soubor se otevírá a uzavírá velmi rychle, což je často případ, domnívám se, že musíte hledat komplikovanější nástroje. Možná logfs může být něco?
Hackland
Pokud nebude fungovat za sekundu lsof
, můžete samozřejmě hacknout while-loop, který běží opakovaně co nejrychleji. Jako:
$ while true; do lsof /paht/to/file; done;
Ne hezké, ale kdo ví, mohl by to prostě udělat.
K tomu můžete použít lsof
:
$ lsof /tmp/file
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
less 4737 wena 4r REG 8,6 90700 1643536 /tmp/file
Říká, že proces s názvem less
je udržování otevřeného souboru "/ tmp/file".
POZNÁMKA : Kupodivu to nefunguje, pokud použiji geany
nebo nano
. Těším se na lepší návrhy.
Můžete použít ls
a grep
k nalezení souborů používaných 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
Dalším způsobem je použití lsof
a 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)
Zobrazí se vám proces, který soubor aktuálně používá.