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

วิธีค้นหาว่าใครกำลังใช้ไฟล์ใน Linux


ในบทความนี้ เราจะอธิบายวิธีค้นหาว่าใครกำลังใช้ไฟล์ใดไฟล์หนึ่งบน Linux ซึ่งจะช่วยให้คุณทราบผู้ใช้ระบบหรือกระบวนการที่ใช้ไฟล์ที่เปิดอยู่

เราสามารถใช้คำสั่ง lsof เพื่อดูว่ามีใครกำลังใช้ไฟล์อยู่หรือไม่ และเป็นใคร อ่านหน่วยความจำเคอร์เนลเพื่อค้นหาไฟล์ที่เปิดอยู่ และช่วยคุณแสดงรายการไฟล์ที่เปิดอยู่ทั้งหมด ในกรณีนี้ ไฟล์ที่เปิดอาจเป็นไฟล์ปกติ ไดเร็กทอรี ไฟล์พิเศษบล็อก ไฟล์พิเศษอักขระ สตรีม ไฟล์เครือข่าย และอื่นๆ อีกมากมาย เพราะใน Linux ทุกอย่างเป็นไฟล์

Lsof ถูกใช้บนระบบไฟล์เพื่อระบุว่าใครกำลังใช้ไฟล์ใดๆ บนระบบไฟล์นั้น คุณสามารถเรียกใช้ คำสั่ง lsof บนระบบไฟล์ Linux และเอาต์พุตจะระบุเจ้าของและข้อมูลการประมวลผลสำหรับกระบวนการที่ใช้ไฟล์ดังที่แสดงในเอาต์พุตต่อไปนี้

lsof /dev/null
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd   1480 tecmint    0r   CHR    1,3      0t0    6 /dev/null
sh        1501 tecmint    0r   CHR    1,3      0t0    6 /dev/null
sh        1501 tecmint    1w   CHR    1,3      0t0    6 /dev/null
dbus-daem 1530 tecmint    0u   CHR    1,3      0t0    6 /dev/null
xfce4-ses 1603 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfce4-ses 1603 tecmint    1w   CHR    1,3      0t0    6 /dev/null
at-spi-bu 1604 tecmint    0r   CHR    1,3      0t0    6 /dev/null
dbus-daem 1609 tecmint    0u   CHR    1,3      0t0    6 /dev/null
at-spi2-r 1611 tecmint    0u   CHR    1,3      0t0    6 /dev/null
xfconfd   1615 tecmint    0u   CHR    1,3      0t0    6 /dev/null
xfwm4     1624 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfwm4     1624 tecmint    1w   CHR    1,3      0t0    6 /dev/null
xfce4-pan 1628 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfce4-pan 1628 tecmint    1w   CHR    1,3      0t0    6 /dev/null
Thunar    1630 tecmint    0r   CHR    1,3      0t0    6 /dev/null
Thunar    1630 tecmint    1w   CHR    1,3      0t0    6 /dev/null
xfdesktop 1632 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfdesktop 1632 tecmint    1w   CHR    1,3      0t0    6 /dev/null
....

หากต้องการแสดงรายการไฟล์ที่เปิดเฉพาะผู้ใช้ ให้รันคำสั่งต่อไปนี้แทนที่ tecmint ด้วยชื่อผู้ใช้จริง

lsof -u tecmint
COMMAND    PID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd   1480 tecmint  cwd       DIR                8,3      4096          2 /
systemd   1480 tecmint  rtd       DIR                8,3      4096          2 /
systemd   1480 tecmint  txt       REG                8,3   1595792    3147496 /lib/systemd/systemd
systemd   1480 tecmint  mem       REG                8,3   1700792    3150525 /lib/x86_64-linux-gnu/libm-2.27.so
systemd   1480 tecmint  mem       REG                8,3    121016    3146329 /lib/x86_64-linux-gnu/libudev.so.1.6.9
systemd   1480 tecmint  mem       REG                8,3     84032    3150503 /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0
systemd   1480 tecmint  mem       REG                8,3     43304    3150514 /lib/x86_64-linux-gnu/libjson-c.so.3.0.1
systemd   1480 tecmint  mem       REG                8,3     34872    2497970 /usr/lib/x86_64-linux-gnu/libargon2.so.0
systemd   1480 tecmint  mem       REG                8,3    432640    3150484 /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1
systemd   1480 tecmint  mem       REG                8,3     18680    3150450 /lib/x86_64-linux-gnu/libattr.so.1.1.0
systemd   1480 tecmint  mem       REG                8,3     18712    3150465 /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
systemd   1480 tecmint  mem       REG                8,3     27112    3150489 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
systemd   1480 tecmint  mem       REG                8,3     14560    3150485 /lib/x86_64-linux-gnu/libdl-2.27.so
...

การใช้งานที่สำคัญอีกประการหนึ่งของ lsof คือการค้นหากระบวนการฟังบนพอร์ตเฉพาะ ตัวอย่างเช่น ระบุกระบวนการฟังบนพอร์ต 80 โดยใช้คำสั่งต่อไปนี้

sudo lsof -i TCP:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd    903   root    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1320 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1481 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1482 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1493 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1763 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   2027 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   2029 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   2044 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   3199 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   3201 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)

หมายเหตุ: เนื่องจาก lsof อ่านหน่วยความจำเคอร์เนลในการค้นหาไฟล์ที่เปิดอยู่ การเปลี่ยนแปลงอย่างรวดเร็วในหน่วยความจำเคอร์เนลอาจส่งผลให้เกิดผลลัพธ์ที่ไม่สามารถคาดเดาได้ นี่เป็นหนึ่งในข้อเสียที่สำคัญของการใช้คำสั่ง lsof

สำหรับข้อมูลเพิ่มเติม โปรดดูที่หน้าคู่มือ lsof:

man lsof

นั่นคือทั้งหมด! ในบทความนี้ เราได้อธิบายวิธีการทราบว่าใครกำลังใช้ไฟล์ใดไฟล์หนึ่งบน Linux เราได้แสดงวิธีการระบุเจ้าของและประมวลผลข้อมูลสำหรับกระบวนการโดยใช้ไฟล์ที่เปิดอยู่ ใช้แบบฟอร์มคำติชมด้านล่างเพื่อติดต่อเราหากมีคำถามหรือความคิดเห็น