在Linux系统中,查看端口占用情况是网络管理和故障排查的重要任务。以下是一些常用的命令及其使用方法:
1. netstat命令
`netstat`命令用于显示网络连接、路由表和网络接口信息等。
| 命令 | 说明 |
|-|-|
| `netstat -tuln` | 显示所有正在监听的TCP和UDP端口及其关联进程ID |
| `netstat -anp | grep LISTEN` | 显示当前所有正在监听的端口及其使用情况,使用`grep`过滤出`LISTEN`的端口 |
| `netstat -tunlp | grep 端口号` | 查看指定端口的情况,例如查看8000端口:`netstat -tunlp | grep 8000` |
| `netstat -ntlp` | 查看当前所有TCP端口 |
| `netstat -ntulp | grep 80` | 查看所有80端口使用情况 |
| `netstat -ntulp | grep 3306` | 查看所有3306端口使用情况 |
2. lsof命令
`lsof`(list open files)命令可以列出当前系统中打开的所有文件,包括网络端口。
| 命令 | 说明 |
|-|-|
| `lsof -i:端口号` | 查看指定端口的占用情况,例如查看8000端口:`lsof -i:8000` |
| `lsof -i -P -n | grep LISTEN` | 列出所有正在监听的端口及其使用情况,使用`grep`过滤出`LISTEN`的端口 |
| `lsof -i:8080` | 查看8080端口占用 |
| `lsof abc.txt` | 显示开启文件`abc.txt`的进程 |
| `lsof -c abc` | 显示`abc`进程现在打开的文件 |
| `lsof -c -p 1234` | 列出进程号为1234的进程所打开的文件 |
| `lsof -g gid` | 显示归属`gid`的进程情况 |
| `lsof +d /usr/local/` | 显示目录下被进程开启的文件 |
| `lsof +D /usr/local/` | 同上,但是会搜索目录下的目录,时间较长 |
| `lsof -d 4` | 显示使用`fd`为4的进程 |
3. ss命令
`ss`(Socket Statistics)命令是`netstat`的升级版,能呈现出更具体的网络内部信息。
| 命令 | 说明 |
|-|-|
| `ss -tuln` | 显示所有TCP和UDP端口的监听情况 |
| `ss -tlnp | grep 端口号` | 查看指定端口的占用情况,例如查看80端口:`ss -tlnp | grep 80` |
4. nmap命令
`nmap`命令是一款优秀高效的网络探测工具,用于精细了解远端计算机port配置。
| 命令 | 说明 |
|-|-|
| `nmap IP地址` | 针对特定主机进行port特性查阅,其中`IP地址`为要扫描的主机的IP地址 |
5. telnet命令
`telnet`命令是一个直观易懂的文本型网络协议,用于核查远程主机指定端口的开放状态。
| 命令 | 说明 |
|-|-|
| `telnet IP地址端口号` | 其中`IP地址`为测试主机的IP地址,`端口号`为要测试的端口号 |
6. iptables命令
`iptables`是Linux系统的防火墙工具,也可用于查看端口特性。
| 命令 | 说明 |
|-|-|
| `iptables -L -n` | 浏览主机所有已打开的端口 |
7. /proc文件系统
在Linux系统中,`/proc`文件系统是虚拟文件系统,可以用于查看当前正在运行的所有端口信息。
| 命令 | 说明 |
|-|-|
| `cat /proc/net/tcp` | 查看设备上所有已经建立的TCP连接的详细情况 |
| `cat /proc/net/udp` | 查看设备上所有已经建立的UDP连接的详细情况 |
8. fuser命令
`fuser`命令可以查看某个文件或目录被哪个进程占用,也可用于查询网络端口。
| 命令 | 说明 |
|-|-|
| `fuser 端口号/tcp` | 查看指定端口被哪个进程占用,其中`端口号`为需要查询的端口号 |
9. ps命令
`ps`命令可以列出当前系统中正在运行的进程信息,结合`grep`命令可查找某个进程打开的网络端口。
| 命令 | 说明 |
|-|-|
| `ps -ef | grep 进程名` | 查找指定进程名的进程,其中`进程名`为需要查询的进程名 |
10. 使用/proc文件系统查看端口对应的进程
| 命令 | 说明 |
|-|-|
| `sudo ls -l /proc/$(sudo lsof -t -i:端口号) | grep exe` | 查看某个端口被哪个进程占用,其中`端口号`为需要查询的端口号 |