zoukankan      html  css  js  c++  java
  • lsof 命令简介

    losf 命令可以列出某个进程打开的所有文件信息。打开的文件可能是普通的文件,目录,NFS文件,块文件,字符文件,共享库,常规管道,明明管道,符号链接,Socket流,网络Socket,UNIX域Socket,以及其它更多。
    1 列出系统上所有打开的文件:
    [root@rac1 mysql]# lsof | more
    COMMAND     PID      USER   FD      TYPE             DEVICE       SIZE       NODE NAME
    init          1      root  cwd       DIR                8,3       4096          2 /
    init          1      root  rtd       DIR                8,3       4096          2 /
    init          1      root  txt       REG                8,3      43496   17727785 /sbin/init
     
    2 查看谁在使用指定的文件
    [root@rac1 ~]# lsof /tmp/mysql.sock                            
    COMMAND   PID  USER   FD   TYPE             DEVICE SIZE     NODE NAME
    mysqld  24319 mysql   16u  unix 0xffff8100918a8c00      44743909 /tmp/mysql.sock
     
    3 递归查看指定目录下所有打开的文件
    [root@rac1 ~]#  lsof +D /opt/mysql/  
    COMMAND   PID  USER   FD   TYPE DEVICE       SIZE     NODE NAME
    mysqld  24319 mysql  cwd    DIR    8,3       4096 19824642 /opt/mysql/data
    mysqld  24319 mysql    3u   REG    8,3        152 19824646 /opt/mysql/data/mysql-log-bin.index
    mysqld  24319 mysql    4uW  REG    8,3 4875878400 20283611 /opt/mysql/data/ibdata1
    mysqld  24319 mysql    9uW  REG    8,3    5242880 20283612 /opt/mysql/data/ib_logfile0
    mysqld  24319 mysql   10uW  REG    8,3    5242880 20283613 /opt/mysql/data/ib_logfile1
    mysqld  24319 mysql   12w   REG    8,3      12957 19824652 /opt/mysql/data/slow_query.log
     
    4 查看指定用户打开的所有文件
    [root@rac1 ~]# lsof -u oracle
    COMMAND    PID   USER   FD   TYPE             DEVICE     SIZE     NODE NAME
    nmz       3211 oracle  cwd    DIR                8,3     4096 10813466 /home/oracle
    nmz       3211 oracle  rtd    DIR                8,3     4096        2 /
    nmz       3211 oracle  txt    REG                8,3   673908 19398913 /opt/rac/oracle/11.2.0/rac/ccr/bin/nmz
    nmz       3211 oracle  mem    REG                8,3   125736  2820762 /lib/ld-2.5.so
    nmz       3211 oracle  mem    REG                8,3  1606808  2818065 /lib/libc-2.5.so
    nmz       3211 oracle    3uW  REG                8,3        0 19398727 /opt/rac/oracle/11.2.0/rac/ccr/hosts/rac1/log/sched.lock
    nmz       3211 oracle    4w   REG                8,3      853 19398726 /opt/rac/oracle/11.2.0/rac/ccr/hosts/rac1/log/sched.log
    nmz       3211 oracle    5r   REG                8,3    16896 20906832 /opt/rac/oracle/11.2.0/rac/ccr/mesg/nmzus.msb
    注意:^符号,它执行取反操作 lsof -u ^oracle 表示除oracle 之外的用户打开的文件
    5 查看某个程序打开的所有文件
    -c选项限定只列出以apache开头的进程打开的文件:
    root@rac1 shell]# lsof -c mysql
    COMMAND   PID  USER   FD   TYPE             DEVICE       SIZE     NODE NAME
    mysqld  24319 mysql  cwd    DIR                8,3       4096 19824642 /opt/mysql/data
    mysqld  24319 mysql  rtd    DIR                8,3       4096        2 /
    mysqld  24319 mysql  txt    REG                8,3   45648978 23429121 /usr/sbin/mysqld
    mysqld  24319 mysql  mem    REG                8,3     139416 21201203 /lib64/ld-2.5.so
    mysqld  24319 mysql  mem    REG                8,3    1713160 21201204 /lib64/libc-2.5.so
    mysqld  24319 mysql  mem    REG                8,3      23360 21201206 /lib64/libdl-2.5.so
    6 查看某个用户与某个程序打开的文件
    lsof -u username -c 进程名    是或的关系,表示所有由某个用户或某个进程打开的文件
    lsof -a -u username -c 进程名 是与的关系 
    7 查看所有由某个PID对应的进程打开的文件
      使用 -p 参数来过滤输出
    [root@rac1 ~]# lsof  -p 1
    COMMAND PID USER   FD   TYPE DEVICE    SIZE     NODE NAME
    init      1 root  cwd    DIR    8,3    4096        2 /
    init      1 root  rtd    DIR    8,3    4096        2 /
    init      1 root  txt    REG    8,3   43496 17727785 /sbin/init
    init      1 root  mem    REG    8,3  139416 21201203 /lib64/ld-2.5.so
    init      1 root  mem    REG    8,3 1713160 21201204 /lib64/libc-2.5.so
    init      1 root  mem    REG    8,3   23360 21201206 /lib64/libdl-2.5.so
    init      1 root  mem    REG    8,3   95464 21201216 /lib64/libselinux.so.1
    init      1 root  mem    REG    8,3  247528 21201215 /lib64/libsepol.so.1
    init      1 root   10u  FIFO   0,17             1477 /dev/initctl
    8 查看网络连接
    -i 参数列出所有打开了网络套接字(TCP和UDP)的进程
     a 查看tcp 连接
     b 查看udp 连接
     c 找到使用某个端口的进程
       # lsof -i :3306
       :3306和-i选项组合可以让lsof列出占用TCP或UDP的25端口的进程。
     
     d 找到使用某个udp端口号的进程
       # lsof -i udp:53
     e 可以找到使用某个tcp端口的进程:
       # lsof -i tcp:80
     f 找到某个用户的所有网络连接
       # lsof -a -u mysql -i
       [root@rac1 ~]# lsof -a -u mysql -i
       COMMAND   PID  USER   FD   TYPE   DEVICE SIZE NODE NAME
       mysqld  24319 mysql   11u  IPv6 48586515       TCP rac1:mysql->rac1:39045 (ESTABLISHED)
       mysqld  24319 mysql   14u  IPv6 44743908       TCP *:mysql (LISTEN)
     
    9 列出所有NFS(网络文件系统)文件
       # lsof -N
       这个参数很好记,-N就对应NFS。
     
    10 列出所有对应某个组id的进程
       # lsof -g 1234
       进程组用来来逻辑上对进程进行分组,这个例子查找所有PGID为1234的进程打开的文件。
    11 列出所有与某个描述符关联的文件
       # lsof -d 2   会列出所有以描述符2打开的文件。
       可以为描述符指定一个范围:
       # lsof -d 0-2 会列出所有描述符为0,1,2的文件。
       -d选项还支持其它很多特殊值,下面的命令列出所有内存映射文件:
       # lsof -d mem
       txt则列出所有加载在内存中并正在执行的进程:
       # lsof -d txt
    12 输出使用某些资源的进程pid
       # lsof -t -i
       -t选项输出进程的PID,你可以将它和-i选项组合输出使用某个端口的进程的PID,下面的命令将会杀掉所有使用网络的进程:
       # kill -9 `lsof -t -i`
    13  循环列出文件
      # lsof -r 1
       -r选项让lsof可以循环列出文件直到被中断,参数1的意思是每秒钟重复打印一次,这个选项最好同某个范围比较小的查询组合使用,比如用来监测网络活动:
      # lsof -r 1 -u john -i -a
  • 相关阅读:
    webpack-cli解决办法
    说说DBA职责和目标
    h5做的app和原生app的区别
    安装windows系统的installutil
    简化委托调用
    DirectShow .Net 实现视频
    DirectShowNet 使用摄像头录像+录音
    DirectShowLib directshownet 视频
    中华人民共和国网络安全法
    C#+ html 实现类似QQ聊天界面的气泡效果
  • 原文地址:https://www.cnblogs.com/l10n/p/7528491.html
Copyright © 2011-2022 走看看