כיצד לרשום קבצים פתוחים עבור תהליך בלינוקס

מדריך לשימוש בפקודה 'lsof' עבור תהליך

אם אתה משתמש תכוף במערכות לינוקס או יוניקס, בוודאי שמעתם את המשפט "בלינוקס הכל קובץ". זה עשוי להיות מסווג כפשטנות יתר של הרעיון, אך מתברר שזה עוזר מאוד להבין כיצד פועלים קבצים במערכת לינוקס.

לא כל מה שמופיע בסביבת לינוקס חייב להיות קובץ. לפעמים זה יכול להיות תהליך, זה יכול להיות קובץ מיוחד המייצג את מידע החומרה, ספריות ודברים אחרים.

מדריך זה ידריך אותך במציאת כל הקבצים הפתוחים לתהליך מסוים בלינוקס.

מבוא ל lsof פקודה

היופי במערכת לינוקס הוא שאתה יכול לשלוט ולנהל את כל המערכת שלך דרך הטרמינל, בתנאי שאתה מכיר היטב את הפקודות. ברגע שהפקודות ידועות אז כל המשימות בטרמינל הופכות ל-cakewalk.

lsof מייצג 'רשימה של קבצים פתוחים'. ברגע שאתה מכיר את הגרסה הארוכה של הפקודה, יהיה לך קל מאוד להבין ולהשתמש בפקודה בצורה פרודוקטיבית.

ה lsof הפקודה מציגה את רשימות הקבצים הפתוחים, שקעים וצינורות. אתה יכול לחפש בקלות את הקבצים הפתוחים באמצעות פקודה זו. כאשר lsof הפקודה משמשת ללא כל אפשרות היא מציגה את כל הקבצים הפתוחים ביחס לתהליכים הפעילים הפועלים.

הערה: ודא שאתה משתמש סודו תוך כדי ביצוע הפקודות.

משתמש ב lsof פקודה

נלמד את הפלט של ה lsof פקודה בפירוט. למד את הפקודה הבאה.

sudo lsof | פָּחוּת

הערה: אם נפעיל ישירות את lsof הפקודה, הפלט הולך להיות גדול מאוד ועלול ליצור בלבול כדי להמשיך הלאה. לפיכך, כאן השתמשתי lsof | פָּחוּת פקודה לנוחיות ההדרכה.

תְפוּקָה:

gaurav@ubuntu:~$ sudo lsof | פחות COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF שם צומת kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs unknown/exe root net 31 root net 31 DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt לא ידוע /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root 06r / rcu_tasks 33 root txt לא ידוע /proc/33/exe kauditd 34 root cwd DIR 8,8 4096 2 / kauditd 34 root rtd DIR 8,8 4096 2 / kauditd 34 root txt לא ידוע /proc/34/exe 

להלן התכונות המוצגות באמצעות ה- lsof פקודה.

פָּרָמֶטֶרתיאור
פקודהמציג את שם הפקודה שפותחת את הקובץ.
PIDמספר מזהה תהליך של התהליך שפותח את הקובץ.
TIDמספר מזהה חוט. זה יכול להיות שרשור או מספר משימה.
מִשׁתַמֵשׁמזהה משתמש או שם המשתמש שהוא הבעלים של התהליך.
FDמציג את מתאר הקובץ של הקובץ.
סוּגסוג הצומת המשויך לקובץ.
התקןמציג מספרי מכשירים.
גודל/כבוימציג את גודל הקובץ בבתים.
צוֹמֶתמציג את מספר האינוד את הספרייה או את ספריית האב.
שֵׁםמציג את שם מערכת הקבצים שבה נמצא התהליך.

פירוט התהליכים

בראש ובראשונה חשוב לך להשיג את התהליכים הפועלים ואת מזהי התהליך שלהם. לינוקס מספקת מגוון פקודות לרשימת התהליכים יחד עם התכונות שלהם כמו PID, משתמש, ספרייה וכו'.

