在 Linux 系统中列出所有被占用的端口以及对应的程序:
一 列出被使用的端口
1. netstat 是一个非常实用的工具,用于显示网络连接、路由表、接口统计等信息。要查看所有被占用的端口及其对应的程序,可以使用:
netstat -tulnpe
-t 选项表示显示 TCP 连接
-u 选项表示显示 UDP 连接
-l 选项表示仅显示监听中的端口
-n 选项表示以数字形式显示地址和端口号
-p 选项表示显示进程标识符和程序名称,此选项需要 root 权限
-e 选项显示扩展信息,例如 uid 等
注意:在一些最新版本的 Linux 发行版中,netstat 可能不是预装的。可以通过安装 net-tools 包来获取它。
2. ss 可以作为 netstat 的替代品。ss 命令的执行效率比 netstat 更高,特别是在系统打开了大量连接时。要查看所有被占用的端口及其对应的程序,可以使用:
ss -tulnpe
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 0.0.0.0:59552 0.0.0.0:* uid:115 ino:55562 sk:1
3. lsof(list open files)是一个列出当前系统打开文件的工具。由于在 UNIX 和 Linux 中一切皆文件,网络连接也被视为文件,所以可以使用 lsof 来查看被占用的端口。要查看所有被占用的端口及其对应的程序,可以使用:
lsof -i -P -n
-i 选项表示显示网络连接
-P 选项表示不解析端口名称(显示端口号)
-n 选项表示以 IP 地址显示,不解析主机名
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1861 ze 136u IPv6 44351 0t0 TCP *:8080 (LISTEN)
二 如何进一步查看详细的进程信息
1.如何根据pid查看详细的程序信息
ps -f -p PID
ls /proc/PID
ps -f -p PID
2.如何根据 inode(ino)编号查看详细的程序信息
sudo find /proc/ -type l -lname 'socket:[1013887]' 2>/dev/null
执行该命令后,如果找到了匹配的符号链接,输出将类似于:
/proc/12345/fd/3
这意味着进程 12345 拥有一个文件描述符,指向 inode 为 1013887 的套接字。可以通过查看 /proc/12345 目录下的信息(如 cmdline、status 文件)来获取有关该进程的更多详细信息:
cat /proc/12345/cmdlinecat /proc/12345/status
cmdline 文件包含了启动进程时使用的命令行参数,而 status 文件提供了进程的状态信息,包括它的 PID、PPID(父进程ID)、运行状态等。
3.如何根据 socket 编号通常在 ss 命令的输出中看到,格式如 sk:8编号查看详细的程序信息
sudo ss -tulnpe | grep 'sk:您的socket编号'