在 Linux 系统中,可以使用多种命令来查看进程使用的服务器端口号。以下是一些常见的方法:
ss
(Socket Statistics)命令
参数如下:
-h, --help
:显示帮助信息。-V, --version
:输出版本信息。-n, --numeric
:不解析服务名称。-r, --resolve
:解析主机名。-a, --all
:显示所有套接字(sockets)。-l, --listening
:显示监听状态的套接字(sockets)。-o, --options
:显示计时器信息。-e, --extended
:显示详细的套接字(sockets)信息。-m, --memory
:显示套接字(socket)的内存使用情况。-p, --processes
:显示使用套接字(socket)的进程。-i, --info
:显示 TCP 内部信息。-s, --summary
:显示套接字(socket)使用概况。-4, --ipv4
:仅显示 IPv4 的套接字(sockets)。-6, --ipv6
:仅显示 IPv6 的套接字(sockets)。-0, --packet
:显示 PACKET 套接字(socket)。-t, --tcp
:仅显示 TCP 套接字(sockets)。-u, --udp
:仅显示 UDP 套接字(sockets)。-d, --dccp
:仅显示 DCCP 套接字(sockets)。-w, --raw
:仅显示 RAW 套接字(sockets)。-x, --unix
:仅显示 Unix 套接字(sockets)。-f, --family=FAMILY
:显示指定类型的套接字(sockets),FAMILY 可选类型包括 unix、inet、inet6、link、netlink 等。-A, --query=QUERY, --socket=QUERY
:查看某种类型的套接字,QUERY 可以是all
、inet
、tcp
、udp
、raw
、unix
、packet
、netlink
等,也可以是它们的组合,例如tcp,udp
。-D, --diag=FILE
:将原始 TCP 套接字(sockets)信息转储到文件。-F, --filter=FILE
:从文件中读取过滤信息,用于过滤某种状态的连接,FILTER 的格式为(state TCP-STATE) (EXPRESSION)
。
netstat
命令
参数如下:
-a 或 --all
:显示所有连线中的 Socket。-A<网络类型> 或 --<网络类型>
:列出该网络类型连线中的相关地址。-c 或 --continuous
:持续列出网络状态。-C 或 --cache
:显示路由器配置的快取信息。-e 或 --extend
:显示网络其他相关信息。-F 或 --fib
:显示 FIB。-F 或 --fib
:显示 FIB。-g 或 --groups
:显示多重广播功能群组组员名单。-h 或 --help
:在线帮助。-i 或 --interfaces
:显示网络界面信息表单。-l 或 --listening
:显示监控中的服务器的 Socket。-M 或 --masquerade
:显示伪装的网络连线。-n 或 --numeric
:直接使用 IP 地址,而不通过域名服务器。-N 或 --netlink 或 --symbolic
:显示网络硬件外围设备的符号连接名称。-o 或 --timers
:显示计时器。-p 或 --programs
:显示正在使用 Socket 的程序识别码和程序名称。-r 或 --route
:显示 Routing Table。-s 或 --statistics
:按照每个协议来分类进行统计,默认显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息。-t 或 --tcp
:显示 TCP 传输协议的连线状况。-u 或 --udp
:显示 UDP 传输协议的连线状况。-v 或 --verbose
:显示指令执行过程。-V 或 --version
:显示版本信息。-w 或 --raw
:显示 RAW 传输协议的连线状况。-x 或 --unix
:此参数的效果和指定-A unix
参数相同。--ip 或 --inet
:此参数的效果和指定-A inet
参数相同。
lsof
(list open files)命令
用于查看系统中打开的文件和相关进程信息。以下是一些常见的参数:
-
-a
:表示两个或多个条件都必须满足时才显示结果。例如,lsof -a -u root -i tcp
将列出属于 root 用户且使用 TCP 协议的进程所打开的文件。 -
-c <进程名>
:列出指定进程所打开的文件。 -
-g <GID>
:列出 GID 号进程的详情。 -
-d <文件描述符>
:列出占用该文件描述符的进程。可以指定多个文件描述符,如-d 1 -d 2
。 -
-d <目录>
:列出目录下被打开的文件。 -
+D <目录>
:递归列出目录下被打开的文件,但搜索时间相对较长。 -
-n
:不将 IP 转换为 hostname,默认情况下是转换的。 -
-i <条件>
:列出符合条件的进程。条件的格式通常为<协议>:<端口>
或@<主机名|IP 地址>
,例如-i tcp:80
表示列出使用 TCP 协议且端口为 80 的进程,-i @127.0.0.1
表示列出与本地主机(127.0.0.1)相关的进程。 -
-p <进程号>
:列出指定进程号所打开的文件。 -
-u <用户名>
:列出该用户相关进程所打开的文件。 -
-U
:仅列出系统 socket 文件类型。 -
-h
:显示帮助信息。 -
-v
:显示版本信息。
案例
netstat -tunlp
ss -tunlp
该命令会显示所有的 TCP 和 UDP 连接以及对应的进程信息,包括监听的端口和进程PID。
lsof -i :<port_number>
例如,lsof -i :80
会显示使用 80 端口的进程信息。
查看当前所有python程序建立的连接信息
ss -tunap | grep -E "$(ps -aux | grep python | grep -v 'grep' | awk '{print $2}' | paste -sd '|' -)"
查看当前所有python程序建立服务器信息
ss -tunlp | grep -E "$(ps -aux | grep python | grep -v 'grep' | awk '{print $2}' | paste -sd '|' -)"