1、lsof 简介

lsof 是 linux 下的一个非常实用的系统级的监控、诊断工具。

它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合~

它可以用来列出被各种进程打开的文件信息,记住:linux 下 “一切皆文件”,

包括但不限于 pipes, sockets, directories, devices, 等等。

因此,使用 lsof,你可以获取任何被打开文件的各种信息。

只需输入 lsof 就可以生成大量的信息,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

lsof 的示例输出:root@YLinux:~/lab 0# lsof

COMMAND     PID   TID       USER   FD      TYPE     DEVICE SIZE/OFF       NODE NAME

systemd       1             root  cwd       DIR        8,6     4096          2 /

systemd       1             root  rtd       DIR        8,6     4096          2 /

systemd       1             root  txt       REG        8,6  2273340    1834909 /usr/lib/systemd/systemd

systemd       1             root  mem       REG        8,6   210473    1700647 /lib/libnss_files-2.15.s

...

2、lsof 常用用法

2.1 监控打开的文件、设备

查看文件、设备被哪些进程占用# lsof /dev/tty1

COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

bash       1770 jian    0u   CHR    4,1      0t0 1045 /dev/tty1

bash       1770 jian    1u   CHR    4,1      0t0 1045 /dev/tty1

bash       1770 jian    2u   CHR    4,1      0t0 1045 /dev/tty1

bash       1770 jian  255u   CHR    4,1      0t0 1045 /dev/tty1

startx     1845 jian    0u   CHR    4,1      0t0 1045 /dev/tty1

startx     1845 jian    1u   CHR    4,1      0t0 1045 /dev/tty1

...

2.2 监控文件系统

指定目录、挂载点,可以看到有哪些进程打开了其下的文件:# lsof /data/

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

bash    15983 jian  cwd    DIR    8,5     4096 8252 /data/backup

...

这在 umount 某个文件系统失败时非常有用(通常会报该 FS is busy)。

列出某个目录(挂载点 如 /home 也行)下被打开的文件:# lsof +D /var/log/

COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME

rsyslogd  488 syslog   1w   REG    8,1     1151 268940 /var/log/syslog

rsyslogd  488 syslog   2w   REG    8,1     2405 269616 /var/log/auth.log

console-k 144   root   9w   REG    8,1    10871 269369 /var/log/ConsoleKit/history

列出被指定进程名打开的文件:# lsof -c ssh -c init

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME

init         1       root  txt    REG        8,1   124704  917562 /sbin/init

init         1       root  mem    REG        8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so

init         1       root  mem    REG        8,1    30684 1442694 /lib/i386-linux-gnu/librt-2.13.so

...

ssh-agent 1528 lakshmanan    1u   CHR        1,3      0t0    4369 /dev/null

ssh-agent 1528 lakshmanan    2u   CHR        1,3      0t0    4369 /dev/null

ssh-agent 1528 lakshmanan    3u  unix 0xdf70e240      0t0   10464 /tmp/ssh-sUymKXxw1495/agent.1495

2.3 监控进程

指定进程号,可以查看该进程打开的文件:# lsof -p 2064

COMMAND  PID USER   FD   TYPE     DEVICE SIZE/OFF    NODE NAME

firefox 2064 jian  cwd    DIR        8,6     4096 1571780 /home/jian

firefox 2064 jian  rtd    DIR        8,6     4096       2 /

firefox 2064 jian  txt    REG        8,6    44224 1985670 /usr/lib/firefox-12.0/firefox

firefox 2064 jian  mem    REG        8,6 14707012  925361 /usr/share/fonts/chinese/msyhbd.ttf

firefox 2064 jian  mem    REG        8,6 15067744  925362 /usr/share/fonts/chinese/msyh.ttf

firefox 2064 jian  mem    REG        8,6 16791251 1701681 /usr/share/fonts/wenquanyi/wqy-zenhei.ttc

firefox 2064 jian  mem    REG       0,16 67108904   10203 /dev/shm/pulse-shm-3021850167

...

当你想要杀掉某个用户所有打开的文件、设备,你可以这样:kill -9 `lsof -t -u lakshmanan`

此处 -t 的作用是单独的列出 进程 id 这一列。

关于杀死进程的 4 种方式,请参考:

2.4 监控网络

