博主之前在工作上曾经碰到一个很尴尬的情况,当时博主在进行服务器上一个服务的重装工作,结果博主没有将服务完全暂停就执行了rm -rf操作,导致了这个服务的进程一直运行在系统中,然后就会不停的建立该服务的文件夹,导致想要重装的服务重装不上,十分的尴尬。也就是当时接触了lsof这个命令让我解决了这个尴尬的问题(lsof救我狗命),所以特在此专门记录一些lsof的使用方法,来供以后进行查阅。特此也感谢西华子的Linux 命令神器:lsof一文。

一.命令的作用
lsof全称为:list openfile(列出打开文件),这里我们结合Unix系统的特点——Unix中的一切(包括网络套接口)都是文件,就可以知道这个命令的强大,通过执行这个命令,我们可以查询进程所使用的文件,甚至可以查看进程监听的端口等。
二.常用的命令参数
1.基本参数
默认不加任何参数的情况下,lsof可以显示系统中所有active进程打开的所有文件,我们也可以使用lsof来查看某个文件正在被哪些进程所使用。
例如:lsof /bin/bash

①.-a
默认情况下,lsof后续跟多个参数,参数之间是“或”的关系,跟上-a后,关系就变为“且”的关系
②.-h
获得帮助
③.-t
仅获取进程ID

④.-i <条件>
输出符合条件与网络相关的文件
⑤.+d <目录>/+D <目录>
输出目录及目录下被打开的文件和目录(不递归)/(递归)

⑥.-p <进程号>
输出指定 PID 的进程所打开的文件

⑦. -c <进程名>
输出指定进程名所打开的文件

⑧. -r [t]
lsof -r 的意思是控制系统不断执行lsof命令,-r 后边可以跟周期性执行的时间,缺省是15秒。可以用于观察一个进程的端口使用情况
lsof -c xray -r 5
2. -i:获取网络相关信息
lsof可以和netstat一样,列出系统当前所有网络的相关信息
常用语法:lsof -i 4/6 [protocol] [@hostname|hostadd][:service|:port]
① -i 4/6
使用-i 4/6可以选择获取ipv4/ipv6的流量

② -i [protocol]
-i参数后边,可以跟上想要查找的协议
lsof -i UDP/TCP

③ -i [@hostname]
使用@host来显示指定到指定主机的连接,这对于你在检查是否开放连接到网络中或互联网上某个指定主机的连接时十分有用。
例如:
lsof -i @140.240.22.119

④ -i [:port]
-i后边跟上:port可以查看当前系统占用该端口的程序是什么
lsof -i :10837

⑤ -i -sTCP:LISTEN/ESTABLISHED
找出正在等候/已连接的端口
lsof -i -sTCP:LISTEN/ESTABLESGHED

3.获取系统用户信息
① -u <用户名>
使用-u显示某个指定用户所使用的文件
lsof -u <用户名>
②.配合kill命令杀死某个用户开启的所有东西
kill -9 'lsof -t -u laoju'
Comments NOTHING