10 lsof (รายการไฟล์ที่เปิด) ตัวอย่างคำสั่งใน Linux
นี่คือชุดคำสั่ง Linux ที่กำลังดำเนินอยู่ของเรา และในบทความนี้ เราจะทบทวนคำสั่ง lsof พร้อมตัวอย่างที่ใช้งานได้จริง lsof หมายถึง 'LiSt Open Files' ใช้เพื่อค้นหาว่าไฟล์ใดเปิดโดยกระบวนการ Linux ใด
ดังที่เราทุกคนทราบดีว่า Linux/Unix ถือว่าทุกอย่างเป็นไฟล์ (ไปป์, ซ็อกเก็ต, ไดเร็กทอรี, อุปกรณ์ ฯลฯ) เหตุผลประการหนึ่งที่ต้องใช้คำสั่ง lsof คือเมื่อไม่สามารถยกเลิกการต่อเชื่อมดิสก์ได้ เนื่องจากมีข้อความระบุว่ามีการใช้ไฟล์อยู่ ด้วยความช่วยเหลือของคำสั่ง lsof เราสามารถระบุไฟล์ที่ใช้งานได้อย่างง่ายดาย
1. แสดงรายการไฟล์ที่เปิดอยู่ทั้งหมดด้วยคำสั่ง lsof
ในตัวอย่างด้านล่าง จะแสดงรายการไฟล์ที่เปิดแบบยาว ซึ่งบางไฟล์ถูกแยกออกมาเพื่อความเข้าใจที่ดีขึ้น ซึ่งจะแสดงคอลัมน์ต่างๆ เช่น Command, PID, USER<, FD, ประเภท ฯลฯ
lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 145180 147164 /sbin/init
init 1 root mem REG 253,0 1889704 190149 /lib/libc-2.12.so
init 1 root 0u CHR 1,3 0t0 3764 /dev/null
init 1 root 1u CHR 1,3 0t0 3764 /dev/null
init 1 root 2u CHR 1,3 0t0 3764 /dev/null
init 1 root 3r FIFO 0,8 0t0 8449 pipe
init 1 root 4w FIFO 0,8 0t0 8449 pipe
init 1 root 5r DIR 0,10 0 1 inotify
init 1 root 6r DIR 0,10 0 1 inotify
init 1 root 7u unix 0xc1513880 0t0 8450 socket
ส่วนต่างๆ และค่านิยมสามารถอธิบายได้ในตัว อย่างไรก็ตาม เราจะตรวจสอบคอลัมน์ FD & TYPE ให้แม่นยำยิ่งขึ้น
FD – ย่อมาจาก File descriptor และอาจเห็นค่าบางค่าเป็น:
- cwd ไดเร็กทอรีการทำงานปัจจุบัน
- rtd ไดเรกทอรีราก
- ข้อความโปรแกรม txt (รหัสและข้อมูล)
- mem ไฟล์ที่แมปหน่วยความจำ
นอกจากนี้ในคอลัมน์ FD เช่น 1u เป็นตัวอธิบายไฟล์จริงและตามด้วย u,r,w ของโหมดเป็น:
- r สำหรับการเข้าถึงแบบอ่าน
- w สำหรับการเข้าถึงการเขียน
- u สำหรับการเข้าถึงแบบอ่านและเขียน
ประเภท – ของไฟล์และการระบุตัวตน
- DIR – ไดเรกทอรี
- REG – ไฟล์ปกติ
- CHR – ไฟล์อักขระพิเศษ
- FIFO – เข้าก่อนออกก่อน
2. แสดงรายการไฟล์ที่เปิดเฉพาะผู้ใช้
คำสั่งด้านล่างจะแสดงรายการไฟล์ที่เปิดอยู่ทั้งหมดของผู้ใช้ tecmint
lsof -u tecmint
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1838 tecmint cwd DIR 253,0 4096 2 /
sshd 1838 tecmint rtd DIR 253,0 4096 2 /
sshd 1838 tecmint txt REG 253,0 532336 188129 /usr/sbin/sshd
sshd 1838 tecmint mem REG 253,0 19784 190237 /lib/libdl-2.12.so
sshd 1838 tecmint mem REG 253,0 122436 190247 /lib/libselinux.so.1
sshd 1838 tecmint mem REG 253,0 255968 190256 /lib/libgssapi_krb5.so.2.2
sshd 1838 tecmint mem REG 253,0 874580 190255 /lib/libkrb5.so.3.3
3. ค้นหากระบวนการที่ทำงานบนพอร์ตเฉพาะ
หากต้องการค้นหากระบวนการ Linux ที่ทำงานอยู่ทั้งหมดของพอร์ตใดพอร์ตหนึ่ง เพียงใช้คำสั่งต่อไปนี้พร้อมกับตัวเลือก -i ตัวอย่างด้านล่างจะแสดงกระบวนการทำงานทั้งหมดของพอร์ต 22
lsof -i TCP:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1471 root 3u IPv4 12683 0t0 TCP *:ssh (LISTEN)
sshd 1471 root 4u IPv6 12685 0t0 TCP *:ssh (LISTEN)
4. แสดงรายการเฉพาะไฟล์ที่เปิด IPv4 และ IPv6
ในตัวอย่างด้านล่างแสดงเฉพาะไฟล์เครือข่าย IPv4 และ IPv6 ที่เปิดด้วยคำสั่งแยกกัน
lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc
rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954
rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN)
avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns
avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600
# lsof -i 6
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc
rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954
rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800
rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)
cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN)
5. แสดงรายการไฟล์ที่เปิดของช่วงพอร์ต TCP 1-1024
เพื่อแสดงรายการกระบวนการทำงานทั้งหมดของไฟล์ที่เปิดของช่วงพอร์ต TCP ตั้งแต่ 1-1024
lsof -i TCP:1-1024
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN)
sshd 1471 root 4u IPv6 12685 0t0 TCP *:ssh (LISTEN)
master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN)
sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd 1838 tecmint 3u IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd 1871 root 3r IPv4 15842 0t0 TCP 192.168.0.2:ssh->192.168.0.1:groove (ESTABLISHED)
httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN)
httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN)
6. ไม่รวมผู้ใช้ที่มีอักขระ '^'
ที่นี่ เราได้ยกเว้นผู้ใช้ root คุณสามารถยกเว้นผู้ใช้รายใดรายหนึ่งได้โดยใช้ '^' ด้วยคำสั่งดังที่แสดงด้านบน
lsof -i -u^root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc
rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954
rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc
rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954
rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns
avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600
rpc.statd 1277 rpcuser 5r IPv4 11836 0t0 UDP *:soap-beep
rpc.statd 1277 rpcuser 8u IPv4 11850 0t0 UDP *:55146
rpc.statd 1277 rpcuser 9u IPv4 11854 0t0 TCP *:32981 (LISTEN)
rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800
rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)
7. ค้นหาว่าใครกำลังมองหาไฟล์และคำสั่งอะไรบ้าง
ตัวอย่างด้านล่างนี้แสดงให้เห็นว่าผู้ใช้ tecmint กำลังใช้คำสั่ง เช่น ไดเรกทอรี ping และ /etc
lsof -i -u tecmint
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1839 tecmint cwd DIR 253,0 12288 15 /etc
ping 2525 tecmint cwd DIR 253,0 12288 15 /etc
8. แสดงรายการการเชื่อมต่อเครือข่ายทั้งหมด
คำสั่งต่อไปนี้พร้อมตัวเลือก '-i' จะแสดงรายการการเชื่อมต่อเครือข่ายทั้งหมด 'กำลังฟังและสร้างขึ้น'
lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc
rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954
rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns
avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600
rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)
cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN)
cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN)
sshd 1471 root 3u IPv4 12683 0t0 TCP *:ssh (LISTEN)
master 1551 root 12u IPv4 12896 0t0 TCP localhost:smtp (LISTEN)
master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN)
sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN)
httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN)
clock-app 2362 narad 21u IPv4 22591 0t0 TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT)
chrome 2377 narad 61u IPv4 25862 0t0 TCP 192.168.0.2:33358->maa03s04-in-f3.1e100.net:http (ESTABLISHED)
chrome 2377 narad 80u IPv4 25866 0t0 TCP 192.168.0.2:36405->bom03s01-in-f15.1e100.net:http (ESTABLISHED)
9. ค้นหาด้วย PID
ตัวอย่างด้านล่างแสดงเฉพาะ PID ที่เป็น 1 [หนึ่ง]
lsof -p 1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 145180 147164 /sbin/init
init 1 root mem REG 253,0 1889704 190149 /lib/libc-2.12.so
init 1 root mem REG 253,0 142472 189970 /lib/ld-2.12.so
10. ฆ่ากิจกรรมทั้งหมดของผู้ใช้โดยเฉพาะ
บางครั้งคุณอาจต้องฆ่ากระบวนการทั้งหมดสำหรับผู้ใช้รายใดรายหนึ่ง คำสั่งด้านล่างจะฆ่ากระบวนการทั้งหมดของผู้ใช้ tecmint
kill -9 `lsof -t -u tecmint`
หมายเหตุ: ในที่นี้ เป็นไปไม่ได้ที่จะยกตัวอย่างตัวเลือกที่มีอยู่ทั้งหมด คู่มือนี้มีไว้เพื่อแสดงวิธีการใช้คำสั่ง lsof เท่านั้น คุณอาจอ้างอิง man page ของคำสั่ง lsof เพื่อทราบข้อมูลเพิ่มเติม โปรดแบ่งปันหากคุณพบว่าบทความนี้มีประโยชน์ผ่านช่องแสดงความคิดเห็นด้านล่าง