คำแนะนำในการใช้คำสั่ง 'lsof' สำหรับกระบวนการ
หากคุณเป็นผู้ใช้ระบบ Linux หรือ Unix บ่อยครั้ง คุณต้องเคยได้ยินวลีนี้อย่างแน่นอน “ใน Linux ทุกอย่างเป็นไฟล์” สิ่งนี้อาจจัดอยู่ในประเภทการทำให้แนวคิดเข้าใจง่ายเกินไป แต่ก็พิสูจน์ได้ว่ามีประโยชน์มากในการทำความเข้าใจวิธีการทำงานของไฟล์ในระบบ Linux
ไม่ใช่ทุกสิ่งที่ปรากฏในสภาพแวดล้อม Linux จะต้องเป็นไฟล์ บางครั้งอาจเป็นกระบวนการ อาจเป็นไฟล์พิเศษที่แสดงข้อมูลฮาร์ดแวร์ ไดเรกทอรี และอื่นๆ
บทช่วยสอนนี้จะแนะนำคุณในการค้นหาไฟล์ทั้งหมดที่เปิดสำหรับกระบวนการเฉพาะใน Linux
บทนำสู่ lsof
สั่งการ
ข้อดีของระบบ Linux คือ คุณสามารถควบคุมและจัดการระบบทั้งหมดของคุณผ่านเทอร์มินัลได้ โดยที่คุณต้องรู้คำสั่งต่างๆ เป็นอย่างดี เมื่อทราบคำสั่งแล้ว งานทั้งหมดบนเครื่องเทอร์มินัลจะกลายเป็นเค้กวอล์ค
lsof
หมายถึง 'รายการไฟล์ที่เปิดอยู่'. เมื่อคุณทราบเวอร์ชันยาวของคำสั่งแล้ว จะกลายเป็นเรื่องง่ายมากสำหรับคุณที่จะเข้าใจและใช้คำสั่งในลักษณะที่มีประสิทธิผล
ดิ lsof
คำสั่งแสดงรายการไฟล์ที่เปิดอยู่ ซ็อกเก็ต และไพพ์ คุณสามารถค้นหาไฟล์ที่เปิดอยู่ได้อย่างง่ายดายโดยใช้คำสั่งนี้ เมื่อ lsof
คำสั่งถูกใช้โดยไม่มีตัวเลือกใด ๆ จะแสดงไฟล์ที่เปิดอยู่ทั้งหมดที่เกี่ยวข้องกับกระบวนการที่ทำงานอยู่ซึ่งกำลังทำงานอยู่
บันทึก: ให้แน่ใจว่าคุณใช้ sudo
ขณะดำเนินการคำสั่ง
ใช้ lsof
สั่งการ
เราจะศึกษาผลลัพธ์ของ lsof
คำสั่งอย่างละเอียด ศึกษาคำสั่งต่อไปนี้
sudo lsof | น้อย
บันทึก: ถ้าเราเรียกใช้ .โดยตรง lsof
คำสั่งเอาต์พุตจะมีขนาดใหญ่มากและอาจสร้างความสับสนในการดำเนินการต่อไป ฉันจึงใช้ที่นี่ lsof | น้อย
คำสั่งเพื่อความสะดวกในการกวดวิชา
เอาท์พุท:
gaurav@ubuntu:~$ sudo lsof | น้อยกว่า คำสั่ง PID TID ผู้ใช้ FD ประเภทอุปกรณ์ ขนาด/ปิด ชื่อโหนด kdevtmpfs 31 รูท cwd DIR 0,6 4400 2 / kdevtmpfs 31 รูท rtd DIR 0,6 4400 2 / kdevtmpfs 31 รูท txt ที่ไม่รู้จัก /proc/31/exe netns 32 รูท cwd DIR 8,8 4096 2 / netns 32 รูท rtd DIR 8,8 4096 2 / netns 32 รูท txt ที่ไม่รู้จัก /proc/32/exe rcu_tasks 33 รูท cwd DIR 8,8 4096 2 / rcu_tasks 33 รูท rtd DIR 8,8 4096 2 / rcu_tasks 33 รูท txt ที่ไม่รู้จัก /proc/33/exe kauditd 34 รูท cwd DIR 8,8 4096 2 / kauditd 34 รูท rtd DIR 8,8 4096 2 / kauditd 34 รูท txt ที่ไม่รู้จัก /proc/34/exe
ต่อไปนี้เป็นแอตทริบิวต์ที่แสดงโดยใช้เครื่องหมาย lsof
สั่งการ.
พารามิเตอร์ | คำอธิบาย |
---|---|
สั่งการ | แสดงชื่อของคำสั่งที่เปิดไฟล์ |
PID | หมายเลขตัวระบุกระบวนการของกระบวนการที่เปิดไฟล์ |
TID | หมายเลขระบุเธรด อาจเป็นเธรดหรือหมายเลขงานก็ได้ |
ผู้ใช้ | ID ผู้ใช้หรือชื่อผู้ใช้ที่เป็นเจ้าของกระบวนการ |
FD | แสดงคำอธิบายไฟล์ของไฟล์ |
พิมพ์ | ประเภทของโหนดที่เกี่ยวข้องกับไฟล์ |
อุปกรณ์ | แสดงหมายเลขอุปกรณ์ |
ขนาด/ปิด | แสดงขนาดของไฟล์เป็นไบต์ |
โหนด | แสดงหมายเลขไอโหนดของไดเร็กทอรีหรือไดเร็กทอรีหลัก |
ชื่อ | แสดงชื่อระบบไฟล์ที่กระบวนการตั้งอยู่ |
รายชื่อกระบวนการ
อันดับแรก เป็นสิ่งสำคัญสำหรับคุณที่จะได้รับกระบวนการที่กำลังทำงานและ ID กระบวนการที่เกี่ยวข้อง Linux มีคำสั่งที่หลากหลายเพื่อแสดงรายการกระบวนการพร้อมกับแอตทริบิวต์เช่น PID ผู้ใช้ ไดเร็กทอรี ฯลฯ
คุณสามารถใช้คำสั่งเช่น สูงสุด
, ปล
, htop
, pstree
เพื่อแสดงรายการกระบวนการบนเทอร์มินัล
ตลอดบทช่วยสอน ฉันจะใช้ สูงสุด
สั่งให้ทำเช่นนั้น ดิ สูงสุด
คำสั่งให้มุมมองแบบเรียลไทม์แบบไดนามิกของระบบที่ทำงานอยู่ นอกจากนี้ยังแสดงกระบวนการและเธรดทั้งหมดที่กำลังจัดการโดยเคอร์เนล Linux ศึกษาบล็อกที่ระบุด้านล่างเพื่อตรวจสอบผลลัพธ์ของ สูงสุด
สั่งการ.
ไวยากรณ์:
sudo ท็อป
เอาท์พุท:
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 Web Content 1173 mongodb 20 0 288536 6776 3428 S 5.9 0.2 2: 34.41 mongod 13765 gaurav 20 0 2931568 131408 47496 S 5.9 3.3 1:42.34 Web Content 1 root 20 0 225904 6824 4900 S 0.0 0.2 0:27.25 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd 4 root 0 -20 0 0 0 ฉัน 0.0 0.0 0:00.00 kworker/0:0H 6 ราก 0 -20 0 0 0 ฉัน 0.0 0.0 0:00.00 mm_percpu_wq 7 ราก 20 0 0 0 0 S 0.0 0.0 0:01.89 ksoftirqd/0 8 ราก 20 0 0 0 0 ฉัน 0.0 0.0 0:22.32 rcu_sched 9 ราก 20 0 0 0 0 ฉัน 0.0 0.0 0:00.00 rcu_bh 10 ราก rt 0 0 0 0 S 0.0 0.0 0:03.13 การย้ายถิ่น/0
ในบล็อกด้านบนนี้ เราจะเห็นข้อมูลที่เกี่ยวข้องกับกระบวนการทั้งหมดได้ในที่เดียว จากที่นี่เราจะพบ PID
ของกระบวนการที่เราต้องแสดงไฟล์ที่เปิดอยู่โดยใช้ lsof
สั่งการ.
แต่ถ้าคุณต้องการค้นหา ID กระบวนการของกระบวนการเฉพาะและหลีกเลี่ยงกระบวนการที่ไม่ต้องการอื่น ๆ ให้ใช้คำสั่งต่อไปนี้
ไวยากรณ์:
sudo ด้านบน | grep [Process_Name]
ตัวอย่าง:
gaurav@ubuntu:~$ top | เทอร์มินัล grep 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0:53.63 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 1.0 0.5 0:53.66 gnome-terminal- 13819 gaurav 20 0 803336 19728 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: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs ข้อมูลเอาต์พุตอาจไม่สมบูรณ์ คำสั่ง PID ผู้ใช้ FD ประเภทอุปกรณ์ ขนาด/ปิด ชื่อโหนด mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb txt REG 8,8 38379496 2885608 /usr/bingod 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_64-linux-gnu/libresolv-2.27.so mongod 1173 หน่วยความจำ 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-gnu/libnss_mdns4_minimal.so.2 mongodb 1173 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/locale-archive mongod 1173 mongodb mem REG 8,8 2030544 2621501 / 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 mongodb mem REG 8,8 96616 2624649 /lib/ x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb ฉัน 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/libdl-2.27.so mongod 1173 mongodb mem REG 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/libcrypto.so.1.0.0 gaurav@ubuntu :~$
ไฟล์ที่เปิดสำหรับกระบวนการที่มี ID กระบวนการ 1713 จะแสดงโดยใช้ปุ่ม lsof
สั่งการ.
บันทึก: ผู้ใช้ GNOME อาจพบคำเตือนด้านล่าง คุณสามารถละเลยได้อย่างปลอดภัย
lsof: คำเตือน: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs ข้อมูลเอาต์พุตอาจไม่สมบูรณ์
แสดงรายการไฟล์ที่เปิดอยู่ที่เกี่ยวข้องกับกระบวนการโดยใช้ชื่อกระบวนการ
ดิ lsof
คำสั่งยังให้คุณมีตัวเลือกในการแสดงรายการไฟล์ที่เปิดอยู่โดยใช้ชื่อของกระบวนการ ควรระบุชื่อให้กับคำสั่งเป็นสตริงอินพุต ดูไวยากรณ์ด้านล่างเพื่อใช้ตัวเลือกนี้
ไวยากรณ์:
sudo lsof -c [ชื่อกระบวนการ]
ตัวอย่าง:
sudo lsof -c mysql
เอาท์พุท:
gaurav@ubuntu:~$ sudo lsof -c mysql lsof: คำเตือน: can't stat() fuse.gvfsd-fuse ระบบไฟล์ /run/user/1000/gvfs ข้อมูลเอาต์พุตอาจไม่สมบูรณ์ คำสั่ง PID ผู้ใช้ FD ประเภทอุปกรณ์ ขนาด/ปิด ชื่อโหนด mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4096 2 / mysqld 1266 mysql txt REG 8,82894 246913 /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] mysqld 1266 mysql DEL REG 0,18 28126 /[ 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.so mysqld 1266 mysql mem REG 8,928 47576 26245 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
ผลลัพธ์จะเป็นแบบเดียวกับที่ใช้ Process ID แทนชื่อ Process
รายการไฟล์ที่เปิดโดยการเชื่อมต่อเครือข่าย
ใน Linux ไฟล์ยังสามารถอยู่ในรูปแบบของข้อมูลเกี่ยวกับการเชื่อมต่อเครือข่ายของคุณ การเชื่อมต่อฮาร์ดแวร์ ฯลฯ เราสามารถใช้ lsof
คำสั่งแสดงรายการไฟล์ที่เปิดโดยการเชื่อมต่อเครือข่าย ใช้วิธีการต่อไปนี้
sudo lsof -i
เอาท์พุท:
gaurav@ubuntu:~$ sudo lsof -i คำสั่ง PID ผู้ใช้ FD ประเภทอุปกรณ์ ขนาด/ปิดชื่อโหนด systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 13u IPv4 17358 0t0 TCP localhost โดเมน (ฟัง) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *:mdns avahi-dae 1028 avahi 13u IPv6 2 *3811 0mdns UDP avahi-dae 1028 avahi 14u IPv4 23812 0t0 UDP *:58999 avahi-dae 1028 avahi 15u IPv6 23813 0t0 UDP *:37512 mongod 1173 mongodb 6u IPv4 28149 0t0 TCP localhost:27017 (ฟัง) mysqld 1266 mysql0 ในพื้นที่ mysql (ฟัง) apache2 1283 รูท 4u IPv6 28140 0t0 TCP *:http (ฟัง) gaurav@ubuntu:~$
ที่นี่เราสามารถดูข้อมูลเกี่ยวกับไฟล์ที่เปิดโดยการเชื่อมต่อเครือข่ายโดยใช้ lsof -i
สั่งการ.
บทสรุป
ในบทช่วยสอนง่ายๆ นี้ เราได้เรียนรู้วิธีแสดงรายการไฟล์ที่เปิดสำหรับกระบวนการใน Linux โดยใช้วิธีการต่างๆ ที่ใช้งานง่าย สำหรับการใช้งานเพิ่มเติมของ lsof
คำสั่ง ดู lsof
หน้าคน.