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