it-swarm-eu.dev

Jak zjistit, který proces vytváří soubor?

Jak mohu určit danou cestu k souboru, který proces vytvoří (a/nebo do něj přečte/zapíše)?

67
Anton Barkovsky

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.

11
0scar

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.

1
tshepang

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
0
SRINIVAS KATLA
lsof |grep (filename)

Zobrazí se vám proces, který soubor aktuálně používá.

0
Matthew