אתה יכול להשתמש בפקודות כמו חלק עליון, נ.ב, htop, pstree לרשימת התהליכים בטרמינל.

לאורך המדריך, אני אשתמש ב- חלק עליון פקודה לעשות זאת. ה חלק עליון הפקודה מספקת תצוגה דינמית בזמן אמת של מערכת פועלת. זה גם מציג את כל התהליכים והשרשורים המנוהלים כעת על ידי ליבת לינוקס. למד את הבלוק הנתון להלן כדי לבדוק את הפלט של חלק עליון פקודה.

תחביר:

טופ סודו

תְפוּקָה:

gaurav@ubuntu:~$sudo top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.08 87:48.08 30mon 2 34.41 mongod 13,765 Gaurav 20 0 2,931,568 131,408 47,496 S 5.9 3.3 1: 42.34 Web Content 1 שורש 20 0 225,904 6824 4900 S 0.0 0.2 0: 27.25 systemd 2 שורש 20 0 0 0 0 S 0.0 0.0 0: 00,05 kthreadd 4 שורש 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 9:0 soft 0.0 0.0 0:0 soft 0 0 I 0.0 0.0 0:22.32 rcu_sched 9 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 10 root rt 0 0 0 0 S 0.0 0.0 0:03.13 הגירה 

בבלוק לעיל, אנו יכולים לראות את כל המידע הקשור לתהליך במקום אחד. מכאן נוכל למצוא את PID של התהליך שבו עלינו להציג את הקבצים הפתוחים באמצעות ה lsof פקודה.

אבל אם אתה רוצה לגלות את מזהה התהליך של תהליך מסוים בלבד ולהימנע מתהליכים לא רצויים אחרים, השתמש בפקודה הבאה.

תחביר:

sudo top | grep [Process_Name]

דוגמא:

gaurav@ubuntu:~$ למעלה | grep מסוף 13,819 Gaurav 20 0 803,336 19,728 9160 S 0.3 0.5 0: 53.63 gnome-terminal- 13,819 Gaurav 20 0 803,336 19,728 9160 S 1.0 0.5 0: 53.66 gnome-terminal- 13,819 Gaurav 20 0 803,336 19,728 9160 S 0.3 0.5 0: 53.67 gnome -terminal- gaurav@ubuntu:~$

כאן הצגנו במיוחד את מזהה התהליך של התהליך שיש לו את המחרוזת 'טרמינל' בשם התהליך. שיטה זו שימושית כאשר אינך מודע לשם התהליך המלא או ה-PID.

הצגת הקבצים הפתוחים הקשורים לתהליך המשתמש ב-PID

בבלוק לעיל, למדנו כיצד להשיג מידע הקשור לתהליך בעזרת הפקודה העליונה. כעת נשתמש ב- PID מתאים לכל תהליך במערכת ונסה להציג את רשימת הקבצים הפתוחים הקשורים לתהליך זה באמצעות ה- lsof פקודה.

מהפלט הנתון לעיל, הבה ניקח את התהליך המתאים ל-PID 1173 המודגש. אנו נשתמש ב- lsof -p [PID] פקודה לעשות זאת.

תחביר:

sudo lsof -p [PID]

פקודה זו לוקחת את ה-PID של התהליך כקלט ומפרטת את כל הקבצים המתאימים ל-PID הזה.

תְפוּקָה:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: אזהרה: לא יכול stat() fuse.gvfsd-fuse system /run/user/1000/gvfs מידע פלט עשוי להיות חלקי. COMMAND PID USER FD TYPE DEVICE SIZE/OFF שם צומת mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb 8,849 mongodb 8,849 txtmon 8,849 1173 mongodb mem REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8,8 101168 2624643 /lib/x86_6_6 4godmon 1173 mem REG 8,8 26936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_64-linux-gnuso1.lib/x86_64-linux-gnuso1. 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mongod 1173 mongodb mem REG 8,8 3004224 2909671 /usr/lib/locale/godale-archive 1720 1720 REG 1720 lib/x86_64-linux-gnu/libc-2.27.so mongod 1173 mongodb mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 1173 mongod 1173 mongod 6,42 6,6b 6,6b x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb me m REG 8,8 1700792 2622735 /lib/x86_64-linux-gnu/libm-2.27.so mongod 1173 mongodb mem REG 8,8 14560 2621535 /lib/x86_64-linux-gnu/27. memgodl-gnu/271. 8,8 31680 2624646 /lib/x86_64-linux-gnu/librt-2.27.so mongod 1173 mongodb mem REG 8,8 2357760 2890079 /usr/lib/x86_64-linux-gnu/gaurlibcrypto.so/gaurlibcrypto. :~$

