Controllo dei file aperti con Lsof e Fuser
Lsof è un ottimo programma che ci consente di vedere quali sono i file aperti da un determinato processo.
Ha parecchie opzioni interessanti.
Se vogliamo vedere i file aperti da uno specifico programma:
$ lsof -c firefox
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox 24660 matte cwd DIR 8,2 4096 45350914 /home/matte
firefox 24660 matte rtd DIR 8,2 4096 2 /
firefox 24660 matte txt REG 8,2 82352 40507802 /usr/lib/firefox-4.0/firefox
firefox 24660 matte mem REG 8,2 15552 40633085 /usr/lib/libcanberra-0.28/libcanberra-alsa.so
firefox 24660 matte mem REG 8,2 36576 39342914 /usr/lib/libltdl.so.7.3.0
firefox 24660 matte mem REG 8,2 68912 39350927 /usr/lib/libtdb.so.1.2.9
firefox 24660 matte mem REG 8,2 23080 39349622 /usr/lib/libogg.so.0.7.1
firefox 24660 matte mem REG 8,2 176920 39349634 /usr/lib/libvorbis.so.0.4.5
firefox 24660 matte mem REG 8,2 30160 39349633 /usr/lib/libvorbisfile.so.3.3.4
firefox 24660 matte mem REG 8,2 65736 39338584 /usr/lib/libcanberra.so.0.2.5
firefox 24660 matte mem REG 8,2 192863 39329202 /usr/lib/libaudiofile.so.0.0.2
firefox 24660 matte mem REG 8,2 56838 39329237 /usr/lib/libesd.so.0.2.39
firefox 24660 matte mem REG 8,2 135240 40373785 /usr/lib/mozilla/plugins/npwrapper.libflashplayer.so
firefox 24660 matte mem REG 8,2 135240 40633100 /usr/lib/nspluginwrapper/x86_64/linux/npwrapper.so
firefox 24660 matte mem REG 8,2 62448 52166897 /opt/java/jre/lib/amd64/libnpjp2.so
firefox 24660 matte mem REG 8,2 10832 39349158 /usr/lib/libXss.so.1.0.0
firefox 24660 matte mem REG 8,2 22912 35127433 /lib/libnss_dns-2.13.so
firefox 24660 matte mem REG 8,2 574636 40246503 /usr/share/fonts/TTF/DejaVuSans-BoldOblique.ttf
firefox 24660 matte mem REG 8,2 359272 40239110 /usr/share/fonts/TTF/FreeSansBold.ttf
firefox 24660 matte mem REG 8,2 610412 39356875 /usr/lib/libnssckbi.so
firefox 24660 matte mem REG 8,2 412559 39356877 /usr/lib/libfreebl3.so
firefox 24660 matte mem REG 8,2 191643 39356876 /usr/lib/libnssdbm3.so
firefox 24660 matte mem REG 8,2 297290 39356873 /usr/lib/libsoftokn3.so..........
L'opzione -c serve proprio a indicare che vogliamo i file aperti da un specifico programma; nel mio caso Firefox.
Con
$ lsof /dev/cdrom
identifichiamo i file aperti dal masterizzatore (nel mio caso niente).
Se invece vogliamo vedere i file usati da un determinato utente:
$ lsof -u matte | more
Usate more o less perchè i file sono davvero tanti.
Possiamo anche dei controlli sulla rete.
Con
$ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox 24660 matte 32u IPv4 49127 0t0 TCP 192.168.1.103:46840->74.125.232.118:https (ESTABLISHED)
firefox 24660 matte 40u IPv4 49129 0t0 TCP 192.168.1.103:37019->r2.ycpi.vip.dee.yahoo.net:http (ESTABLISHED)
firefox 24660 matte 44u IPv4 49128 0t0 TCP 192.168.1.103:53178->ip-9-144.sn2.eutelia.it:http (ESTABLISHED)
controlliamo tutte le connessioni aperte.
Volendo possiamo aggiungere TCP o UDP per specificare il protocollo.
Possiamo fare un mix con -i per specificare un utente:
$ lsof -u matte -a -i
Gli ultimi due esempi riguardano il controllo di una porta specifica e di un pid specifico:
$ lsof -i TCP:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 25180 matte 3r IPv4 50787 0t0 TCP 192.168.1.103:51138->62.94.208.157:ssh (ESTABLISHED)
Sono connesso a un altro pc con ssh.
$ lsof -p 25180
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 25180 matte cwd DIR 8,2 4096 45350914 /home/matte
ssh 25180 matte rtd DIR 8,2 4096 2 /
ssh 25180 matte txt REG 8,2 412328 39344122 /usr/bin/ssh
ssh 25180 matte mem REG 8,2 47600 35127330 /lib/libnss_files-2.13.so
ssh 25180 matte mem REG 8,2 35088 35131186 /lib/libcrypt-2.13.so
ssh 25180 matte mem REG 8,2 82832 39345660 /usr/lib/libroken.so.18.1.0
ssh 25180 matte mem REG 8,2 11872 35127599 /lib/libcom_err.so.2.1
ssh 25180 matte mem REG 8,2 630672 39345670 /usr/lib/libasn1.so.8.0.0
ssh 25180 matte mem REG 8,2 163144 39345669 /usr/lib/libwind.so.0.0.0
ssh 25180 matte mem REG 8,2 638208 39345344 /usr/lib/libsqlite3.so.0.8.6
ssh 25180 matte mem REG 8,2 298024 39345643 /usr/lib/libhx509.so.5.0.0
ssh 25180 matte mem REG 8,2 510176 39345617 /usr/lib/libkrb5.so.26.0.0
ssh 25180 matte mem REG 8,2 19552 39345671 /usr/lib/libheimntlm.so.0.1.0
ssh 25180 matte mem REG 8,2 1420688 35127312 /lib/libc-2.13.so
ssh 25180 matte mem REG 8,2 135917 35127310 /lib/libpthread-2.13.so
ssh 25180 matte mem REG 8,2 214848 39345636 /usr/lib/libgssapi.so.2.0.0
ssh 25180 matte mem REG 8,2 84800 35127328 /lib/libresolv-2.13.so
ssh 25180 matte mem REG 8,2 97688 39327669 /usr/lib/libz.so.1.2.5
ssh 25180 matte mem REG 8,2 14688 35127299 /lib/libdl-2.13.so
ssh 25180 matte mem REG 8,2 2057400 39335591 /usr/lib/libcrypto.so.1.0.0
ssh 25180 matte mem REG 8,2 144927 35127324 /lib/ld-2.13.so
ssh 25180 matte 0u CHR 136,2 0t0 5 /dev/pts/2
ssh 25180 matte 1u CHR 136,2 0t0 5 /dev/pts/2
ssh 25180 matte 2u CHR 136,2 0t0 5 /dev/pts/2
ssh 25180 matte 3r IPv4 50787 0t0 TCP 192.168.1.103:51138->62.94.208.157:ssh (ESTABLISHED)
ssh 25180 matte 4u CHR 136,2 0t0 5 /dev/pts/2
ssh 25180 matte 5u CHR 136,2 0t0 5 /dev/pts/2
ssh 25180 matte 6u CHR 136,2 0t0 5 /dev/pts/2
Ho usato il pid dell'esempio precedente.
Aggiungo un altro programma interessante: Fuser.
Questo programma visualizza i PID dei processi che stanno utilizzando i files.
Eccovi alcune esempi.
$ fuser /home/matte
/home/matte: 1401c 1452c 1453c 1455c 1462c 1513c 1523c 1525c 1544c 1560c 1566c 1569c1577c 1580c 1598c 1611c 1615c 1616c 1618c 1649c 1651c 1655c 1657c 1660c 1671c 25636c 25784c 25805c 26574c 26577c 26603c
Questo comando elenca i PID dei processi che stanno accedendo a una cartella (in questo la mia home).
Volendo possiamo usare -v per vedere i nomi:
$ fuser -v /home/matte
UTENTE PID ACCESSO COMANDO
/home/matte: matte 1401 ..c.. startkde
matte 1452 ..c.. kdeinit4
matte 1453 ..c.. klauncher
matte 1455 ..c.. kded4
matte 1462 ..c.. kglobalaccel
matte 1513 ..c.. knotify4
matte 1523 ..c.. kwrapper4
matte 1525 ..c.. ksmserver
matte 1544 ..c.. kwin
matte 1560 ..c.. kactivitymanage
matte 1566 ..c.. plasma-desktop
matte 1569 ..c.. ksysguardd
matte 1577 ..c.. akonadi_control
matte 1580 ..c.. akonadiserver
matte 1598 ..c.. kaccess
matte 1611 ..c.. krunner
matte 1615 ..c.. polkit-kde-auth
matte 1616 ..c.. python2
matte 1618 ..c.. kmix
matte 1649 ..c.. akonadi_contact
matte 1651 ..c.. akonadi_ical_re
matte 1655 ..c.. akonadi_maildir
matte 1657 ..c.. akonadi_maildis
matte 1660 ..c.. akonadi_nepomuk
matte 1671 ..c.. nepomukserver
matte 25636 ..c.. firefox
matte 25784 ..c.. plugin-containe
matte 25805 ..c.. npviewer.bin
matte 26574 ..c.. konsole
matte 26577 ..c.. bash
L'opzione -u aggiunge il nome utente.
Possiamo usarlo anche per la rete:
$ fuser -n tcp 22
Ed infine anche per uccidere i processi:
$ fuser -km /home/matte
per uccidere tutti i processi che usano una directory.
$ fuser -k nomefile
per uccidere i processi che bloccano un file.
linux lsof tcp udp ssh fuser
Commentami!