Linux 环境使用 lsof 命令查询端口占用

摘要:
最近发现一个Linux环境中比较有用的查看系统网络连接的命令lsof,这里记录下lsof命令的网络连接查询功能。下面通过使用实例来说明lsof命令的使用方式,记住与网络相关的参数需要通过-i参数进行指定。这里通过命令实例的形式介绍下lsof的简单用法。更多的细节可以参考lsof的manpage,通过命令行命令manlsof查看。lsof-a-uroot-i@127.0.0.1//列举所有属于root用户的与127.0.0.1相关的连接其他笔者主要通过lsof命令来查询某个特定的端口是否正在被占用,并通过kill命令终止当前占用特定端口的进程。

最近发现一个 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 参数进行指定。

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 -9 12345     //终止进程 12345,实际为向进程 12345 发送 SIGKILL 信号

免责声明:文章转载自《Linux 环境使用 lsof 命令查询端口占用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JavaScript 字符串json格式化oracle11g dataguard部署指南下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux系统统计某一字符出现的次数

1、创建测试数据 [root@linuxprobe test]# cat a.txt e i j s e f s d g e d d 2、利用grep命令统计字符e出现的次数 [root@linuxprobe test]# grep -o "e" a.txt | wc -l 3 3、同时统计e和d出现的次数 [root@linuxprobe test]#...

交叉编译工具链(详解)

交叉编译工具链  1、嵌入式开发模型-交叉开发     在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。                在宿主机执行编译的流程如下:                   2、交叉编译工具链详解 参考: http://www.crifan.com/fi...

deppin Linux下安装docker

首先楼主用的是deppin15.11   docker 简介:Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。         思想:              1.集装箱             2.标准化             3.隔离           核...

windows10的子系统linux(wsl)

[] windows10的子系统linux(wsl) 概述 安装wsl 开启、关闭wsl 解决wsl内存超标问题 安装node的方法 备份、还原wsl 1 安装方法 适用于 Linux 的 Windows 子系统安装指南 (Windows 10) (micro) 注意一点:步骤 5中 官网给的 wsl --set-default-version 2...

在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)

大家都知道高并发分布式组件的重要性,而且如果要进大厂,这些技术不可或缺。但这些技术的学习难点在于,大多数项目里的分布式组件,都是搭建在Linux系统上,在自己的windows机器上很难搭建开发环境,如果无法搭建开发环境,就无法实际操练,而单靠背理论题,是无法通过面试的。 比如搭建Redis环境,或许可以在windows上下载个版本,但这个版本不是最新的,而...

Linux磁盘修复命令----fsck

使用fsck命令修复磁盘时 一定要进入单用户模式去修复语 法fsck.ext4[必要参数][选择参数][设备代号]功 能fsck.ext4 命令:针对ext4型文件系统进行检测参数 -a 非互交模式,自动修复 -c 检查是否存在有损坏的区块。 -C<反叙述器> fsck.ext3命令会把全部的执行过程,都交由其逆向叙述,便于监控程序 -d 详细...