ค้นหาเว็บไซต์

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 เพื่อทราบข้อมูลเพิ่มเติม โปรดแบ่งปันหากคุณพบว่าบทความนี้มีประโยชน์ผ่านช่องแสดงความคิดเห็นด้านล่าง