הקבצים הפתוחים לתהליך עם מזהה תהליך 1713 מוצגים באמצעות ה lsof פקודה.

הערה: משתמשי GNOME עשויים להיתקל באזהרה שלהלן. אתה יכול להתעלם מזה בבטחה.

lsof: אזהרה: לא יכול stat() fuse.gvfsd-fuse system /run/user/1000/gvfs מידע פלט עשוי להיות חלקי.

רישום קבצים פתוחים הקשורים לתהליך באמצעות שם התהליך

ה lsof הפקודה מספקת לך גם אפשרות לרשום את הקבצים הפתוחים באמצעות שמות התהליכים. יש לספק את השמות לפקודה כמחרוזת קלט. ראה את התחביר למטה כדי להשתמש באפשרות זו.

תחביר:

sudo lsof -c [שם תהליך]

דוגמא:

sudo lsof -c mysql

תְפוּקָה:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: אזהרה: לא יכול stat() fuse.gvfsd-fuse system /run/user/1000/gvfs מידע פלט עשוי להיות חלקי. COMMAND PID USER FD TYPE DEVICE SIZE/OFF שם צומת mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 2096 4096 4096 4096 4096 4096 4096 /sbin/mysqld mysqld 1266 mysql mem REG 8,8 6288 5505444 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0,18 28127 /[aio] mysql 26q /[aio] 18127 /[aio] mysql 26q /6 aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27. lib/x86_64-linux-gnu/libnss_nis-2.27.so mysqld 1266 mysql mem REG 8,8 39744 2624438 /lib/x86_64-linux-gnu/libnss_compat-2.27.so 

הפלט יהיה כמו של זה שבו נעשה שימוש במזהה התהליך במקום בשם התהליך.

רישום קבצים שנפתחו על ידי חיבורי רשת

בלינוקס, קבצים יכולים להיות גם בצורה של מידע על חיבורי הרשת שלך, חיבורי חומרה וכו'. אנחנו יכולים להשתמש lsof הפקודה לרשימת הקבצים שנפתחו על ידי חיבור הרשת. השתמש בשיטה הבאה.

sudo lsof -i

תְפוּקָה:

gaurav@ubuntu:~$ sudo lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF שם צומת systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 4 10u localhost 410cP domain (LISTEN) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 avahi-2 *: 0t0 avahi-2 *: 0t0 avahi-2 *: 0t0 avahi-2*: 0t0 avahi-2 *: 0md0 0md 2-2*: Avahi-דיי 1028 Avahi 14U IPv4 23,812 0t0 UDP *: 58,999 Avahi-דיי 1028 Avahi 15u IPv6 23,813 0t0 UDP *: 37,512 mongod 1173 MongoDB 6U IPv4 28,149 0t0 TCP localhost: 27,017 (ולהקשיב) mysqld 1266 MySQL 19u IPv4 25,992 0t0 TCP localhost: mysql (LISTEN) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (LISTEN) gaurav@ubuntu:~$

כאן נוכל לראות את המידע על הקבצים הפתוחים על ידי חיבור הרשת באמצעות ה lsof -i פקודה.

סיכום

במדריך הפשוט הזה, למדנו כיצד לרשום קבצים פתוחים לתהליך בלינוקס באמצעות שיטות שונות שקל להשתמש בהן. לשימושים נוספים של lsof פקודה, ראה את lsof דף אדם.