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.
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.
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.
Respuestas:
Acabo de mirar algunas páginas de manual, parece que usas el comando:
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:
0-999 lo limita a archivos con un número de descriptor de archivo.
fuente
/
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.fuente
Esto es lo que hice, que funcionó perfectamente para mí:
La
-F n
opciónlsof
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. Elgrep ^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, eln
, 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.
fuente