查看指定端口有哪些进程在使用(lsof -i 列出所有的打开的网络连接):# lsof -i:22

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

sshd    1569 root    3u  IPv4  10303      0t0  TCP *:ssh (LISTEN)

sshd    1569 root    4u  IPv6  10305      0t0  TCP *:ssh (LISTEN)

...

列出被某个进程打开所有的网络文件:lsof -i -a -p 234

或者lsof -i -a -c ssh

列出所有 tcp、udp 连接:lsof -i tcp;

lsof -i udp;

列出所有 NFS 文件:lsof -N -u lakshmanan -a

查看指定网口有哪些进程在使用:# lsof -i@192.168.1.91

COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

skype      1909 jian   54u  IPv4   9116      0t0  TCP 192.168.1.91:40640->64.4.23.153:40047 (ESTABLISHED)

pidgin     1973 jian    7u  IPv4   6599      0t0  TCP 192.168.1.91:59311->hx-in-f125.1e100.net:https (ESTABLISHED)

pidgin     1973 jian   13u  IPv4   9260      0t0  TCP 192.168.1.91:54447->by2msg3010511.phx.gbl:msnp (ESTABLISHED)

...

3、更多使用技巧

3.1 监控用戶

查看指定用戶打开的文件(lsof -u ^lakshmanan 可以排除某用户):# lsof -u messagebus

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF    NODE NAME

dbus-daem 1805 messagebus  cwd    DIR        8,6     4096       2 /

dbus-daem 1805 messagebus  rtd    DIR        8,6     4096       2 /

dbus-daem 1805 messagebus  txt    REG        8,6  1235361 1834948 /usr/bin/dbus-daemon

dbus-daem 1805 messagebus  mem    REG        8,6   210473 1700647 /lib/libnss_files-2.15.so

dbus-daem 1805 messagebus  mem    REG        8,6   190145 1700642 /lib/libnss_nis-2.15.so

dbus-daem 1805 messagebus  mem    REG        8,6   490366 1700636 /lib/libnsl-2.15.so

...

3.2 监控应用程序

查看指定程序打开的文件:# lsof -c firefox

COMMAND  PID USER   FD   TYPE     DEVICE SIZE/OFF    NODE NAME

firefox 2064 jian  cwd    DIR        8,6     4096 1571780 /home/jian

firefox 2064 jian  rtd    DIR        8,6     4096       2 /

firefox 2064 jian  txt    REG        8,6    44224 1985670 /usr/lib/firefox-12.0/firefox

firefox 2064 jian  mem    REG        8,6 14707012  925361 /usr/share/fonts/chinese/msyhbd.ttf

firefox 2064 jian  mem    REG        8,6 15067744  925362 /usr/share/fonts/chinese/msyh.ttf

firefox 2064 jian  mem    REG        8,6 16791251 1701681 /usr/share/fonts/wenquanyi/wqy-zenhei.ttc

...

4、命令模式技巧

4.1 组合逻辑查询条件

只有多个查询条件都满足, 用 “-a” 参数,默认是 -o 。# lsof -a -c bash -u root

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME

bash    1986 root  cwd    DIR    8,6     4096 1701593 /root/lab

bash    1986 root  rtd    DIR    8,6     4096       2 /

bash    1986 root  txt    REG    8,6  1994157 1700632 /bin/bash

bash    1986 root  mem    REG    8,6  9690800  405214 /usr/lib/locale/locale-archive

bash    1986 root  mem    REG    8,6   210473 1700647 /lib/libnss_files-2.15.so

4.2 lsof 命令的重复执行模式:

基于给定的参数延时多少秒重复执行 lsof

+r 表示 当没有文件被打开的时候,repeat mode 将自行结束。

-r 表示 不管文件是否存在或者被打开,它都将执行,直到你中断它。

每个循环的输出使用 ‘=======’ 做分隔符,你也可以用 ‘-r’ | ‘+r’ 指定延时时间。# lsof -u lakshmanan -c init -a -r5

=======

=======

COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME

inita.sh 2971 lakshmanan  cwd    DIR    8,1     4096  393218 /home/lakshmanan

inita.sh 2971 lakshmanan  rtd    DIR    8,1     4096       2 /

inita.sh 2971 lakshmanan  txt    REG    8,1    83848  524315 /bin/dash

