Pregunta

El comando fuser me permite saber qué procesos están usando un archivo o directorio.

Estoy buscando un comando que haga lo contrario: me permite saber qué archivos está utilizando un proceso.


Actualizar

Olvidé mencionar que es para un sistema Solaris.

¿Fue útil?

Solución

Si bien no lamentaría que nadie aprendiera Dtrace o ganara experiencia instalando software, en Solaris hay un comando para ver los archivos que un proceso ha abierto:      / usr / bin / pfiles

% tail -f /etc/motd &
[1] 6033

% pfiles 6033
6033:   tail -f /etc/motd

      Current rlimit: 256 file descriptors
       0: S_IFREG mode:0644 dev:182,65538 ino:163065 uid:0 gid:3 size:54
          O_RDONLY|O_LARGEFILE
          /etc/motd
       1: S_IFCHR mode:0620 dev:299,0 ino:718837882 uid:101 gid:7 rdev:24,3
          O_RDWR|O_NOCTTY|O_LARGEFILE
          /dev/pts/3
       2: S_IFCHR mode:0620 dev:299,0 ino:718837882 uid:101 gid:7 rdev:24,3
          O_RDWR|O_NOCTTY|O_LARGEFILE
          /dev/pts/3

Otros consejos

lsof -p <pid>

De aquí

  

lsof significa " LiSt Open Files ". Este comando de shell parece engañosamente simple: enumera información sobre archivos abiertos por procesos en un cuadro de UNIX.

     

A pesar de su (aparente) modesta declaración de misión, lsof es en realidad uno de los comandos UNIX más potentes y útiles. Su potencia bruta proviene de uno de los principios de diseño de UNIX a menudo descrito como "en UNIX todo es un archivo". Lo que esto significa es que el concepto lsof de un archivo abierto no solo cubre archivos normales sino también lo siguiente:

  • Directorios
  • Secuencias o archivos de red (por ejemplo, zócalos de dominio de Internet o UNIX y archivos NFS)
  • Bibliotecas nativas (por ejemplo, bibliotecas .soor .dylibdynamic vinculadas a un proceso)
  • Bloque y caracteres de archivos especiales (por ejemplo, volumen de disco, disco duro externo, consola o mouse)
  • Tuberías

¡Espere, no puedo encontrar lsof en mi sistema!

  

lsof es una herramienta tan popular que se ha portado a casi todos los dialectos de UNIX (Linux, Mac OS X, BSD, Solaris, etc.). Si no está disponible en su caja, use su sistema habitual de administración de paquetes para instalarlo. Puede encontrar paquetes lsof para Solaris en Sun Freeware .

Esta es una aplicación clásica para dtrace .

No puedo recordar exactamente la sintaxis, pero puedes hacer que se active cada vez que un proceso abre un archivo en el sistema. Se puede hacer en un sistema en ejecución sin ningún tipo de sobrecarga tanto como esperaba que tuviera. Si está ejecutando Solaris como administrador, dtrace es su mejor amigo. Incluso si no eres un programador, es bastante simple de aprender y una herramienta de consulta del sistema MUY poderosa.

En algunos sistemas Unix (IE: Linux), todos los archivos abiertos por un proceso tienen una identificación FD.

Estos se pueden ver en

/ proc / $ PID / fd

ls -la /proc/2055/fd 
total 0
dr-x------ 2 kent kent  0 Nov 19 21:44 .
dr-xr-xr-x 7 kent kent  0 Nov 19 21:42 ..
lr-x------ 1 kent kent 64 Nov 19 21:44 0 -> /dev/null
l-wx------ 1 kent kent 64 Nov 19 21:44 1 -> /home/kent/.xsession-errors
lrwx------ 1 kent kent 64 Nov 19 21:44 10 -> socket:[3977613]
lrwx------ 1 kent kent 64 Nov 19 21:44 11 -> /home/kent/.googleearth/Cache/dbCache.dat
lrwx------ 1 kent kent 64 Nov 19 21:44 12 -> /home/kent/.googleearth/Cache/dbCache.dat.index
lrwx------ 1 kent kent 64 Nov 19 21:44 13 -> socket:[3978765]
lrwx------ 1 kent kent 64 Nov 19 21:44 14 -> socket:[3978763]
lrwx------ 1 kent kent 64 Nov 19 21:44 15 -> socket:[3978766]
lrwx------ 1 kent kent 64 Nov 19 21:44 17 -> socket:[3978764]
l-wx------ 1 kent kent 64 Nov 19 21:44 2 -> /home/kent/.xsession-errors
lr-x------ 1 kent kent 64 Nov 19 21:44 3 -> pipe:[3977583]
l-wx------ 1 kent kent 64 Nov 19 21:44 4 -> pipe:[3977583]
lr-x------ 1 kent kent 64 Nov 19 21:44 5 -> pipe:[3977584]
l-wx------ 1 kent kent 64 Nov 19 21:44 6 -> pipe:[3977584]
lr-x------ 1 kent kent 64 Nov 19 21:44 7 -> pipe:[3977587]
l-wx------ 1 kent kent 64 Nov 19 21:44 8 -> pipe:[3977587]
lrwx------ 1 kent kent 64 Nov 19 21:44 9 -> socket:[3977588]

Además, a veces incluso obtienes "FDINFO" (Creo que este es un indicador de kernel en Linux)

cat /proc/2055/fdinfo/11 
pos:    232741818
flags:  02
  1. puede usar el comando ls y grep para descubrir los archivos utilizados por Chrome

$ ls -l / proc / * / fd | grep " cromo "

lrwx ------ 1 ba abc 64 16 de julio 22:19 104 - > /home/abc/.config/google-chrome/Default/Cookies

lr-x ------ 1 abc abc 64 16 de julio 22:19 113 - > /opt/google/chrome/nacl_irt_x86_64.nexe

lrwx ------ 1 abc abc 64 16 de julio 22:19 121 - > /home/abc/.cache/google-chrome/Default/Cache/data_0

lrwx ------ 1 abc abc 64 16 de julio 22:19 122 - > /home/abc/.cache/google-chrome/Default/Cache/data_1

lrwx ------ 1 abc abc 64 16 de julio 22:19 123 - > /home/abc/.cache/google-chrome/Default/Cache/data_2

lr-x ------ 1 abc abc 64 16 de julio 22:19 125 - > /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic

Otro comando para averiguar el resultado usando lsof y grep

$ lsof | grep " cromo "

cromo 2204 abc cwd DIR 8,5 4096 1441794 / home / abc

cromo 2204 abc rtd DIR 8,5 4096 2 /

chrome 2204 abc txt REG 8,5 87345336 5111885 / opt / google / chrome / chrome

chrome 2204 abc mem REG 8,5 4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache / data_3

chrome 2204 abc mem REG 8,5 1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache / data_2

chrome 2204 abc mem REG 8,5 270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache / data_1

chrome 2204 abc mem REG 8,5 45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache / data_0

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top