linux中查看端口状态以及是否被占用的相关操作指令(netstat、isof)

linux中查看端口状态

端口是 Linux 系统上特定进程之间逻辑连接的标识,包括物理端口和软件端口。软件端口始终与主机的 IP 地址和相关的通信协议相关联,因此端口常用于区分应用程序。大部分涉及到网络的服务都必须打开一个套接字来监听传入的网络请求,而每个服务都使用一个独立的套接字。

套接字是和 IP 地址、软件端口和协议结合起来使用的,而端口号对传输控制协议(TCP)和用户数据报协议(UDP)协议都适用,TCP 和 UDP 都可以使用 0 到 65535 之间的端口号进行通信。

以下是端口分配类别:

  • 0 - 1023: 常用端口和系统端口
  • 1024 - 49151: 软件的注册端口
  • 49152 - 65535: 动态端口或私有端口

注意:

端口不是独立存在的,它是依附于进程的。某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了。下次若某个进程再次开启,则相应的端口也再次开启。而不要纯粹的理解为关闭掉某个端口,不过可以禁用某个端口。

1、netstat

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
默认情况下,netstat 会列出打开的套接字。如果不指定任何地址族,则会显示所有已配置地址族的活动套接字。

使用方式

netstat [选项] [参数]

命令参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

查看端口使用状态最常用指令

netstat  -anp  |grep   端口号

查看某一端口的连接数量,比如3306端口

netstat -pnt |grep :3306 |wc

1.1、查看服务器上服务和端口

netstat -nultp

该命令是查看当前所有已经使用的端口情况

在这里插入图片描述
netstat -anp | grep 82

查看82端口的使用情况
在这里插入图片描述
可以看出并没有LISTEN那一行,所以就表示没有被占用。此处注意,图中显示的LISTENING并不表示端口被占用,不要和LISTEN混淆哦,查看具体端口时候,必须要看到tcp,端口号,LISTEN那一行,才表示端口被占用了

1.2、查看某个端口是否被占用

=netstat -anp | grep 3306
在这里插入图片描述
主要看监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用,查看具体端口号,只要有如图这一行就表示被占用了。

2、lsof:进程打开文件的相关信息

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。

使用格式

lsof [options] filename

参数说明

-a 指示其它选项之间为与的关系
-c <进程名> 输出指定进程所打开的文件
-d <文件描述符> 列出占用该文件号的进程
+d <目录>  输出目录及目录下被打开的文件和目录(不递归)
+D <目录>  递归输出及目录下被打开的文件和目录
-i <条件>  输出符合条件与网络相关的文件
-n 不解析主机名
-p <进程号> 输出指定 PID 的进程所打开的文件,不解析端口号
-t 只输出 PID
-u 输出指定用户打开的文件
-U 输出打开的 UNIX domain socket 文件
-h 显示帮助信息
-v 显示版本信息

lsof可以查看打开的文件是:

普通文件
目录
网络文件系统的文件
字符或设备文件
(函数)共享库
管道、命名管道
符号链接
网络文件(例如:NFS file、网络socket,unix域名socket)
还有其它类型的文件,等等

输入:lsof

COMMAND     PID   TID    USER   FD      TYPE             DEVICE   SIZE/OFF       NODE NAME
systemd       1          root  cwd       DIR              253,1       4096          2 /
systemd       1          root  rtd       DIR              253,1       4096          2 /
systemd       1          root  txt       REG              253,1    1523568    1053845 /usr/lib/systemd/systemd
systemd       1          root  mem       REG              253,1      20040    1050452 /usr/lib64/libuuid.so.1.3.0
systemd       1          root  mem       REG              253,1     261336    1051899 /usr/lib64/libblkid.so.1.1.0
systemd       1          root  mem       REG              253,1      90664    1050435 /usr/lib64/libz.so.1.2.7
systemd       1          root  mem       REG              253,1     157424    1050447 /usr/lib64/liblzma.so.5.2.2
systemd       1          root  mem       REG              253,1      23968    1050682 /usr/lib64/libcap-ng.so.0.0.0
systemd       1          root  mem       REG              253,1      19888    1050666 /usr/lib64/libattr.so.1.1.0

COMMAND:进程的名称
PID:进程标识符
TID:线程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件,一般有以下取值: 
	cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录
	txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,表示程序的可执行文件
	mem:表示内存映射文件
	0:表示标准输出
	1:表示标准输入
	2:表示标准错误
	u 表示该文件被打开并处于读取/写入模式。
	r 表示只读模式,
	w 表示只写模式
