¿Cómo determino la ruta a un binario de un proceso?

30

¿Hay alguna manera de averiguar la ubicación del directorio / disco desde la que se inició un proceso? Soy consciente del montaje / proc pero no sé realmente dónde mirar dentro de él.

Superjumbo
fuente
1
¿Te refieres a la ubicación del binario, o el directorio desde el que comenzó un proceso?
Lekensteyn
Perdón por la ambigüedad, me refiero al binario
SuperJumbo

Respuestas:

37

La /procforma sería inspeccionar el exeenlace en el directorio correspondiente al pid.

Tomemos un ejemplo con update-notifier:

Encuentre el pid, que es 15421 en este ejemplo:

egil@gud:~$ ps x | grep update-notifier
 2405 pts/4    S+     0:00 grep update-notifier
15421 ?        Sl     0:00 update-notifier

Busque el enlace simbólico:

egil@gud:~$ file /proc/15421/exe
/proc/15421/exe: symbolic link to `/usr/bin/update-notifier'
Egil
fuente
Oh sí, ya casi estaba allí. Leyenda, gracias.
SuperJumbo
6

Siempre que tenga un ID de proceso disponible, puede usar:

readlink -f /proc/$pid/exe

(reemplazar $pidpor el ID de proceso de un proceso)

Si el proceso no es de su propiedad, tendrá que ponerlo sudodelante.

Un ejemplo para determinar la ubicación del comando firefox:

  1. La salida de ps ax -o pid,cmd | grep firefox:

    22831 grep --color=auto firefox
    28179 /usr/lib/firefox-4.0.1/firefox-bin
    
  2. 28179 es la ID del proceso, por lo que debe ejecutar:

    readlink -f /proc/28179/exe
    

    que salidas:

    /usr/bin/firefox
    
Lekensteyn
fuente
2
Puede hacer cosas geniales con /proc/$pid/exe, si el binario se elimina accidentalmente, puede restaurarlo con:dd if=/proc/$pid/exe of=restored-binary
Lekensteyn
1

Presione Ctrl+ Alt+ Tpara ir a una terminal y escriba:

ls -al /proc/{pid}/fd  

y luego verifique la salida

Esto enumerará todos los archivos con los que está asociado su proceso ...

xiaoyifang
fuente
¿Podría revisar mis ediciones y también la ayuda de edición para mejorar la legibilidad de sus respuestas en el futuro ... ;-)
Fabby
0

Todos los comandos en las otras respuestas son buenos, pero podría hacer aún más: ver cómo se ha ejecutado algún proceso antes de llegar a la lista de procesos.

Ejecutar en terminal:

top

Y mientras se está ejecutando, presione el teclado Cy obtendrá un comando de los procesos que se ejecutaron.

Aleks
fuente