Home / Sistemi operativi & mobile / Linux / Controllo dei file aperti con Lsof e Fuser
Mattepuffo

Controllo dei file aperti con Lsof e Fuser

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  1569c 

1577c  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.