菜鸟笔记
提升您的技术认知

linux查询某个端口被占用的方法-ag真人游戏

address already in use这个提示,想必大家遇到过,怎么能快速找到问题并解决呢?下面有几种姿势可以了解一下.

在对网络连接或特定于应用程序的问题进行故障排除时,首先要检查的事情之一应该是系统上实际使用了哪些端口,以及哪个应用程序正在侦听特定的端口。

本文介绍了如何使用命令找出哪些服务正在侦听哪些端口。该说明适用于所有基于linux和unix的操作系统,例如macos。

什么是监听端口

网络端口由其编号,关联的ip地址和通信协议(例如tcp或udp)的类型标识。

侦听端口是应用程序或进程在其上侦听的网络端口,充当通信端点。

每个监听端口都可以使用防火墙打开或关闭(过滤)。一般而言,开放端口是一个网络端口,它接受来自远程位置的传入数据包。

你不能让两个服务监听同一ip地址上的同一端口。

例如,如果你正在运行一个监听端口80和443的apache web服务器,并且尝试安装nginx ,则后者将无法启动,因为http和https端口是已经在使用中。

1:命令ss

检查监听端口

ss是新的netstat。它缺少netstat的某些功能,但是公开了更多的tcp状态,并且速度稍快。命令选项基本相同,因此从netstat到ss的转换并不困难。

要使用ss获取所有监听端口的列表,请输入:

ss -ntl

[root@app1812365 ~]# ss -ntl |grep 9090
listen     0      128         :::9090                    :::*                  

2:命令netstat

netstat是一个命令行工具,可以提供有关网络连接的信息。

要列出所有正在侦听的tcp或udp端口,包括使用端口的服务和套接字状态,请使用以下命令:

netstat -tunlp

此命令中使用的选项具有以下含义:

  • -t -显示tcp端口。
  • -u -显示udp端口。
  • -n -显示数字地址而不是解析主机。
  • -l -仅显示监听端口。
  • -p -显示侦听器进程的pid和名称。仅当你以root用户或 sudo 用户身份运行命令时,才会显示此信息。
[root@app1812365 ~]# netstat -tanlp |grep 9090
tcp6       0      0 :::9090                 :::*                    listen      60886/./sniper        

3:lsof

检查监听端口

lsof是功能强大的命令行应用程序,可提供有关进程打开的文件的信息。

在linux中,所有内容都是文件。你可以将套接字视为写入网络的文件。

[root@app1812365 ~]# lsof -i:9090
command   pid user   fd   type    device size/off node name
sniper  60886 root   34u  ipv6 937287521      0t0  tcp *:websm (listen)

使用的选项如下:

  • -n-不要将端口号转换为端口名称。
  • -p -不解析主机名,显示数字地址。
[root@app1812365 ~]# lsof -np -itcp -stcp:listen
command     pid    user   fd   type    device size/off node name
systemd       1    root   34u  ipv4   1551535      0t0  tcp *:111 (listen)
systemd       1    root   36u  ipv6   1551537      0t0  tcp *:111 (listen)
rpc.statd  8892 rpcuser    9u  ipv4   1552017      0t0  tcp *:48169 (listen)
rpc.statd  8892 rpcuser   11u  ipv6   1552025      0t0  tcp *:33526 (listen)
rpcbind   17251     rpc    4u  ipv4   1551535      0t0  tcp *:111 (listen)
rpcbind   17251     rpc    6u  ipv6   1551537      0t0  tcp *:111 (listen)
rpc.mount 29903    root    8u  ipv4 443337633      0t0  tcp *:892 (listen)
rpc.mount 29903    root   10u  ipv6 443338326      0t0  tcp *:892 (listen)
gov_defen 35507    root   56u  ipv4 782876729      0t0  tcp *:5555 (listen)
sshd      47817    root    8u  ipv6 943206101      0t0  tcp [::1]:6010 (listen)
sshd      47817    root    9u  ipv4 943206102      0t0  tcp 127.0.0.1:6010 (listen)
sshd      49890    root    3u  ipv4  82447384      0t0  tcp *:22 (listen)
sshd      49890    root    4u  ipv6  82447386      0t0  tcp *:22 (listen)
sniper    60886    root   34u  ipv6 937287521      0t0  tcp *:9090 (listen)
java      64932     ekp   43u  ipv4 916306241      0t0  tcp *:8080 (listen)
java      64932     ekp   44u  ipv4 916306242      0t0  tcp *:8009 (listen)
java      64932     ekp   46u  ipv4 916310218      0t0  tcp 127.0.0.1:8005 (listen)
java      64932     ekp  486u  ipv4 916308389      0t0  tcp *:7800 (listen)
[root@app1812365 ~]# lsof -np -itcp:9090 -stcp:listen
command   pid user   fd   type    device size/off node name
sniper  60886 root   34u  ipv6 937287521      0t0  tcp *:9090 (listen)
[root@app1812365 ~]# lsof -np -itcp:9090             
command   pid user   fd   type    device size/off node name
sniper  60886 root   34u  ipv6 937287521      0t0  tcp *:9090 (listen)

