Bagaimana cara menentukan path ke biner dari suatu proses?

30

Apakah ada cara untuk mengetahui lokasi direktori / disk proses dimulai? Saya menyadari / proc mount tetapi tidak benar-benar ke mana harus mencari ke dalamnya.

SuperJumbo
sumber
1
Apakah maksud Anda lokasi biner, atau direktori tempat proses dimulai?
Lekensteyn
Maaf untuk ambiguitas, maksud saya biner
SuperJumbo

Jawaban:

37

The /proccara akan memeriksa exelink pada direktori yang sesuai dengan pid.

Mari kita ambil contoh dengan update-notifier:

Temukan pid, yaitu 15421 dalam contoh ini:

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

Cari tautan simbolis:

egil@gud:~$ file /proc/15421/exe
/proc/15421/exe: symbolic link to `/usr/bin/update-notifier'
Egil
sumber
Oh ya, aku hampir sampai. Legenda, terima kasih.
SuperJumbo
15

Mungkin whichitu yang Anda cari. Misalnya, di sistem saya

which firefox 

kembali

/usr/bin/firefox

Lihat juga Temukan Jalur Aplikasi yang Berjalan di Solaris, Ubuntu, Suse atau Redhat Linux .

NN
sumber
6
whichitu keren, tetapi hanya mengembalikan program dalam $ PATH Anda. Jika saya menjalankan RandomProgramIDownloadedToErisKnowsWhere.bin, ini tidak akan banyak berguna.
djeikyb
6

Memberikan ID proses yang tersedia, Anda dapat menggunakan:

readlink -f /proc/$pid/exe

(ganti $piddengan ID proses suatu proses)

Jika prosesnya bukan milik Anda, Anda harus meletakkannya sudodi depannya.

Contoh untuk menentukan lokasi perintah firefox:

  1. Output dari ps ax -o pid,cmd | grep firefox:

    22831 grep --color=auto firefox
    28179 /usr/lib/firefox-4.0.1/firefox-bin
    
  2. 28179 adalah ID proses, jadi Anda harus menjalankan:

    readlink -f /proc/28179/exe
    

    yang keluaran:

    /usr/bin/firefox
    
Lekensteyn
sumber
2
Anda dapat melakukan hal-hal keren dengan /proc/$pid/exe, jika biner terhapus secara tidak sengaja, Anda dapat memulihkannya dengan:dd if=/proc/$pid/exe of=restored-binary
Lekensteyn
1

Tekan Ctrl+ Alt+ Tuntuk pergi ke terminal dan ketik:

ls -al /proc/{pid}/fd  

dan kemudian periksa hasilnya

Ini akan mencantumkan semua file yang terkait dengan proses Anda ...

Xiaoyifang
sumber
Bisakah Anda meninjau suntingan saya dan juga meninjau bantuan pengeditan untuk meningkatkan keterbacaan jawaban Anda di masa depan ... ;-)
Fabby
0

Semua perintah dalam jawaban lain baik, tetapi Anda bisa melakukan lebih banyak lagi - melihat bagaimana beberapa proses telah benar-benar dijalankan sebelum sampai ke daftar proses.

Jalankan di terminal:

top

Dan saat sedang berjalan, tekan keyboard Cdan Anda akan mendapatkan perintah dari proses yang dijalankan.

Aleks
sumber