¿Cómo le digo a lsof que necesito enumerar solo archivos físicos (no sockets, no conexiones TCP / IP, solo archivos físicos)?
¿Cómo le digo a lsof que necesito enumerar solo archivos físicos (no sockets, no conexiones TCP / IP, solo archivos físicos)?
Respuestas:
Acabo de mirar algunas páginas de manual, parece que usas el comando:
sudo lsof /
Esto enumerará todos los archivos abiertos en el directorio /, que es todo en un sistema de archivos Linux. Acabo de probar y muestra solo REG y DIR.
Más ejemplos:
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999 lo limita a archivos con un número de descriptor de archivo.
/
Puede haber un cambio, pero si no le importa filtrarlo a través de grep, podría hacerlo sudo lsof | egrep 'REG|DIR'
, suponiendo que por "archivos físicos" se refiere a archivos y directorios normales.
Consulte la sección SALIDA :: TIPO de la página del manual man lsof
para ver todos los tipos que pueden estar en esa columna.
Esto es lo que hice, que funcionó perfectamente para mí:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
La -F n
opción lsof
hará que solo imprima los nombres de los archivos abiertos. Cada línea de salida que tiene el nombre de un archivo abierto comenzará con el carácter único n seguido inmediatamente por el nombre . Los archivos normales siempre serán el nombre absoluto y totalmente calificado del archivo. El grep ^n/
seleccionará solo aquellas líneas con un nombre que comience con un /
(es decir, un nombre de archivo absoluto y totalmente calificado); eliminando así cosas como puertos abiertos, enchufes, tuberías (como FIFOs, etc.) cut -c2-
Eliminará el primer carácter, el n
, dejando solo el nombre del archivo. Luego, finalmente, sort -u
eliminará cualquier entrada duplicada.
Una advertencia, esto incluirá archivos que no son regulares siempre que su nombre comience con a /
. Por ejemplo, se incluirían todos los archivos que comienzan con lo siguiente:
Y puede haber otros dependiendo de su sistema operativo.