inita.sh 2971 lakshmanan  mem    REG    8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so

inita.sh 2971 lakshmanan  mem    REG    8,1   117960 1442612 /lib/i386-linux-gnu/ld-2.13.so

inita.sh 2971 lakshmanan    0u   CHR  136,4      0t0       7 /dev/pts/4

inita.sh 2971 lakshmanan    1u   CHR  136,4      0t0       7 /dev/pts/4

inita.sh 2971 lakshmanan    2u   CHR  136,4      0t0       7 /dev/pts/4

inita.sh 2971 lakshmanan   10r   REG    8,1       20  393578 /home/lakshmanan/inita.sh

=======

以上输出是前 5 秒没有输出,然后 “inita.sh” 启动后,开始有了输出。

5、最后的技巧

关于磁盘空间告警 df -h –max=1 与 du -hx –max=1 显示不一致的问题,

最常见的的还是下面这种情况:

lsof|grep -i delete

看看被删除的文件:有些删了文件,但是进程没 reload,那些空间还是占用的,你可以理解为类似 windows 下的进程句柄没释放的概念吧~ 只是 windows 下如果有文件被进程使用,你一般是删不掉的,而 linux 虽然不做删除限制,但却要等到进程使用完文件才能完全释放,以防止进程奔溃,这是操作系统对资源的管理差异吧~

例如 nginx 会有很多临时文件占用了 /tmp 目录,删掉后,依然占用着空间,

此时你可以:

pkill -9 nginx && /etc/init.d/nginx restart

好吧,本文到此结束了,关于 lsof 还有很多很多,不过哥常用、知道的就这些了,哥也只能帮你到这儿了,

如果你还需要其它的内容,请自行 google 吧,骚年。。。

6、refer:

使用 lsof 查找打开的文件

15 Linux lsof Command Examples (Identify Open Files)

实用的系统工具之 lsof

比如查看root用户进程所打开的文件类型为txt的文件

# lsof -a -u root -d txt

auditd     2639 root txt       REG    3,2  102136  44536 /sbin/auditd

owcimomd   2643 root txt       REG    3,2   24560  90676 /usr/sbin/owcimomd

irqbalanc  2737 root txt       REG    3,2   25880  62557 /usr/sbin/irqbalance

nscd       2771 root txt       REG    3,2  129908  44802 /usr/sbin/nscd

vsftpd     2809 root txt       REG    3,2  129792 132934 /usr/sbin/vsftpd

xinetd     2812 root txt       REG    3,2  165952  60679 /usr/sbin/xinetd

smpppd     2825 root txt       REG    3,2  193752  99524 /usr/sbin/smpppd

sshd       2827 root txt       REG    3,2  376768  98762 /usr/sbin/sshd

zmd        2847 root txt       REG    3,2 1895856  86524 /usr/bin/mono

gdm        2893 root txt       REG    3,2  268424 126353 /opt/gnome/sbin/gdm

#lsof -c mysql

备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成 lsof | grep mysql, 但是第一种方法明显比第二种方法要少打几个字符了

3. 列出多个程序多打开的文件信息

#lsof -c mysql -c apache

4. 列出某个用户以及某个程序所打开的文件信息

#lsof -u test -c mysql

14. 列出某个用户的所有活跃的网络端口

#lsof  -a -u test -i

