Linux | 如何根据进程号查询服务的端口号

文章介绍了Linux命令`ps-ef|grepnacos`用于查找含有nacos关键字的进程详情,以及`netstat-nap|grep13712`用于追踪进程号13712的网络连接。这些命令在系统管理和故障排查中很有用。

ps -ef | grep nacos

ps -ef | grep nacos 命令是用于查找系统中所有包含 "nacos" 关键字的进程。这个命令的含义如下:

ps: 这是一个用于显示当前正在运行的进程的命令。

-ef: 这两个选项一起使用,表示显示所有进程的详细信息。

-e 选项表示显示所有进程,而 -f 选项表示显示完整的进程信息。

|: 这是管道操作符,用于将 ps -ef 命令的输出传递给 grep 命令的输入。

grep nacos: grep 命令用于在文本中搜索包含指定关键字 "nacos" 的行。

在这种情况下,它将筛选出包含 "nacos" 的进程信息行。

运行这个命令后,你将看到包含 "nacos" 关键字的进程的详细信息列表,包括它们的进程号(PID)、用户、状态等。

这对于查找与 "nacos" 相关的进程非常有用,可以用于监视、管理或终止这些进程。

netstat -nap | grep 13712

netstat -nap | grep 13712 命令用于查找包含进程号(PID)为 13712 的网络连接信息。这个命令的含义如下:

netstat -nap: 这部分命令用于显示当前系统上的网络连接信息,包括与每个连接相关的进程信息。

-n 选项表示以数字形式显示地址和端口号

而 -a 选项表示显示所有的网络连接,包括监听和非监听状态的连接

-p 选项表示显示与每个网络连接关联的进程信息

|: 这是管道操作符,用于将 netstat -nap 命令的输出传递给 grep 命令的输入。

grep 13712: grep 命令用于在文本中搜索包含指定关键字 "13712" 的行。在这种情况下,它将筛选出包含进程号 "13712" 的网络连接信息行。

运行这个命令后,你将看到包含进程号 "13712" 的网络连接的相关信息,包括本地和远程地址、协议、状态等。

这可以帮助你查找特定进程的网络连接信息,以了解它们的状态和属性。

