在Ubuntu系统中,我们经常需要查看网络连接状态、排查网络问题或了解系统当前的网络活动情况。这时候,netstat命令就派上用场了。它是一个强大的网络工具,能够显示系统中所有的网络连接、路由表、接口统计信息以及监听端口等关键网络数据。
一、安装netstat(如果需要)¶
Ubuntu默认可能未安装netstat命令,这是因为它属于net-tools工具包。如果执行netstat时提示“command not found”,请先安装:
sudo apt update && sudo apt install net-tools
二、netstat的基本语法¶
netstat的基本语法格式为:
netstat [选项] [协议/参数]
常用选项(参数)及作用如下,每个选项配合简单示例说明:
三、常用参数及示例¶
1. 显示所有连接(-a)¶
- 作用:显示系统中所有的网络连接(包括TCP、UDP,已建立的、监听的、关闭的等)。
- 命令:
netstat -a - 说明:输出内容较多,包含本地地址、外部地址、连接状态等。例如:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 52 192.168.1.100:22 192.168.1.101:54321 ESTABLISHED
2. 只显示TCP协议连接(-t)¶
- 作用:过滤出所有TCP协议的连接(忽略UDP等其他协议)。
- 命令:
netstat -t - 说明:如果需要查看监听状态的TCP连接,可结合
-l(监听)参数:netstat -tl
3. 只显示UDP协议连接(-u)¶
- 作用:仅显示UDP协议的连接(常用于排查DNS、NTP等UDP服务)。
- 命令:
netstat -u
4. 以数字格式显示端口和IP(-n)¶
- 作用:不将IP地址解析为主机名,端口号解析为服务名(避免DNS查询延迟,输出更简洁)。
- 命令:
netstat -tn(TCP)或netstat -un(UDP) - 说明:例如,端口80会显示为“80”而非“http”,IP地址显示为数字格式(如192.168.1.100)。
5. 显示进程ID和程序名(-p)¶
- 作用:查看哪个进程占用了特定端口或连接(需
root权限)。 - 命令:
sudo netstat -tunp - 说明:普通用户执行时可能无法显示进程信息,需加
sudo。例如:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1234/mysqld
这里1234/mysqld表示MySQL进程(PID 1234)占用了3306端口。
6. 显示路由表(-r)¶
- 作用:查看系统的路由规则(决定数据包如何转发到其他网络)。
- 命令:
netstat -r - 说明:常用于排查网络不通或路由配置问题。
四、实际应用场景¶
1. 快速查看所有监听端口¶
想知道系统哪些端口在监听连接(如Web服务的80端口、SSH的22端口):
sudo netstat -tuln
-t:TCP监听端口-u:UDP监听端口-l:监听状态-n:数字格式- 输出示例:
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
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.1:53 0.0.0.0:*
2. 排查特定端口是否被占用¶
例如,想确认80端口是否被Web服务器(如Apache)占用:
sudo netstat -tulnp | grep 80
- 说明:若输出包含
LISTEN状态,则说明80端口正被某个服务监听。
3. 查看已建立的TCP连接¶
想了解当前系统与外部设备的已建立连接(如远程服务器的SSH连接):
netstat -tan | grep ESTABLISHED
-a:所有连接-n:数字格式grep ESTABLISHED:只显示已建立连接状态
五、总结¶
netstat是Ubuntu网络管理的基础工具,掌握以下核心用法即可应对大部分场景:
- 查看监听端口:sudo netstat -tuln
- 查看端口占用进程:sudo netstat -tunp
- 查看TCP连接:netstat -tan(或结合grep过滤状态)
- 查看路由表:netstat -r
如果需要更详细的网络分析,还可以结合grep、awk等工具进一步筛选数据。记住,使用-p参数时需加sudo获取进程信息,这是排查端口占用问题的关键步骤。