ฉันจะกำหนดเส้นทางไปยังไบนารีของกระบวนการได้อย่างไร


30

มีวิธีการค้นหาไดเรกทอรี / ตำแหน่งที่ตั้งดิสก์กระบวนการเริ่มต้นจาก? ฉันรู้เกี่ยวกับ / proc mount แต่ไม่ใช่ตำแหน่งที่จะมองเข้าไป


1
คุณหมายถึงตำแหน่งของไบนารีหรือไดเรกทอรีที่กระบวนการเริ่มทำงานหรือไม่
Lekensteyn

ขออภัยในความคลุมเครือฉันหมายถึงเลขฐานสอง
SuperJumbo

คำตอบ:


37

/procวิธีที่จะตรวจสอบexeการเชื่อมโยงในไดเรกทอรีที่สอดคล้องกับกํา

ลองตัวอย่างด้วยupdate-notifier:

ค้นหา pid ซึ่งเป็น15421ในตัวอย่างนี้:

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

ค้นหาลิงก์สัญลักษณ์:

egil@gud:~$ file /proc/15421/exe
/proc/15421/exe: symbolic link to `/usr/bin/update-notifier'

โอ้ใช่ฉันเกือบจะอยู่ที่นั่นแล้ว ตำนานขอบคุณ
SuperJumbo

15

อาจwhichเป็นสิ่งที่คุณกำลังมองหา ตัวอย่างเช่นในระบบของฉัน

which firefox 

ผลตอบแทน

/usr/bin/firefox

ดูยังหาเส้นทางของแอพลิเคชันที่ทำงานบนระบบปฏิบัติการ Solaris, อูบุนตู Suse หรือ Redhat ลินุกซ์


6
whichเจ๋ง แต่มันจะคืนค่าโปรแกรมใน $ PATH ของคุณเท่านั้น ถ้าฉันวิ่งRandomProgramIDownloadedToErisKnowsWhere.binสิ่งนี้จะไม่ใช้งานมากนัก
djeikyb

6

หากคุณมี ID กระบวนการคุณสามารถใช้:

readlink -f /proc/$pid/exe

(แทนที่$pidด้วย ID กระบวนการของกระบวนการ)

หากกระบวนการไม่ได้เป็นเจ้าของโดยคุณคุณจะต้องใส่sudoในด้านหน้าของมัน

ตัวอย่างสำหรับการระบุตำแหน่งของคำสั่งfirefox:

  1. ผลลัพธ์ของps ax -o pid,cmd | grep firefox:

    22831 grep --color=auto firefox
    28179 /usr/lib/firefox-4.0.1/firefox-bin
    
  2. 28179 เป็น ID กระบวนการดังนั้นคุณต้องเรียกใช้:

    readlink -f /proc/28179/exe
    

    ผลลัพธ์ใด:

    /usr/bin/firefox
    

2
คุณสามารถทำสิ่งดีๆได้/proc/$pid/exeหากไบนารีถูกลบโดยไม่ตั้งใจคุณสามารถคืนค่าได้ด้วย:dd if=/proc/$pid/exe of=restored-binary
Lekensteyn

1

กดCtrl+ Alt+ Tเพื่อไปที่เทอร์มินัลแล้วพิมพ์:

ls -al /proc/{pid}/fd  

จากนั้นตรวจสอบผลลัพธ์

นี่จะแสดงรายการไฟล์ทั้งหมดที่กระบวนการของคุณเชื่อมโยงกับ ...


คุณช่วยทบทวนการแก้ไขของฉันและทบทวนความช่วยเหลือในการแก้ไขเพื่อปรับปรุงความสามารถในการอ่านคำตอบของคุณในอนาคต ... ;-)
Fabby

0

คำสั่งทั้งหมดในคำตอบอื่น ๆ นั้นดี แต่คุณสามารถทำได้มากขึ้น - ดูว่ากระบวนการบางอย่างได้รับการทำงานจริงก่อนที่จะเข้าสู่รายการกระบวนการ

ทำงานใน terminal:

top

และในขณะที่มันกำลังทำงานให้กดแป้นพิมพ์Cและคุณจะได้รับคำสั่งของกระบวนการที่ถูกเรียกใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.