基本方法

Linux查看端口进程的方法与实用技巧

| 命令 | | 示例 |

|-|-|-|

| `lsof -i :端口号` | 使用 `lsof`(list open files)命令列出打开指定端口的进程 | `sudo lsof -i :8080` |

| `netstat -tlnp | grep 端口号` | 使用 `netstat` 命令查看指定端口的进程 | `sudo netstat -tlnp | grep 8080` |

| `ss -tlnp | grep 端口号` | 使用 `ss`(socket statistics)命令查看指定端口的进程 | `sudo ss -tlnp | grep 8080` |

| `fuser 端口号/tcp` | 使用 `fuser` 命令查看指定端口的进程 | `sudo fuser 8080/tcp` |

| `ps -ef | grep 进程名` | 使用 `ps` 命令结合 `grep` 查找指定进程的详细信息 | `sudo ps -ef | grep nginx` |

| `ls -l /proc/$(sudo lsof -t -i:端口号) | grep exe` | 使用 `/proc` 文件系统查看指定端口的进程 | `sudo ls -l /proc/$(sudo lsof -t -i:8080) | grep exe` |

高级技巧

Linux查看端口进程的方法与实用技巧

1. 使用 `nmap` 进行端口扫描

  • `nmap`(Network Mapper)是一个强大的网络扫描工具,可以用来发现目标主机上开放的端口以及运行在这些端口上的服务。
  • 安装:在大多数Linux发行版中,可以使用包管理器安装 `nmap`,例如在Ubuntu上:
  • bash

    sudo apt-get update

    sudo apt-get install nmap

  • 基本使用:
  • bash

    nmap <目标IP>

  • 扫描特定端口范围:
  • bash

    nmap -p 22,80,443 <目标IP>

  • 扫描特定协议端口(如TCP):
  • bash

    nmap -p T:22,80,443 <目标IP>

  • 扫描所有端口:
  • bash

    nmap -p

  • <目标IP>
  • 2. 使用 `iptables` 或 `firewalld` 进行端口监控和安全设置

  • `iptables` 和 `firewalld` 是Linux系统中常用的防火墙工具,可以用来限制或允许特定端口的通信。
  • 使用 `iptables` 设置规则:
  • bash

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

    sudo iptables -A INPUT -j DROP

  • 使用 `firewalld` 开启特定端口:
  • bash

    sudo firewall-cmd --permanent --add-port=22/tcp

    sudo firewall-cmd --permanent --add-port=80/tcp

    sudo firewall-cmd --permanent --add-port=443/tcp

    sudo firewall-cmd --reload

    实际应用案例

    1. 检查Web服务器端口

  • 假设你正在运行一个Web服务器,并且想要检查HTTP(80端口)和HTTPS(443端口)是否被正确监听。
  • 使用 `netstat` 命令:
  • bash

    sudo netstat -tlnp | grep 80

    sudo netstat -tlnp | grep 443

  • 使用 `ss` 命令:
  • bash

    sudo ss -tlnp | grep 80

    sudo ss -tlnp | grep 443

    2. 查找并终止占用端口的进程

  • 如果你发现某个端口被不明进程占用,可以先使用上述命令找到进程ID(PID),然后使用 `kill` 命令终止该进程。
  • 例如,找到占用8080端口的进程并终止:
  • bash

    sudo lsof -i :8080

    假设PID为12345

    sudo kill -9 12345

    3. 使用脚本自动化查找端口对应的进程PID

  • 可以编写一个脚本来自动化查找端口对应的进程PID,例如以下是一个简单的Bash脚本:
  • bash

    !/bin/bash

    if [ -z "$1" ]; then

    echo "Usage: $0

    exit 1

    fi

    PORT=$1

    NETSTAT_RESULT=$(sudo netstat -tunlp | grep $PORT | awk '{print $7}' | cut -d'/' -f1)

    LSOF_RESULT=$(sudo lsof -i :$PORT | awk '{print $2}')

    SS_RESULT=$(sudo ss -ltnp | grep $PORT | awk '{print $6}' | cut -d',' -f2 | cut -d'=' -f2)

    echo "Port $PORT corresponds to the following PIDs:

    echo "netstat: $NETSTAT_RESULT

    echo "lsof: $LSOF_RESULT

    echo "ss: $SS_RESULT

  • 将上述脚本保存为 `find_port_pid.sh`,并赋予执行权限:
  • bash

    chmod +x find_port_pid.sh

  • 运行脚本查找80端口对应的进程PID:
  • bash

    /find_port_pid.sh 80

    通过上述方法和技巧,你可以有效地查看和管理Linux系统中的端口进程,这对于系统监控、故障排除以及安全审计都非常重要。