TYPE:文件类型,常见的文件类型有以下几种: 
	DIR:表示目录
	CHR:表示字符类型
	BLK:块设备类型
	UNIX:UNIX域套接字
	FIFO:先进先出(FIFO)队列
	IPv4:网际协议(IP)套接字
DEVICE:指定磁盘的名称
SIZE/OFF:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

在这里插入图片描述

2.1、列出80端口目前打开的文件列表

命令:lsof -i :80

COMMAND     PID  USER   FD   TYPE    DEVICE SIZE/OFF NODE  NAME
nginx      8838  root    8u  IPv4 114512623      0t0  TCP  *:http (LISTEN)
nginx     12886 jelly    8u  IPv4 114512623      0t0  TCP  *:http (LISTEN)
nginx     12887 jelly    8u  IPv4 114512623      0t0  TCP  *:http (LISTEN)

列出指定范围内被打开的 TCP 端口

$ sudo -i TCP:1-1024

在这里插入图片描述

2.2、列出所有的网络连接

命令:lsof -i,选项默认会同时输出 IPv4 和 IPv6 打开的文件:

COMMAND     PID  USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
ntpd        856   ntp   16u  IPv4     13105      0t0  UDP *:ntp 
ntpd        856   ntp   17u  IPv6     13106      0t0  UDP *:ntp 
ntpd        856   ntp   18u  IPv4     13210      0t0  UDP localhost:ntp 
ntpd        856   ntp   19u  IPv4     13211      0t0  UDP jellythink:ntp 
vsftpd     1613  root    3u  IPv6     17867      0t0  TCP *:ftp (LISTEN)
php-fpm    4037 jelly    0u  IPv4  60908335      0t0  TCP localhost:cslistener (LISTEN)
sshd       8503  root    3u  IPv4    197060      0t0  TCP *:50022 (LISTEN)
nginx      8838  root    8u  IPv4 114512623      0t0  TCP *:http (LISTEN)
nginx      8838  root    9u  IPv4 114512624      0t0  TCP *:https (LISTEN)
php-fpm    9059 jelly    0u  IPv4  60908335      0t0  TCP localhost:cslistener (LISTEN)
php-fpm    9137 jelly    0u  IPv4  60908335      0t0  TCP localhost:cslistener (LISTEN)
命令:lsof -i tcp
说明:列出所有的TCP网络连接信息

命令:lsof -i udp
说明:列出所有的UDP网络连接信息

命令:lsof -i tcp:80
说明:列出80端口TCP协议的所有连接信息

命令:lsof -i udp:25
说明:列出25端口UDP协议的所有连接信息

2.3、查看进程打开了某个文件

$ sudo lsof /bin/bash
直接指定文件的名称作为 lsof 的参加就可以查看哪些进程打开了这个文件,下面的命令查询打开了 /bin/bash 文件的进程:

在这里插入图片描述
查看哪些进程打开了某个目录及目录下的文件

1、这里分两种情况,+d 选项不执行递归查询,只查找那些打开了指定目录以及指定目录下文件和目录的进程,比如:

$ sudo lsof +d /var/log

在这里插入图片描述
2、而 +D 选项则会对指定的目录进行递归

$ sudo lsof +D /var/log

在这里插入图片描述
查看某个进程打开的所有文件

ps -p PID
通过 -p 选项并指定进程的 PID 可以输出该进程打开的所有文件。

比如我们想要查看 cron 程序打开的文件,可以先用 ps -C cron 命令查出进程的 PID
在这里插入图片描述
然后把该 PID 传递给 lsof 命令的 -p 选项:

$ sudo lsof -p 1152

在这里插入图片描述

查看指定名称的程序打开的文件
通过 -c 选项可以匹配进程运行的程序(可执行文件)名称。比如我们要查找以字母 cr 开头的程序打开的文件列表:

$ sudo lsof -c cr

在这里插入图片描述

2.4、查看某个用户打开的所有文件

-u 选项可以指定用户名或 user ID,并且和 -c 选项一样,可以通过逗号分隔多个用户名称或 user ID

$ sudo lsof -u syslog

在这里插入图片描述

参考

1、https://www.cnblogs.com/hindy/p/7249234.html
2、https://www.jellythink.com/archives/449
3、https://www.cnblogs.com/sparkdev/p/10271351.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值