C'è un modo per scoprire la directory / posizione del disco da cui è stato avviato un processo? Sono a conoscenza del mount / proc, ma non proprio dove guardarlo al suo interno.
C'è un modo per scoprire la directory / posizione del disco da cui è stato avviato un processo? Sono a conoscenza del mount / proc, ma non proprio dove guardarlo al suo interno.
Risposte:
Il /proc
modo sarebbe quello di ispezionare il exe
collegamento nella directory corrispondente al pid.
Facciamo un esempio con update-notifier
:
Trova il pid, che è 15421 in questo esempio:
egil@gud:~$ ps x | grep update-notifier
2405 pts/4 S+ 0:00 grep update-notifier
15421 ? Sl 0:00 update-notifier
Cerca il link simbolico:
egil@gud:~$ file /proc/15421/exe
/proc/15421/exe: symbolic link to `/usr/bin/update-notifier'
Forse which
è quello che stai cercando. Ad esempio, sul mio sistema
which firefox
ritorna
/usr/bin/firefox
Vedi anche Trova il percorso dell'applicazione in esecuzione su Solaris, Ubuntu, Suse o Redhat Linux .
which
è bello, ma restituisce solo programmi nel tuo $ PATH. Se corro RandomProgramIDownloadedToErisKnowsWhere.bin
, questo non sarà di grande utilità.
Se disponi di un ID processo disponibile, puoi utilizzare:
readlink -f /proc/$pid/exe
(sostituisci $pid
con l'ID processo di un processo)
Se il processo non è di tua proprietà, dovrai metterlo sudo
di fronte.
Un esempio per determinare la posizione del comando firefox
:
L'output di ps ax -o pid,cmd | grep firefox
:
22831 grep --color=auto firefox
28179 /usr/lib/firefox-4.0.1/firefox-bin
28179
è l'ID del processo, quindi devi eseguire:
readlink -f /proc/28179/exe
che produce:
/usr/bin/firefox
/proc/$pid/exe
, se il binario viene accidentalmente cancellato, puoi ripristinarlo con:dd if=/proc/$pid/exe of=restored-binary
Premi Ctrl+ Alt+ Tper andare a un terminale e digitare:
ls -al /proc/{pid}/fd
e quindi controllare l'output
Verranno elencati tutti i file a cui è associato il processo ...
Tutti i comandi nelle altre risposte sono buoni, ma potresti fare ancora di più - vedendo come alcuni processi sono stati effettivamente eseguiti prima che arrivassero all'elenco dei processi.
Esegui nel terminale:
top
E mentre è in esecuzione, premi la tastiera C
e otterrai un comando dei processi che sono stati eseguiti.