Solución 1:
Acabo de mirar algunas páginas man, parece que usas el comando:
sudo lsof /
Esto mostrará una lista de todos los archivos abiertos en el directorio /, que es todo en un sistema de archivos de Linux. Acabo de probar y solo muestra 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.
Solución 2:
Puede haber un interruptor, pero si no te importa filtrarlo a través de grep, puedes hacer sudo lsof | egrep 'REG|DIR'
, asumiendo que por "archivos físicos" se refiere a archivos y directorios normales.
Consulte la sección SALIDA ::TIPO de la página man man lsof
para todos los tipos que puedan estar en esa columna.
Solución 3:
Esto es lo que hice y funcionó perfectamente para mí:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
El -F n
opción a lsof
hará que solo imprima los nombres de los archivos abiertos. Cada línea de salida que tenga el nombre de un archivo abierto comenzará con el carácter único n seguido inmediatamente por el nombre . Normal files siempre será 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 FIFO), etc. El cut -c2-
eliminará el primer carácter, el n
, dejando solo el nombre del archivo. Luego, finalmente, el sort -u
eliminará cualquier entrada duplicada.
Una advertencia, esto incluirá archivos que no son normales siempre que su nombre comience con un /
. Por ejemplo, se incluirían todos los archivos que comiencen con lo siguiente:
- /dev
- /proc
- /sistema
Y puede haber otros dependiendo de su sistema operativo.