在Linux系统中,查看端口状态是常用操作,主要可通过netstat、ss和lsof命令实现,netstat -tulpn可查看TCP/UDP端口监听状态及进程ID,适合传统环境;ss -tulpn作为netstat的升级版,查询速度更快,功能更全面;lsof -i:端口号则能精准定位指定端口对应的进程,若需查看已连接端口,可搭配-a参数显示所有连接,或结合grep过滤特定端口,注意部分命令需root权限执行,确保操作符合系统安全规范,这些方法能快速定位端口占用情况,便于排查网络服务问题。
在Linux系统中,端口号是网络通信的重要标识,无论是排查服务异常、解决端口冲突,还是确认应用监听状态,都需要掌握查看端口的方法,本文将详细介绍如何在Linux系统中查看“自己的端口号”——即当前用户进程占用的端口,或系统上所有端口的使用情况,帮助大家快速定位问题。
什么是“自己的端口号”?
自己的端口号”指两类情况:
- 当前用户启动的进程占用的端口:比如自己运行的服务、脚本或应用所监听的端口;
- 系统上所有端口的使用情况:包括其他用户进程占用的端口,需结合权限和进程信息判断是否与“自己”相关。
下文将覆盖这两类场景,提供多种实用命令。

常用命令及方法
方法1:使用netstat命令(传统工具,兼容性好)
netstat是Linux系统查看网络连接、端口状态的经典工具,虽然部分新系统已默认不安装,但仍可通过sudo apt install net-tools(Ubuntu/Debian)或sudo yum install net-tools(CentOS/RHEL)安装。
核心参数说明:
-t:显示TCP端口;-u:显示UDP端口;-l:仅显示监听(LISTEN)状态的端口;-n:以数字形式显示地址和端口(不解析域名,提高速度);-p:显示占用端口的进程ID(PID)和名称(需root权限)。
实用示例:
(1)查看当前用户的所有监听端口
netstat -tuln
输出示例:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
Local Address列即为本地监听的地址和端口(如3306、22);State为LISTEN表示端口处于监听状态,等待连接。
(2)查看当前用户进程占用的所有端口(含监听和已连接)
netstat -anp | grep $(whoami)
$(whoami)获取当前用户名,grep过滤出属于该用户的进程;-a显示所有连接状态(包括监听、已连接、TIME_WAIT等)。
(3)查看特定端口是否被占用(如8080端口)
netstat -tuln | grep 8080
若输出包含8080端口,则表示已被占用。
方法2:使用ss命令(推荐,高效替代netstat)
ss是iproute2工具包的一部分,默认安装在大多数现代Linux系统中(如Ubuntu 18.04+、CentOS 7+),相比netstat,ss在查询大量连接时速度更快,功能也更全面。
核心参数说明:
-t:TCP端口;-u:UDP端口;-l:仅监听端口;-n:数字形式;-p:显示进程信息(需root权限);-4:仅IPv4;-6:仅IPv6。
实用示例:
(1)查看所有监听端口(推荐常用)
ss -tuln
输出与netstat -tuln类似,但格式更简洁,速度更快。
(2)查看当前用户进程占用的端口
ss -tupn | grep $(whoami)
-t/-u分别指定TCP/UDP,-p显示进程,$(whoami)过滤当前用户。
(3)查看端口对应的进程(需root权限)
sudo ss -tulnp | grep 8080
输出示例:
tcp LISTEN 0 511 0.0.0.0:8080 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
users:后括号内为进程名称(如nginx)和PID(如1234),明确占用端口的进程。
方法3:使用lsof命令(精确查找端口与文件的关联)
lsof(list open files)用于列出系统打开的文件,在Linux中,一切皆文件,网络端口也被视为“文件”,因此可通过lsof精准定位端口对应的进程。
核心参数说明:
-i:指定网络地址(如-i :8080表示查看8080端口);-P:不解析端口号为服务名(如8080不显示为http-alt);-n:不解析IP地址为域名;-u:指定用户(如-u $(whoami))。
实用示例:
(1)查看当前用户的所有网络端口
lsof -i -u $(whoami)
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 12345 0t0 TCP *:8080 (LISTEN)
node 5678 myuser 3u IPv6 12346 0t0 TCP [::]:3000 (LISTEN)
COMMAND为进程名,PID为进程ID,NAME为监听的地址和端口。
(2)查看特定端口(如8080)的占用情况
lsof -i :8080
若端口未被占用,则无输出;否则会显示占用该端口的进程信息。
(3)查看当前用户的所有监听端口
lsof -i -u $(whoami) | grep LISTEN
通过grep LISTEN过滤出仅监听状态的端口。
方法4:结合ps与grep(通过进程反查端口)
如果已知进程名或PID,可通过ps查看进程信息,再结合netstat或ss反查其占用的端口。
示例:
(1)查看当前用户的所有进程
ps -ef | grep $(whoami)
输出示例:
myuser 1234 1000 0 10:30 pts/0 00:00:10 nginx: master process
myuser 5678 1234 0 10:31 pts/0 00:00:05 nginx: worker process
(2)查看特定进程(如PID=1234)占用的端口
ss -tupn | grep 1234
或
netstat -tupn | grep 1234
输出将显示该进程的所有网络连接及端口。
进阶技巧:端口状态解析
查看端口时,State(状态)字段是关键,常见状态及含义如下:
LISTEN:端口处于监听状态,等待客户端连接(如Web服务、数据库);ESTABLISHED:端口已建立连接,正在通信(如浏览器访问网站后的状态);TIME_WAIT:连接已关闭,但等待足够时间确保对方收到断开请求(常见于高频短连接);CLOSED:端口未使用。
常见问题与解决方案
提示“Permission denied”怎么办?
查看其他用户进程的端口或-p参数显示进程信息时,需要root权限:
sudo ss -tulnp
或
sudo lsof -i :8080
如何快速确认端口是否被占用?
结合ss和grep,直接过滤目标端口:
ss -tuln | grep -w 8080
-w确保精确匹配(避免匹配8080端口外的80801等)。
如何查看所有端口的使用情况(包括其他用户)?
sudo ss -tulnp # 显示所有监听端口及进程
或
sudo netstat -anp # 显示所有连接及进程
| 命令 | 优点 | 适用场景 |
|---|---|---|
ss |
高效、功能全面,现代系统默认 | 日常查看端口、快速定位进程 |
netstat |
兼容性好,老旧系统常用 | 传统系统或需要兼容性的场景 |
lsof |
精确查找端口与文件的关联 | 通过端口反查进程、或通过进程查端口 |
ps + grep |
通过进程信息反查端口 | 已知进程名/PID时快速定位 |
日常使用中,推荐优先使用ss命令,结合-tulnp和grep即可高效完成“查看自己端口”的需求,若需更精细的端口-进程关联分析,lsof是不二之选,掌握这些命令,能让你在Linux端口管理中游刃有余!


