netstat
, ss
, 和 lsof
是用于在 Linux 和类 Unix 操作系统中检查网络连接和监听端口的三个常用工具。虽然它们都能用来查看特定的端口(如 3306),但它们有各自的特点和语法。以下是这些命令在使用时的区别和细节:
netstat -tlnp | grep 3306
netstat
:一个网络实用程序,用于显示网络连接、路由表、接口统计、伪装连接和多播成员资格等信息。-t
:显示 TCP 连接。-l
:显示监听套接字(服务器套接字)。-n
:以数字形式显示地址和端口号(而不是尝试解析主机名)。-p
:显示监听套接字的进程 ID 和名称。| grep 3306
:通过管道将输出传递给grep
命令,以过滤出包含 “3306” 的行。
这个命令将显示所有在 TCP 端口 3306 上监听的连接及其相关的进程信息。
ss -ltnp | grep 3306
ss
:ss
是netstat
的现代替代品,用于显示套接字统计信息。它比netstat
更快,因为它直接在内核中获取信息而不是通过net-tools
。-l
:显示监听套接字。-t
:显示 TCP 套接字。-n
:以数字形式显示地址和端口号。-p
:显示监听套接字的进程 ID 和名称(需要 root 权限)。| grep 3306
:通过管道将输出传递给grep
命令,以过滤出包含 “3306” 的行。
这个命令同样显示所有在 TCP 端口 3306 上监听的连接及其相关的进程信息,但 ss
通常比 netstat
更快。
lsof -i :端口号
lsof
:lsof
是 “list open files” 的缩写,但在这个上下文中,它指的是列出所有打开的网络文件(即套接字)。-i
:选择网络文件。:端口号
:指定要查找的端口号,例如:3306
。
由于 lsof
没有直接提供过滤 TCP 或 UDP 的选项(尽管可以通过 -P
禁用端口号到服务名的转换,但这不是过滤),因此它会列出所有在该端口上监听或连接的文件(包括 TCP 和 UDP),以及相关的进程信息。不过,你可以进一步通过 grep
过滤出特定的协议(如 TCP)或特定的进程信息。
总结
netstat -tlnp | grep 3306
和ss -ltnp | grep 3306
都用于显示特定 TCP 端口(如 3306)上的监听连接及其相关进程信息。ss
通常比netstat
更快。lsof -i :3306
用于列出在该端口上监听或连接的所有网络文件(包括 TCP 和 UDP),并显示相关的进程信息。你可能需要进一步过滤输出以获取特定信息。
在实际使用中,选择哪个工具取决于你的具体需求和对系统性能的影响。