lsof significa "list open files" (en català "llista de fitxers oberts"), s'utilitza en molts sistemes de tipus Unix per obtenir una llista de tots els fitxers oberts i els processos que els han obert. També el podràs utilitzar per llistar connexions de manera similar a netstat o ss.
Aquesta utilitat de codi obert va ser desenvolupada i mantinguda per Victor A. Abell, el director associat jubilat del Centre de Computació de la Universitat de Purdue. A la majoria de les imatges de Linux de Clouding ve instal·lat per defecte. Un equivalent de lsof a Windows seria handle i ListDLLs de les Sysinternals de Mark Russinovich (mitjançant GUI amb Process Explorer).
A continuació, es mostra l'índex amb alguns exemples d'ús i informació rellevant de l'ordre lsof:
Instal·lació de lsof
Per instal·lar lsof, simplement pots utilitzar el gestor de paquets de la teva distribució:
# yum install lsof -y# apt install lsof -yColumnes de sortida
L'estructura de sortida de lsof per defecte és la següent:
| COMMAND | PID | TID | TASKCMD | USER | FD | TYPE | DEVICE | SIZE/OFF | NODE | NAME |
A continuació, una breu explicació de tots els camps:
| Nom | Descripció |
|---|---|
| COMMAND | Conté els primers nou caràcters del nom de l'ordre UNIX associada al procés. |
| PID | És el número d'identificació del procés. |
| TID | És el número d'identificació de la tasca (fil); en blanc indica un procés (és a dir, no una tasca). |
| TASKCMD | És el nom de l'ordre de la tasca. |
| ZONE | És el nom de la zona quan s'ha especificat -z. |
| SECURITY-CONTEXT | És el context de seguretat de SELinux quan s'ha especificat -Z. |
| PPID | És el número d'identificació del procés pare del procés quan s'ha especificat -R. |
| PGID | És el número d'identificació del grup de processos associat al procés quan s'ha especificat -g. |
| USER | És el número d'identificació d'usuari o el nom d'inici de sessió de l'usuari al qual pertany el procés. |
| FD | És el número de descriptor de fitxer o el directori de treball actual (cwd), entre d'altres. Més informació aquí. |
| TYPE | És el tipus de node associat al fitxer. Més informació aquí. |
| FILE-ADDR | Conté l'adreça de l'estructura de fitxers del nucli quan s'ha especificat f a +f. |
| FCT | Conté el recompte de referències a fitxers de l'estructura de fitxers del nucli quan s'ha especificat c a +f. |
| FILE-FLAG | Conté el contingut del membre f_flag[s] de l'estructura de fitxers del nucli, entre d'altres, quan s'ha especificat g o G a +f. Més informació aquí. |
| NODE-ID | Conté un identificador únic per al node del fitxer quan s'ha especificat n a +f. |
| DEVICE | Conté els números dels dispositius, separats per comes, per a un fitxer especial de caràcters, especial de blocs, regular, directori o fitxer NFS. |
| SIZE, SIZE/OFF, or OFFSET | És la mida del fitxer o el desplaçament del fitxer en bytes. Més informació aquí. |
| NLINK | Conté el recompte d'enllaços de fitxers quan s'ha especificat +L. |
| NODE | És el número de node d'un fitxer local o el número d'inode d'un fitxer NFS a l'amfitrió del servidor, entre d'altres. Més informació aquí. |
| NAME | És el nom del punt de muntatge del sistema de fitxers, el nom d'un dispositiu especial de caràcters, les adreces d'Internet d'un fitxer de xarxa o el nom de l'amfitrió local, entre d'altres. Més informació aquí. |
Exemples
Llistar tots els fitxers oberts per processos
Per llistar tots els fitxers oberts, simplement executa lsof:
# lsof | lessEn afegir l'ordre less podràs visualitzar el contingut més còmodament.
Llistar processos per fitxer
Per llistar els processos d'un fitxer obert específic, introdueix la ruta i el fitxer com a argument:
# lsof /ruta/archivoSubstitueix "/ruta/archivo" pel fitxer obert desitjat.
Llistar fitxers oberts per usuari
Amb l'ordre següent, podràs llistar els fitxers que té oberts un usuari en particular:
# lsof -u usuarioSubstitueix "usuario" per l'usuari del sistema desitjat.
Llistar fitxers oberts per procés
Per llistar els fitxers oberts per un procés, pots utilitzar-ne el nom de la manera següent:
# lsof -c nombre_procesoRecorda substituir "nombre_proceso" pel nom del procés en qüestió.
Llistar fitxers oberts per PID
Per llistar els fitxers oberts pel PID del procés, simplement executa:
# lsof -p numero_PIDSubstitueix "numero_PID" pel número identificador del procés (el pots obtenir amb l'ordre top).
Llistar connexions per processos
Per llistar les connexions obertes per processos:
# lsof -iObtindràs una llista; pots utilitzar less per facilitar-ne la lectura.
Llistar connexions per PID, usuari o nom de procés
Podràs combinar l'opció de llistar connexions, per exemple, pel número identificador d'un procés:
# lsof -i -a -p numero_pidTambé pots utilitzar altres arguments com l'usuari (-u), el fitxer o el nom de procés (-c). Així com també filtrar per port o protocol IP.
Llistar connexions per port
Per llistar connexions d'un port determinat simplement has d'executar:
# lsof -i :numero_puertoDesprés dels dos punts, afegeix el número del port en qüestió ("numero_puerto").
Llistar connexions IPv4 o IPv6
Llistar connexions IPv4:
# lsof -i4El podràs utilitzar en combinació amb altres arguments i per a IPv6 seria:
# lsof -i6Un exemple de combinació és el següent:
# lsof -i6 :numero_puertoObtindries les connexions IPv6 d'un port determinat.
Més informació
Com hauràs observat, lsof és una eina molt útil i pots combinar-la amb diferents ordres. Un exemple seria utilitzar Kill per matar tots els processos d'un resultat de lsof, un exemple d'això és matar tots els processos d'un usuari:
# kill -9 $(lsof -t -u usuario) També pots combinar arguments; el següent serviria per mostrar fitxers oberts d'un procés determinat d'un usuari:
# lsof -u usuario -c nombre_procesoFinalment, utilitzant l'argument d'ajuda (-h) obtindràs més informació sobre lsof:
lsof 4.93.2
latest revision: https://github.com/lsof-org/lsof
latest FAQ: https://github.com/lsof-org/lsof/blob/master/00FAQ
latest (non-formatted) man page: https://github.com/lsof-org/lsof/blob/master/Lsof.8
usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-E] [+|-e s] [+|-f[gG]]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
-?|-h list help -a AND selections (OR) -b avoid kernel blocks
-c c cmd c ^c /c/[bix] +c w COMMAND width (9) +d s dir s files
-d s select by FD set +D D dir D tree *SLOW?* +|-e s exempt s *RISKY*
-i select IPv[46] files -K [i] list|(i)gn tasKs -l list UID numbers
-n no host names -N select NFS files -o list file offset
-O no overhead *RISKY* -P no port names -R list paRent PID
-s list file size -t terse listing -T disable TCP/TPI info
-U select Unix socket -v list version info -V verbose search
+|-w Warnings (+) -X skip TCP&UDP* files -Z Z context [Z]
-- end option scan
-E display endpoint info +E display endpoint info and files
+f|-f +filesystem or -file names +|-f[gG] flaGs
-F [f] select fields; -F? for help
+|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
+m [m] use|create mount supplement
+|-M portMap registration (-) -o o o 0t offset digits (8)
-p s exclude(^)|select PIDs -S [t] t second stat timeout (15)
-T qs TCP/TPI Q,St (s) info
-g [s] exclude(^)|select and print process group IDs
-i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
+|-r [t[m<fmt>]] repeat every t seconds (15); + until no files, - forever.
An optional suffix to t is m<fmt>; m must separate t from <fmt> and
<fmt> is an strftime(3) format for the marker line.
-s p:s exclude(^)|select protocol (p = TCP|UDP) states by name(s).
-u s exclude(^)|select login|UID set s
-x [fl] cross over +d|+D File systems or symbolic Links
names select named files or files on named file systems
Esperem haver-te ajudat amb aquest article. Si et queden dubtes sobre aquesta o qualsevol altra qüestió relacionada amb els teus servidors a Clouding, escriu-nos a soporte@clouding.io. Som aquí per ajudar-te! 😉