如何在 Linux 中查看端口或程序占用情况
前言
本期主要介绍了 LINUX 中如何查看某个端口或程序的使用情况,希望对大家有所帮助。
快速使用
netstat 命令(推荐)
netstat
命令可以显示网络连接、路由表和网络接口信息等。也可以使用 netstat
命令查看某个端口被哪个进程占用。
- 工具安装(按需)
yum -y install net-tools
- 参数说明
-a (all)显示所有选项,默认不显示 LISTEN 相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。(重要)
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示进程号和进程名。显示与特定协议相关的状态,常见的协议有 TCP 和 UDP。
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
# LISTEN 和 LISTENING 的状态只有用-a或者-l才能看到
- 具体命令
- 查看指定端口占用情况
netstat -tlnp | grep [端口号|程序]
# or
netstat -anp | grep [端口号|程序]
查看 22
端口
- 查看所有端口占用情况
netstat -utlnp
lsof 命令(推荐)
lsof(list open files) 命令可以列出当前系统中打开的所有文件,包括网络端口。
- 工具安装(按需)
yum -y install lsof
- 具体命令
- 查看指定端口占用情况
lsof -i <条件>:[端口号]
查看 22
端口
名词解释
COMMAND
:进程的名称PID
:进程标识符FD
:文件描述符,应用程序通过文件描述符识别该文件。如:cwd、txt 等TYPE
: 文件类型,如:DIR、REG 等DEVICE
:指定磁盘的名称SIZE
:文件的大小NODE
:索引节点(文件在磁盘上的标识)NAME
:打开文件的确切名称
- 列出系统上被进程打开的文件的相关信息
lsof -i -P | grep [程序]
ps 命令(推荐)
ps 命令可以列出当前系统中正在运行的进程信息。
- 参数说明
a 显示终端上的所有进程,包括其他用户的进程
u 显示进程的归属用户及内存的使用情况
x 显示没有控制终端的进程
-a 显示同一终端下的所有程序
-A 显示所有进程
-e 显示所有进程,等于 “-A”
-f 全格式
- 具体命令
- 查看某个程序进程信息
ps -ef | grep [程序]
# or
ps -aux | grep [程序]
先查看 sshd
进程
再根据 PID 查看端口占用
ps -u root
根据用户过滤进程
ps -aux --sort -pcpu | less
根据 CPU 使用来升序排序
ps -aux --sort -pmem | less
根据用户过滤进程
ps -aux --sort -pcpu,+pmem | head -n 10
查询全前 10 个使用 cpu 和内存最高的应用
ss 命令
ss 命令可以列出当前系统中打开的套接字 (socket) 信息,包括网络端口。
- 具体命令
- 查看指定端口或程序占用情况
ss -tlnp | grep [端口号|程序]
查看 22
端口
查看 sshd
服务程序
fuser 命令
fuser 命令可以查看某个文件或目录被哪个进程占用。对于网络端口,也可以使用 fuser 命令进行查询。
- 具体命令
- 查看指定端口占用情况
fuser -v [端口号]/tcp
查看 22
端口占用情况
nmap 命令
nmap(Network exploration tool and security / port scanner)是功能强大的网络扫描工具,可以扫描单个主机和大型网络,它主要用于安全审核和渗透测试,是端口扫描的首选工具。
- 工具安装(按需)
yum -y install nmap
- 具体命令
- 查看端口占用情况
nmap -p [端口号] [IP地址]
# 查看主机当前开放的端口
nmap localhost
# 查看主机端口(1024-65535)中开放的端口
nmap -p 1024-65535 localhost
查看 22
端口占用情况
- 查看目标主机开放的端口
nmap -PS [IP地址]
# 探测目标主机开放的端口
nmap -PS 192.168.1.1
systemctl 命令
systemctl 是 systemd 系统的控制管理器和服务管理器。它取代了旧的 SysV 初始化系统管理,目前大多数现代 Linux 操作系统都采用了 systemd。
- 具体命令
systemctl status sshd
大部分情况下,以上的输出不会显示进程的实际端口号。这时更建议使用以下这个 journalctl 命令检查日志文件中的详细信息
journalctl | grep -i [程序]
查看 sshd
服务程序