linux命令之lsof

lsof是list open files的缩写。顾名思义,其作用是列出当前系统下所有打开的文件。
因为linux的一切皆文件的设计哲学,像socket,进程等,在系统中都会被视为文件

参数含义

[~]# lsof
COMMAND     PID   TID     USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1           root  cwd       DIR              253,1      4096          2 /
systemd       1           root  rtd       DIR              253,1      4096          2 /
systemd       1           root  txt       REG              253,1   1478184     397653 /usr/lib/systemd/systemd
systemd       1           root  mem       REG              253,1     20032     401603 /usr/lib64/libuuid.so.1.3.0
systemd       1           root  mem       REG              253,1    252704     401631 /usr/lib64/libblkid.so.1.1.0

每一列表示的含义分别是:

COMMAD: 命令
PID:进程id
TID:线程id
USER:用户
FD:文件描述符,比如:cwd当前工作目录;txt程序代码;0标准输入;1标准输出;2标准错误
TYPE:node类型,比如:sock即socket;DIR目录;IPv4等。
DEVICE:磁盘名
SIZE/OFF:文件大小
NODE:文件标识
NAME:文件名称

-a other-options

表示and(并且的关系)后面需跟至少1个option选项,默认是option选项的并集,加上-a后,取的是交集

-p {pid}

列出进程id为{pid}的所有文件

-d [fd][^fd]

列出所有fd列满足条件(包含或不包含[^])的文件。
比如列出不是txt类型的文件 -d ^txt。(txt表示程序代码,二进制文件或共享库)

-D {dir}

列出目录{dir}下打开的文件

+D {dir}

递归列出目录{dir}下打开的文件

-i [46][protocol][@hostname|hostaddr][:service|port]

列出满足条件的文件(与网络相关)

-u [user][^user]

列出用户打开的文件,比如 -u ^root,表示列出非root用户打开的文件

-n

显示时禁止转换成host名称,即显示ip。

-c {command}

显示通过{command}执行的进程所打开的文件

用法示例

判断端口是否处于监听状态

[~]# lsof -i :30200
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    7970 root  264u  IPv4 73771077      0t0  TCP *:30200 (LISTEN)

使用netstat -nlp | grep :30200命令也能达到同样效果。

列出进程在访问的已删除文件

[~]# lsof +L1
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NLINK   NODE NAME
systemd-j  346 root  txt    REG  253,1   278808     0 397790 /usr/lib/systemd/systemd-journald;58a43c2a (deleted)
systemd-l  468 root  txt    REG  253,1   584560     0 397448 /usr/lib/systemd/systemd-logind;58a43c2a (deleted)
java      3374 root    4r   REG  253,1   526844     0 403168 /mnt/deploy/slave.jar (deleted)

+L[number], 会列出链接数量比number小的文件,所以+L1表示链接数量小于1,也就是没有链接的文件。

列出文件占用情况

lsof /dev/random:列出哪些进程在使用/dev/random(用于产生随机数)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的...
    jerrik阅读 399评论 0 1
  • 如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个专业的 Linu...
    七寸知架构阅读 11,025评论 1 71
  • lsof简介 lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何...
    壹人城阅读 302评论 0 0
  • linux系统性能监视命令,经过百度谷歌,加上各渠道获得,查找到相关命令汇集,望能学有所收获 ...
    _王子_阅读 1,426评论 3 13
  • 我昨天度过了非常戏剧化的一天,用搞笑的方式说是要被自己蠢哭,哭一地鸡毛的生活。 等了几个小时的汽车,又热又累,拖一...
    夏天有雨cjy阅读 211评论 0 0