PRF:20180924 How To Find Out Which Port Number A Process Is Using In Linux.md

@HankChow
This commit is contained in:
Xingyu.Wang 2018-10-02 12:38:53 +08:00
parent cd0fb1713d
commit 815d5423ed

View File

@ -1,22 +1,22 @@
如何在 Linux 中查看进程占用的端口号
======
对于 Linux 系统管理员来说,清楚某个服务是否正确地绑定或监听某个端口,是至关重要的。如果你需要处理端口相关的问题,这篇文章可能会对你有用。
端口是 Linux 系统上特定进程之间逻辑连接的标识,包括物理端口和软件端口。由于 Linux 操作系统是一个软件,因此本文只讨论软件端口。软件端口始终与主机的 IP 地址和相关的通信协议相关联,因此端口常用于区分应用程序。大部分涉及到网络的服务都必须打开一个套接字来监听传入的网络请求,而每个服务都使用一个独立的套接字。
**推荐阅读:**
**(#)** [在 Linux 上查看进程 ID 的 4 种方法][1]
**(#)** [在 Linux 上终止进程的 3 种方法][2]
套接字是和 IP 地址软件端口和协议结合起来使用的而端口号对传输控制协议Transmission Control Protocol, TCP和 用户数据报协议User Datagram Protocol, UDP协议都适用TCP 和 UDP 都可以使用0到65535之间的端口号进行通信。
- [在 Linux 上查看进程 ID 的 4 种方法][1]
- [在 Linux 上终止进程的 3 种方法][2]
套接字是和 IP 地址、软件端口和协议结合起来使用的而端口号对传输控制协议TCP和用户数据报协议UDP协议都适用TCP 和 UDP 都可以使用 0 到 65535 之间的端口号进行通信。
以下是端口分配类别:
* `0-1023:` 常用端口和系统端口
* `1024-49151:` 软件的注册端口
* `49152-65535:` 动态端口或私有端口
* 0 - 1023 常用端口和系统端口
* 1024 - 49151 软件的注册端口
* 49152 - 65535 动态端口或私有端口
在 Linux 上的 `/etc/services` 文件可以查看到更多关于保留端口的信息。
@ -74,29 +74,25 @@ telnet 23/udp
# 24 - private mail system
lmtp 24/tcp # LMTP Mail Delivery
lmtp 24/udp # LMTP Mail Delivery
```
可以使用以下六种方法查看端口信息。
* `ss:` ss 可以用于转储套接字统计信息。
* `netstat:` netstat 可以显示打开的套接字列表。
* `lsof:` lsof 可以列出打开的文件。
* `fuser:` fuser 可以列出那些打开了文件的进程的进程 ID。
* `nmap:` nmap 是网络检测工具和端口扫描程序。
* `systemctl:` systemctl 是 systemd 系统的控制管理器和服务管理器。
* `ss`:可以用于转储套接字统计信息。
* `netstat`:可以显示打开的套接字列表。
* `lsof`:可以列出打开的文件。
* `fuser`:可以列出那些打开了文件的进程的进程 ID。
* `nmap`:是网络检测工具和端口扫描程序。
* `systemctl`:是 systemd 系统的控制管理器和服务管理器。
以下我们将找出 `sshd` 守护进程所使用的端口号。
### 方法1使用 ss 命令
### 方法 1使用 ss 命令
`ss` 一般用于转储套接字统计信息。它能够输出类似于 `netstat` 输出的信息,但它可以比其它工具显示更多的 TCP 信息和状态信息。
它还可以显示所有类型的套接字统计信息,包括 PACKET、TCP、UDP、DCCP、RAW、Unix 域等。
```
# ss -tnlp | grep ssh
LISTEN 0 128 *:22 *:* users:(("sshd",pid=997,fd=3))
@ -111,7 +107,7 @@ LISTEN 0 128 *:22 *:* users:(("sshd",pid=997,fd=3))
LISTEN 0 128 :::22 :::* users:(("sshd",pid=997,fd=4))
```
### 方法2使用 netstat 命令
### 方法 2使用 netstat 命令
`netstat` 能够显示网络连接、路由表、接口统计信息、伪装连接以及多播成员。
@ -131,7 +127,7 @@ tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1208/sshd
tcp6 0 0 :::22 :::* LISTEN 1208/sshd
```
### 方法3使用 lsof 命令
### 方法 3使用 lsof 命令
`lsof` 能够列出打开的文件,并列出系统上被进程打开的文件的相关信息。
@ -153,7 +149,7 @@ sshd 1208 root 4u IPv6 20921 0t0 TCP *:ssh (LISTEN)
sshd 11592 root 3u IPv4 27744 0t0 TCP vps.2daygeek.com:ssh->103.5.134.167:49902 (ESTABLISHED)
```
### 方法4使用 fuser 命令
### 方法 4使用 fuser 命令
`fuser` 工具会将本地系统上打开了文件的进程的进程 ID 显示在标准输出中。
@ -165,7 +161,7 @@ sshd 11592 root 3u IPv4 27744 0t0 TCP vps.2daygeek.com:ssh->103.5.134.167:49902
root 49339 F.... sshd
```
### 方法5使用 nmap 命令
### 方法 5使用 nmap 命令
`nmap`“Network Mapper”是一款用于网络检测和安全审计的开源工具。它最初用于对大型网络进行快速扫描但它对于单个主机的扫描也有很好的表现。
@ -185,13 +181,14 @@ Service detection performed. Please report any incorrect results at http://nmap.
Nmap done: 1 IP address (1 host up) scanned in 0.44 seconds
```
### 方法6使用 systemctl 命令
### 方法 6使用 systemctl 命令
`systemctl` 是 systemd 系统的控制管理器和服务管理器。它取代了旧的 SysV init 系统管理,目前大多数现代 Linux 操作系统都采用了 systemd。
`systemctl` 是 systemd 系统的控制管理器和服务管理器。它取代了旧的 SysV 初始化系统管理,目前大多数现代 Linux 操作系统都采用了 systemd。
**推荐阅读:**
**(#)** [chkservice Linux 终端上的 systemd 单元管理工具][3]
**(#)** [如何查看 Linux 系统上正在运行的服务][4]
- [chkservice Linux 终端上的 systemd 单元管理工具][3]
- [如何查看 Linux 系统上正在运行的服务][4]
```
# systemctl status sshd
@ -258,7 +255,7 @@ via: https://www.2daygeek.com/how-to-find-out-which-port-number-a-process-is-usi
作者:[Prakash Subramanian][a]
选题:[lujun9972](https://github.com/lujun9972)
译者:[HankChow](https://github.com/HankChow)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出