4:fuser

fuser命令和lsof正好相反,是查看某个文件被哪个进程占用的。linux中,万物皆文件,所以可以查看普通文件、套接字文件、文件系统。而套接字文件就包含了端口号。比如查看9090端口。

每个进程号后面都跟随一个字母,该字母指示进程如何使用文件。

  • c:指示进程的工作目录。
  • e:指示该文件为进程的可执行文件(即进程由该文件拉起)。
  • f:指示该文件被进程打开,默认情况下f字符不显示。
  • f:指示该文件被进程打开进行写入,默认情况下f字符不显示。
  • r:指示该目录为进程的根目录
  • m:指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存。

语法

fuser [选项] [参数]
选项
-a:显示命令行中指定的所有文件;
-k:杀死访问指定文件的所有进程;
-i:杀死进程前需要用户进行确认;
-l:列出所有已知信号名;
-m:指定一个被加载的文件系统或一个被加载的块设备;
-n:选择不同的名称空间;
-u:在每个进程后显示所属的用户名。
参数

文件:可以是文件名或者tcp、udp端口号。

root@ubuntu-n1:~# fuser 10050/tcp -v
                     用户     进程号 权限   命令
10050/tcp:           zabbix      765 f.... zabbix_agentd
                     zabbix      767 f.... zabbix_agentd
                     zabbix      768 f.... zabbix_agentd
                     zabbix      769 f.... zabbix_agentd
                     zabbix      770 f.... zabbix_agentd
                     zabbix      771 f.... zabbix_agentd                  

5:nmap

nmap默认总是会扫描端口,要扫描本机端口,很方便。

root@ubuntu-n1:~# nmap localhost
starting nmap 7.60 ( https://nmap.org ) at 2022-05-13 11:23 cst
nmap scan report for localhost (127.0.0.1)
host is up (0.0000030s latency).
other addresses for localhost (not scanned): ::1
not shown: 995 closed ports
port     state service
22/tcp   open  ssh
80/tcp   open  http
111/tcp  open  rpcbind
2049/tcp open  nfs
3306/tcp open  mysql
nmap done: 1 ip address (1 host up) scanned in 1.67 seconds
root@ubuntu-n1:~# nmap  -v localhost
starting nmap 7.60 ( https://nmap.org ) at 2022-05-13 11:22 cst
initiating syn stealth scan at 11:22
scanning localhost (127.0.0.1) [1000 ports]
discovered open port 3306/tcp on 127.0.0.1
discovered open port 80/tcp on 127.0.0.1
discovered open port 22/tcp on 127.0.0.1
discovered open port 111/tcp on 127.0.0.1
discovered open port 2049/tcp on 127.0.0.1
completed syn stealth scan at 11:22, 1.58s elapsed (1000 total ports)
nmap scan report for localhost (127.0.0.1)
host is up (0.0000030s latency).
other addresses for localhost (not scanned): ::1
not shown: 995 closed ports
port     state service
22/tcp   open  ssh
80/tcp   open  http
111/tcp  open  rpcbind
2049/tcp open  nfs
3306/tcp open  mysql
read data files from: /usr/bin/../share/nmap
nmap done: 1 ip address (1 host up) scanned in 1.68 seconds
           raw packets sent: 1061 (46.684kb) | rcvd: 2127 (89.344kb)
网站地图