lsof: restringir la salida solo a archivos físicos, ¿cómo?


30

¿Cómo le digo a lsof que necesito enumerar solo archivos físicos (no sockets, no conexiones TCP / IP, solo archivos físicos)?


Primero debe determinar para qué lo necesita. Decir "archivos físicos" es demasiado general. lsof le dará archivos que se han abierto con un descriptor de archivo. le dará archivos que han sido abiertos como archivos mapeados en memoria por hilos. le dará archivos de biblioteca que han sido abiertos por procesos. Todos estos son archivos físicos, pero la forma en que se utilizan es diferente.
Michael Martinez

Respuestas:


37

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.


2
Incluirá FIFO también.
Kyle Brandt el

1
Agradable y simple Si necesita solo la última columna, puede agregar | awk {'print $ 9'} Interesante. Tampoco obtengo quince en mi salida. Fedora 12 y CentOS 5.3
egorgry

CentOS 5.2 y Ubuntu 9.04 me devuelven los quince, podría ser un cambio, pero ¿estás seguro de que hay quince? Lo buscaría primero y me aseguraría de que esté allí, que pruebe el/
Kyle Brandt el

Además, solo estaba jugando, parece que él simplemente no quiere el ruido, y probablemente no habrá muchos quince.
Kyle Brandt el

44
lsof / solo incluye archivos en el sistema de archivos raíz. Si tiene varios sistemas de archivos montados, no aparecerán en la salida. Creo que la mejor manera es simplemente usar grep.
James

9

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 lsofpara ver todos los tipos que pueden estar en esa columna.


24
Puede haber un cambio, pero la página de manual se lee como la tesis doctoral de alguien ... :)
Cawflands

1
Sí ... lsof man es extremadamente difícil de leer ...; p)
Vladislav Rastrusny

Haz +1 en ese comentario. :)
egorgry

en el servidor VPN con suficientes clientes, lsof no volverá, por lo greping no es una opción para mí
Ohad Cohen

@OhadCohen lsof volverá si restringe lo que está buscando. Ver "FD" en la página de manual (mem, cwd, pd, etc.)
Michael Martinez

2

Esto es lo que hice, que funcionó perfectamente para mí:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

La -F nopción lsofhará 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 -ueliminará 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:

  • / dev
  • / proc
  • / sys

Y puede haber otros dependiendo de su sistema operativo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.