<think>我们正在讨论的是如何在Linux系统中根据进程查询端口号根据用户的问题和提供的引用内容,我们可以总结几种方法。 引用[1]提到使用netstat命令结合grep来根据进程ID(PID)查找端口号。 引用[2]提到使用lsof命令根据端口号查找进程名,但反过来也可以根据进程名或PID查找端口号。 引用[3]虽然主要是根据端口号查询进程路径,但其中也涉及到通过端口号找到进程ID,然后进一步找到进程路径。 用户的问题是:根据进程查询端口号。这里“进程”可以指进程名(process name)或者进程ID(PID)。因此,我们提供两种方式: 1. 已知进程ID(PID),查询该进程占用的端口号。 2. 已知进程名(process name),查询该进程占用的端口号。 我们将分步骤说明: 方法一:使用进程ID(PID)查询端口号 步骤: 1. 首先获取进程ID(如果已知则跳过)。如果不知道进程ID,可以通过进程名获取,比如使用`pgrep`命令。 2. 使用`netstat`或`lsof`命令根据PID查看端口号。 方法二:使用进程名查询端口号 步骤: 1. 通过进程名获取进程ID(使用`pgrep`或`pidof`)。 2. 然后使用方法一的命令查看端口号。 具体命令如下: 一、根据进程ID(PID)查询端口号 1. 使用`netstat`命令: ```bash netstat -tulnp | grep <PID> ``` 其中: - `-t` 显示TCP端口 - `-u` 显示UDP端口 - `-l` 仅显示监听端口(可选) - `-n` 拒绝显示别名,能显示数字的全部转化成数字(重要,否则可能不显示PID) - `-p` 显示进程标识符和程序名称 示例:查找PID为1234的进程占用的端口 ```bash netstat -tulnp | grep 1234 ``` 2. 使用`lsof`命令: ```bash lsof -Pan -p <PID> -i ``` 或者 ```bash lsof -i | grep <PID> ``` 其中: - `-P` 禁止将端口号转换成端口名 - `-a` 表示AND(与条件) - `-n` 禁止将主机名转换成主机地址(与上面netstat的-n类似) - `-p <PID>` 指定进程ID - `-i` 显示网络连接 示例:查找PID为1234的进程占用的端口 ```bash lsof -Pan -p 1234 -i ``` 二、根据进程名查询端口号 1. 首先根据进程名获取PID: ```bash pgrep <进程名> ``` 或者 ```bash pidof <进程名> ``` 示例:获取nginx的进程ID ```bash pgrep nginx ``` 或者 ```bash pidof nginx ``` 2. 然后使用上述方法一中的任意一个命令,将获取到的PID代入。 或者一步到位(使用进程名直接过滤): 1. 使用`netstat`: ```bash netstat -tulnp | grep <进程名> ``` 注意:如果进程名较长,可能只匹配到部分,可以使用完整的进程名或者使用正则表达式。 2. 使用`lsof`: ```bash lsof -i | grep <进程名> ``` 三、获取进程监听的端口(LISTEN状态) 如果只关心监听端口(通常是服务进程),可以在netstat命令中加上`-l`选项,或者在lsof命令中通过状态过滤。 四、获取进程的所有网络连接(包括已建立连接的端口) 如果不加`-l`,则netstat会显示所有连接(包括监听和已建立的连接)。lsof不加过滤也会显示所有。 注意事项: 1. 执行这些命令可能需要root权限,特别是查看其他用户进程的时候。 2. 如果进程没有打开任何网络端口,则不会有输。 示例:查找nginx进程的端口号 方法1(使用netstat): ```bash netstat -tulnp | grep nginx ``` 方法2(使用lsof): ```bash lsof -i | grep nginx ``` 示例输(netstat): ``` tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx: master ``` 示例输(lsof): ``` nginx 1234 root 6u IPv4 12345 0t0 TCP *:http (LISTEN) ``` 从输中,我们可以看到nginx进程(PID为1234)在80端口监听。 引用说明: 根据引用[1]和引用[2]的方法,我们综合了使用netstat和lsof两种工具来实现查询[^1][^2]。 另外,如果我们想根据端口号查询进程的路径(如引用[3]),可以使用: ```bash lsof -i :<端口号> ``` 然后通过PID找到进程的路径,例如: ```bash ls -l /proc/<PID>/exe ``` 但用户的问题是根据进程查端口号,所以我们不展开。 生成相关问题: 1. 如何根据端口号查询占用它的进程? 2. 如何查看进程监听的端口号? 3. 如何查看进程的详细网络连接情况? 注意:在回答中,我们按照用户要求,使用中文,并且没有使用数学公式,所以不需要使用$...$或$$...$$。 但是,如果用户的问题涉及到数学表达式,我们会按照要求处理。这里不需要,所以我们直接写命令。 </think> ### Linux根据进程查询端口号的方法 在 Linux 系统中,可以通过以下方法根据进程名称或进程 ID(PID)查询其占用的端口号: --- #### 方法 1:使用 `netstat` 命令(推荐) ```bash # 通过进程名称查询(如查询 nginx 的端口) netstat -tulnp | grep <进程名> # 通过进程 ID 查询(如查询 PID 为 1234 的端口) netstat -tulnp | grep 1234 ``` **参数说明**: - `-t`:显示 TCP 端口 - `-u`:显示 UDP 端口 - `-l`:仅显示监听端口 - `-n`:显示数字格式(不解析主机名和服务名) - `-p`:显示进程信息(需 sudo 权限) **示例输**: ``` tcp6 0 0 :::8080 :::* LISTEN 1234/java ``` 表示 PID 为 `1234` 的 Java 进程占用 `8080` 端口[^1]。 --- #### 方法 2:使用 `lsof` 命令 ```bash # 通过进程名称查询 lsof -i | grep <进程名> # 通过进程 ID 查询 lsof -i -P -n -p <PID> ``` **参数说明**: - `-i`:显示网络连接 - `-P`:禁用端口名转换(显示数字端口) - `-n`:禁用主机名转换 - `-p`:指定进程 ID **示例输**: ``` java 1234 user 42u IPv6 54321 TCP *:8080 (LISTEN) ``` 表示 PID `1234` 监听 `8080` 端口。 --- #### 方法 3:通过 `/proc` 文件系统 ```bash # 通过 PID 查询端口号 ls -l /proc/<PID>/fd | grep socket: # 解析 socket 信息(需 root 权限) sudo ss -n -p | grep <PID> ``` **示例**: ```bash ls -l /proc/1234/fd | grep socket: lrwx------ 1 user user 64 Jun 10 10:00 42 -> socket:[1234567] sudo ss -n -p | grep 1234567 tcp LISTEN 0 50 *:8080 *:* users:(("java",pid=1234,fd=42)) ``` --- #### 方法对比总结 | **方法** | **优点** | **限制** | |----------------|-----------------------------|-----------------------------| | `netstat` | 兼容性好,系统自带 | 需 `grep` 过滤 | | `lsof` |简洁,支持更多过滤条件 | 部分系统需安装(`yum install lsof`) | | `/proc` + `ss` | 底层直接查看文件描述符 | 操作较复杂,需 root 权限 | --- ### 常见问题解答 **Q1:如果不知道进程名或 PID 怎么办?** → 用 `ps aux | grep <关键词>` 查找进程信息,再使用上述方法。 **Q2:为什么需要 sudo 权限?** → 访问其他用户的进程信息需特权(如 `netstat -p` 或 `lsof -i`)。 **Q3:如何查看进程监听的 UDP 端口?** → 在 `netstat` 中加 `-u` 参数: ```bash netstat -ulnp | grep <进程名> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值