1 概述
我们在netstat命令文章中,介绍了通过进程名称或者进程ID来查其监听的端口号。
# 获取进程ID
ps -ef | grep -v sshd
root 29879 1 0 2024 ? 00:00:00 /usr/sbin/sshd -D
# 通过进程ID查监听端口
sudo netstat -tulnp | grep 29879
tcp 0 0 0.0.0.0:10022 0.0.0.0:* LISTEN 29879/sshd
tcp6 0 0 :::10022 :::* LISTEN 29879/sshd
# 通过进程名称查监听端口
sudo netstat -tulnp | grep sshd
tcp 0 0 0.0.0.0:10022 0.0.0.0:* LISTEN 29879/sshd
tcp6 0 0 :::10022 :::* LISTEN 29879/sshd
有时候,我们需要通过端口号,来查看是哪个进程在监听。我们以上面的10022端口为例,来介绍几种方式。
2 netstat
sudo netstat -tulnp | grep 10022
tcp 0 0 0.0.0.0:10022 0.0.0.0:* LISTEN 29879/sshd
tcp6 0 0 :::10022 :::* LISTEN 29879/sshd
3 ss
是另一个用于检查套接字的工具,它是netstat的现代替代品,并且通常更快。此命令不需要root权限,推荐使用。
ss -tulnp | grep 10022
tcp LISTEN 0 128 *:10022 *:* users:(("sshd",pid=29879,fd=3))
tcp LISTEN 0 128 :::10022 :::* users:(("sshd",pid=29879,fd=4))
4 lsof
注意,端口号前面的冒号是必需的,它表明你正在查找的是端口号而不是文件名。此命令需要root权限。
sudo lsof -i :10022
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 21878 root 3u IPv4 916597603 0t0 TCP yiyunjie.bcc-szth.baidu.com:10022->172.31.22.20:39151 (ESTABLISHED)
sshd 23592 root 3u IPv4 573598232 0t0 TCP yiyunjie.bcc-szth.baidu.com:10022->10.227.188.28:54558 (ESTABLISHED)
sshd 29879 root 3u IPv4 466170948 0t0 TCP *:10022 (LISTEN)
sshd 29879 root 4u IPv6 466170950 0t0 TCP *:10022 (LISTEN)
5 fuser
sudo fuser 10022/tcp
10022/tcp: 29879
sudo fuser 10022/udp
ps -ef | grep 29879
root 29879 1 0 2024 ? 00:00:00 /usr/sbin/sshd -D
输出正在监听此端口的进程ID,然后通过进程ID反查进程名称。