¿Cómo le digo a lsof que necesito enumerar solo archivos físicos (ni sockets, ni conexiones TCP/IP, solo archivos físicos)?
Respuesta1
Acabo de revisar algunas páginas de manual y 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. Recién probado 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.
Respuesta2
Puede haber un cambio, pero si no le importa filtrarlo a través de grep, puede hacerlo 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 de manual man lsof
para conocer todos los tipos que pueden estar en esa columna.
Respuesta3
Esto es lo que hice y 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 elnombresde los archivos abiertos. Cada línea de salida que tenga el nombre de un archivo abierto comenzará con un solo carácternorteseguido inmediatamente por elnombre.Regularfiles siempre será el nombre absoluto y completo del archivo. Seleccionará grep ^n/
sólo aquellas líneas con un nombre que comience con a /
(es decir, un nombre de archivo absoluto y completamente calificado); eliminando así cosas como puertos abiertos, sockets, tuberías (como FIFO), etc. Eliminará cut -c2-
el primer carácter, el n
, dejando solo el nombre del archivo. Finalmente, eliminará sort -u
cualquier entrada duplicada.
Una advertencia: esto incluirá archivos que no sonregularsiempre y cuando su nombre comience con /
. Por ejemplo, se incluirían todos los archivos que comiencen con lo siguiente:
- /desarrollador
- /proceso
- /sistema
Y puede haber otros dependiendo de su sistema operativo.
Respuesta4
Si lo usa lsof /
, solo enumerará los archivos abiertos en sistemas de archivos montados DIRECTAMENTE en /; es decir, si tiene /home montado en /, su contenido se ignorará. Probé varias combinaciones de opciones para lsof, pero todas tuvieron problemas. Lo mejor que se me ocurrió es esto:
lsof `readlink -f /dev/block/*`
Esto utiliza readlink -f para obtener todos los dispositivos de bloqueo y alimentarlos como una lista para buscar. lsof ignora los que no están montados.
Si tiene otras opciones para limitar la búsqueda, por ejemplo un pid, recuerde finalizar el comando lsof con un -a
to Y con la lista de dispositivos bloqueados:
lsof -p 982482 -a `readlink -f /dev/block/*`