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
转载于:https://www.cnblogs.com/liang545621/p/7528491.html
总结
- 上一篇: easyUI创建人员树
- 下一篇: react redux学习之路