Linux环境使⽤lsof命令查询端⼝占⽤
最近发现⼀个 Linux 环境中⽐较有⽤的查看系统⽹络连接的命令 lsof ,这⾥记录下 lsof 命令的⽹络连接查询功能(其主要原理是通过查询与⽹络连接相关的⽂件信息来获取连接信息)。本⽂主要内容来⾃ lsof 命令的 manpage。
lsof 命令
lsof 命令的 -i 参数⽤于指定进⾏查询的⽹络连接的参数,其形式如下所⽰。
lsof -i [46][protocol][@hostname|hostaddr][:service|port] //losf 命令查看⽹络连接的使⽤格式
注意上述参数均为可选参数,其中各个参数的具体解释如下所⽰:
46//4 和 6 分别⽤于指定进⾏查询的 IP 地址的版本,即 -i4 使⽤ IPv4 进⾏查询,⽽ -i6 使⽤ IPv6 进⾏查询,不指定上述参数时,则对所有⽀持的 IP 地址进⾏查询。protocol//协议,⽤于指定进⾏查询的⽹络连接所使⽤的协议,即 TCP 或 UDP
hostname//主机名,⽤于指定查询所有与 hostname 对应⽹络主机名相关的⽹络连接
hostaddr//主机地址,通过 IP 地址形式给出的进⾏查询的地址信息,该地址信息应与前⾯指定的 IP 版本对应
service//服务,⽤于指定查询⽹络连接所⽀持的服务, /etc/services ⽂件中记录所有有效的服务名
port//端⼝,指定查询的连接所使⽤的端⼝
以上参数中,再指定 hostname 或 hostaddr 时必须加上 '@',⽽指定 service 和 port 时则必须加上 ':' .⽤户可以指定多个 service 和 port,只需通过 ',' 进⾏隔开,同时也可以通过 '-' 指定端⼝号范围,如指定 1000 到 2000 端⼝号即为 "1000-2000". 通过执⾏ lsof 命令,⽤户可以查询获得使⽤某个特定服务/端⼝/地址的⽹络连接的信息,包括其 PID 进程号,其执⾏的具体命令和使⽤的协议等。
下⾯通过使⽤实例来说明 lsof 命令的使⽤⽅式,记住与⽹络相关的参数需要通过 -i 参数进⾏指定。
linux在线命令查询平台 1.查询特定端⼝如 5090 端⼝是否被占⽤( 即查看当前是否有连接使⽤ 5090 端⼝ )
lsof -i:5090//查看 5090 端⼝的连接情况
2.查看与 127.0.0.1 相关的 tcp 连接情况
lsof -i tcp@127.0.0.1//显⽰与 127.0.0.1 相关的 tcp 连接的情况
3.查看系统上 https 服务的连接情况
lsof -i :https //显⽰ https 服务相关的连接
实际上,lsof 命令的功能远不⽌于查询⽹络连接。该命令的在 man lsof 中的解释为列举打开的⽂件( list open files ).由于 Linux 环境中普通⽂件( regular file ),流( stream ) 和⽹络⽂件( 包括套接字(socket), ⽹络⽂件系统(NFS)等)均以⽂件的形式处理,故⽽ lsof 可以实现相当强⼤的查询功能。上⾯对 lsof 命令对⽹络连接的查询即主要基于对⽹络⽂件的查询来完成。
这⾥通过命令实例的形式介绍下 lsof 的简单⽤法。更多的细节可以参考 lsof 的 manpage,通过命令⾏命令 man lsof 查看。
1.使⽤ -c string 参数指定列举以 string 作为开始字符的命令所对应的⽂件的信息。下列命令即列举所有以字符 b 作为开始字符的命令所对应的信息。⽤户可以看到系统上存在多个运⾏ bash 命令的进程。
lsof -c b //列举所有执⾏以字符 k 开头的命令( command ) 进程
2.使⽤ -u user 参数指定列举所有⽤户名为 test 或者 root 的相关进程。
lsof -u test,root //列举所有与⽤户 test 相关的⽂件信息
3.在默认情况下,lsof 命令的各个参数之间的关系为或(OR) 运算,也就是说同时指定 -u 和 -c 命令,则 lsof 会返回符合 -u 或 -c 参数的所有结果。⽤户可以通过 -a 参数指定所有的参数使⽤与(AND)运⾏,即同时指定 -a 参数后,lsof 只会返回同时符合所有参数要求的结果。
lsof -a -u root -i @127.0.0.1//列举所有属于 root ⽤户的与 127.0.0.1 相关的连接
其他
笔者主要通过 lsof 命令来查询某个特定的端⼝是否正在被占⽤,并通过 kill 命令终⽌当前占⽤特定端⼝的进程。kill 命令的功能为向某个进程发送⼀个信号( signal ),所有可选的信号编号可通过 kill -L 进⾏查看。想要通过 kill 命令终⽌某个进程,只需向该进程发送 SIGKILL 信号,该信号的编号为 9,故⽽可以通过 kill -9 pid 的命令终⽌ pid 所对应的进程。
kill -L //输出 kill 命令所⽀持的所有的信号
kill -912345//终⽌进程 12345,实际为向进程 12345 发送 SIGKILL 信号
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论