linux查询对外2827端口运行文件,lsof介绍相关推荐

  1. linux如何查看一个端口是否打开,lsof -i linux怎么查看某个端口是否打开

    Linux下用 lsof 命令查找指定端口被哪个进程占用 1)使用lsof命令lsof是一个非常强大的linux工具,她被用来查找哪些程序使用了那些文件.在linux系统下,基本上所有的东西都可以被当 ...

  2. linux查询php占用端口,linux如何查看端口占用

    Linux查看端口占用的方法有:lsof -i方法用于查看某一端口的占用情况:netstat -tunlp|grep方法用于查看指定的端口号的进程情况 我们在在项目的部署的时候,经常会碰到端口占用的问 ...

  3. linux查询数据库oracle端口,Oracle数据库常用命令、Linux监听配置、oracle linux下开放1521端口...

    Oracle数据库常用命令.Linux监听配置.oracle linux下开放1521端口 时间:2020-02-14 来源: 一.Linux下Oracle数据库常用命令 oracle用户下执行: $ ...

  4. Linux基础知识--- 1、centos文件夹介绍

    /boot 引导程序,内核等存放的目录. 这个目录,包括了在引导过程中所必需的文件,引导程序的相关文件(例如grub,lilo以及相应的配置文件以及Linux操作系统内核相关文件(例如vmlinuz等 ...

  5. linux查询所有目录的txt文件,Linux 在指定目录下的所有文件中查找text文本的方法...

    1.使用grep -rnw查找指定文本grep -rnw '/path/to/somewhere/' -e 'pattern' -r或-R 递归遍历目录及子目录 -n 是行号 -w 代表匹配整个单词. ...

  6. linux查询redis版本_Docker安装Redis并介绍漂亮的可视化客户端进行操作

    1 简介 Redis是使用ANSI C语言开发的基于Key-Value的高性能NoSQL数据库,在解决高并发.高可用等一系列问题中,它扮演着重要的角色.它的优势主要有: 速度快. 持久化. 原子性. ...

  7. linux windows文件 编码_Mac, Windows和Linux电脑之间如何快速传输文件

    Mac, Windows和Linux电脑之间如何快速传输文件 本文介绍的方法主要适用于在家庭环境中的多台电脑之间快速传输文件,比如家中有三台电脑分别是Windows, Mac和Linux系统,如果传输 ...

  8. linux中如何运行html文件路径问题,Linux中如何查询运行文件的全路径的方法

    在linux中,有些地方需要使用绝对路径,对于一些命令,如java.mysql等,需要使用到运行文件所在的路径,给大家介绍一个命令,来查询这个路径. which 可以通过which查询运行文件的所在路 ...

  9. linux查询80端口,Linux 查看 80 端口的占用情况

    lsof -i:端口号 eg: lsof -i:80 lsof -i:21 [root@localhost ~]# lsof -i: COMMAND PID USER FD TYPE DEVICE S ...

最新文章

  1. 如何实现对ELK各组件的监控?试试Metricbeat
  2. 少年宫计算机室活动小结,微机室管理工作总结
  3. TiDB 官方设计文档翻译(三)
  4. 阶跃函数卷积自己_如何看待大神/老师说“阶跃响应曲线调参并不准确”的观点?...
  5. 如何在移动设备上以开发模式访问SAP Spartacus
  6. 如何将Java工程导出成可以执行的jar
  7. STM32启动文件——startup_stm32f10x_hd.s
  8. SQLi LABS Less-4 联合注入+报错注入
  9. prerenderspaplugin 打包完成后如何让百度收录_网站优化技术第一篇(如何快速提升网站的收录量?)...
  10. 深度学习框架 各种模型下载集合 -- models list
  11. 如何在 Mac 上使用快速操作工作流程?
  12. 服装行业RFID智能管理系统方案详解
  13. 小米9android q测试版,MIUI Android Q Beta优先体验版已推送:小米9可尝鲜
  14. ffdshow 源代码分析 8: 视频解码器类(TvideoCodecDec)
  15. BiERU: Bidirectional Emotional Recurrent Unitfor Conversational Sentiment Analysis(20.12.10)
  16. 寺庙公众号开发:vue实现祈福牌位的前端部分
  17. Materials Studio软件常见问题与解决方案(二)
  18. linux jdk,hadoop,zookeeper, hive , zeppelin ,sqoop ,hbase,scala,spark,flume,kafka 安装终极脚本全家桶安装
  19. echarts添加基准线
  20. 一些基于SWT的项目

热门文章

  1. 一篇文章教你整合ssm配置,可以收藏。
  2. Go语言:go-redis客户端设置过期时间相关命令Expire,ExpireAt,TTL的用法示例
  3. C++使用ffmpeg解码v模块,支持cpu解码、amd64平台的cuda解码和NX平台的Nvmpi解码
  4. 【FFmpeg 命令】提取音频或视频、提取图片、格式转换等
  5. 利用Nexus搭建私服
  6. go-pitaya学习笔记(9)-rate_limiting demo分析
  7. 【安卓笔记】图片特效之黑白效果
  8. python mitmproxy +雷电模拟器 安装
  9. 往日学习=【iptables实验part3-搭建简单蜜罐网络】
  10. 小伙伴面试之成都创宇知道