在 Linux 系统中,经常需要排除一些运行问题,往往需要知道端口被哪些程序占用,可以通过以下命令查看端口对应的程序和进程:
使用 netstat
sudo netstat -tulnp
• 参数解释:
• -t:显示 TCP 端口。
• -u:显示 UDP 端口。
• -l:仅显示监听中的端口。
• -n:以数字形式显示地址和端口。
• -p:显示端口对应的程序名。
输出效果:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
udp 0 0 0.0.0.0:123 0.0.0.0:* 5678/ntpd
使用 ss(推荐,netstat 的现代替代工具)
sudo ss -tulnp
• 参数同 netstat,功能更强大,性能更高。
输出效果:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
Code language: JavaScript (javascript)
使用 lsof
sudo lsof -i :<端口号>
Code language: HTML, XML (xml)
• 参数解释:
• -i :<端口号>:指定查看的端口号。
示例:
sudo lsof -i :80
Code language: CSS (css)
输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 98765 0t0 TCP *:http (LISTEN)
使用 fuser
sudo fuser -n tcp <端口号>
Code language: HTML, XML (xml)
• 例如:
sudo fuser -n tcp 80
输出:
80/tcp: 1234
Code language: HTTP (http)
• 使用 ps 查看对应 PID 的详细信息:
ps -p 1234 -o pid,user,cmd
写在最后
• 如果需要简洁地监控所有监听的端口及对应程序,ss 是最推荐的工具。
• 如果需要排查具体端口的程序,可以结合 lsof 和 fuser 使用。