linux--查看文件占用(lsof)

linux--查看文件占用(lsof)

2023年7月6日发(作者:)

linux--查看⽂件占⽤(lsof)linux--查看⽂件占⽤(lsof)1 简介2 lsof2.1 简介lsof可以打开的⽂件2.2 ⽤法2.3 ⽰例在终端下输⼊lsof即可显⽰系统打开的⽂件(root权限)查看某端⼝运⾏情况查看所属root⽤户进程所打开的⽂件类型为txt的⽂件查看谁使⽤该⽂件恢复删除的⽂件(摘⾃3)参考1 简介⼀个⽂件可能被多个进程操作,linux查看⽂件被哪些进程操作,可使⽤lsof命令。2 lsof2.1 简介lsof(list open files)是⼀个列出当前系统打开⽂件的⼯具。在linux环境下,任何事物都以⽂件的形式存在,通过⽂件不仅仅可以访问常规数据,还可以访问⽹络连接和硬件。所以如传输控制协议 (TCP) 和⽤户数据报协议 (UDP) 套接字等,系统在后台都为该应⽤程序分配了⼀个⽂件描述符,⽆论这个⽂件的本质如何,该⽂件描述符为应⽤程序与基础操作系统之间的交互提供了通⽤接⼝。因为应⽤程序打开⽂件的描述符列表提供了⼤量关于这个应⽤程序本⾝的信息,因此通过lsof⼯具能够查看这个列表对系统监测以及排错将是很有帮助的。lsof可以打开的⽂件普通⽂件⽬录⽹络⽂件系统的⽂件字符或设备⽂件(函数)共享库管道,命名管道符号链接⽹络⽂件(例如:NFS file、⽹络socket,unix域名socket)还有其它类型的⽂件,等等2.2 ⽤法lsof [options] filename常⽤如下列表:lsof filename 显⽰打开指定⽂件的所有进程lsof -a 表⽰两个参数都必须满⾜时才显⽰结果lsof -c string 显⽰COMMAND列中包含指定字符的进程所有打开的⽂件lsof -u username 显⽰所属user进程打开的⽂件lsof -g gid 显⽰归属gid的进程情况lsof +d /DIR/ 显⽰⽬录下被进程打开的⽂件lsof +D /DIR/ 同上,但是会搜索⽬录下的所有⽬录,时间相对较长lsof -d FD 显⽰指定⽂件描述符的进程lsof -n 不将IP转换为hostname,缺省是不加上-n参数lsof -i ⽤以显⽰符合条件的进程情况lsof -i[46] [protocol][@hostname|hostaddr][:service|port]46 --> IPv4 or IPv6protocol --> TCP or UDPhostname --> Internet host namehostaddr --> IPv4地址service --> /etc/service中的 service name (可以不只⼀个)port --> 端⼝号 (可以不只⼀个)2.3 ⽰例在终端下输⼊lsof即可显⽰系统打开的⽂件(root权限)lsof | grep qtCOMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEsogou-qim 1469 meg mem REG 8,1 353944 396899 /usr/lib/x86_64-linux-gnu/qt4/plugins/accessible/u-qim 1469 meg mem REG 8,1 261944 396900 /usr/lib/x86_64-linux-gnu/qt4/plugins/accessiblebridge/u-qim 1469 meg mem REG 8,1 31592 396915 /usr/lib/x86_64-linux-gnu/qt4/plugins/imageformats/u-qim 1469 meg mem REG 8,1 23128 396914 /usr/lib/x86_64-linux-gnu/qt4/plugins/imageformats/u-qim 1469 meg mem REG 8,1 27568 396913 /usr/lib/x86_64-linux-gnu/qt4/plugins/imageformats/u-qim 1469 meg mem REG 8,1 31696 396912 /usr/lib/x86_64-linux-gnu/qt4/plugins/imageformats/u-qim 1469 meg mem REG 8,1 31504 396911 /usr/lib/x86_64-linux-gnu/qt4/plugins/imageformats/u-qim 1469 meg mem REG 8,1 31440 396910 /usr/lib/x86_64-linux-gnu/qt4/plugins/imageformats/-servi 1517 meg mem REG 8,1 361960 396977 /usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes/AND:进程的名称PID:进程标识符USER:进程所有者FD:⽂件描述符,应⽤程序通过⽂件描述符识别该⽂件。如cwd、txt等TYPE:⽂件类型,如DIR、REG等DEVICE:指定磁盘的名称SIZE:⽂件的⼤⼩NODE:索引节点(⽂件在磁盘上的标识)NAME:打开⽂件的确切名称查看某端⼝运⾏情况lsof -i :221 /bin/busybox /dev/console1 /bin/busybox /dev/console1 /bin/busybox /dev/console1479 /sbin/udevd /dev/null1479 /sbin/udevd /dev/null1479 /sbin/udevd /dev/null1479 /sbin/udevd anon_inode:inotify1479 /sbin/udevd socket:[725]1479 /sbin/udevd socket:[726]1479 /sbin/udevd pipe:[727]1479 /sbin/udevd pipe:[727]3179 /bin/busybox /dev/null3179 /bin/busybox /dev/null3179 /bin/busybox /dev/null3179 /bin/busybox socket:[5139]3179 /bin/busybox socket:[5140]3179 /bin/busybox socket:[5141]3179 /bin/busybox socket:[5142]3179 /bin/busybox socket:[5143]3179 /bin/busybox socket:[5144]3179 /bin/busybox socket:[5145]查看所属root⽤户进程所打开的⽂件类型为txt的⽂件lsof -a -u root -d txt1 /bin/busybox /dev/console1 /bin/busybox /dev/console1 /bin/busybox /dev/console1479 /sbin/udevd /dev/null1479 /sbin/udevd /dev/null1479 /sbin/udevd /dev/null1479 /sbin/udevd anon_inode:inotify1479 /sbin/udevd socket:[725]1479 /sbin/udevd socket:[726]1479 /sbin/udevd pipe:[727]1479 /sbin/udevd pipe:[727]1641 /bin/busybox /dev/null1641 /bin/busybox /dev/console1641 /bin/busybox /dev/console3179 /bin/busybox /dev/null3179 /bin/busybox /dev/null3179 /bin/busybox /dev/null3179 /bin/busybox socket:[5139]3179 /bin/busybox socket:[5140]3179 /bin/busybox socket:[5141]3179 /bin/busybox socket:[5142]3179 /bin/busybox socket:[5143]3179 /bin/busybox socket:[5144]3179 /bin/busybox socket:[5145]3207 /usr/local/sbin/sshd /dev/null3207 /usr/local/sbin/sshd /dev/null3207 /usr/local/sbin/sshd /dev/null3207 /usr/local/sbin/sshd socket:[3002]查看谁使⽤该⽂件过滤找出该⽂件占⽤的进程lsof | grep ./32287 /opt/worthsen/wcs /opt/worthsen/config/123恢复删除的⽂件(摘⾃3)当Linux计算机受到⼊侵时,常见的情况是⽇志⽂件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的⽂件,⽐如在清理旧⽇志时,意外地删除了数据库的活动事务⽇志。有时可以通过lsof来恢复这些⽂件。当进程打开了某个⽂件时,只要该进程保持打开该⽂件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道⽂件已经被删除,它仍然可以向打开该⽂件时提供给它的⽂件描述符进⾏读取和写⼊。除了该进程之外,这个⽂件是不可见的,因为已经删除了其相应的⽬录索引节点。# lsof |grep /var/log/messagessyslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)从上⾯的信息可以看到 PID 1283(syslogd)打开⽂件的⽂件描述符为 2。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在 /proc/1283/fd/2 (fd下的每个以数字命名的⽂件表⽰进程对应的⽂件描述符)中查看相应的信息,如下:

# head -n 10 /proc/1283/fd/2Aug 4 13:50:15 holmes86 syslogd 1.4.1: 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 (root@) (gcc version 4.2.0) #1 SMP Wed Jul 1811:18:32 EDT 2007Aug 4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map:Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000 - f000 (usable)Aug 4 13:50:15 holmes86 kernel: BIOS-e820: f000 - a0000 (reserved)Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000 - 000000001f7d3800 (usable)Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000001f7d3800 - 0000 (reserved)Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000e0000000 - 00000000f0007000 (reserved)Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000f0008000 - 00000000f000c000 (reserved)从上⾯的信息可以看出,查看 /proc/8663/fd/15 就可以得到所要恢复的数据。如果可以通过⽂件描述符查看相应的数据,那么就可以使⽤ I/O重定向将其复制到⽂件中,如:

cat /proc/1283/fd/2 > /var/log/messages 对于许多应⽤程序,尤其是⽇志⽂件和数据库,这种恢复删除⽂件的⽅法⾮常有⽤。

参考1、wiki–lsof2、linux查看⽂件被哪个进程占⽤?3、linux lsof详解4、3. lsof ⼀切皆⽂件

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688592585a153137.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信