世界杯预选赛亚洲区_高达世界杯 - fzxzyy.com

linux下查看各个进程占用的端口和对应的应用名称

- 世界杯奖杯叫什么

在Linux系统中,查看进程占用的端口及其对应的应用名称有以下几种常用方法:

1. 使用 ss命令(推荐,现代系统)

# 查看所有TCP端口和进程名

ss -tlnp

# 查看所有TCP/UDP端口和进程名

ss -tunlp

# 格式化输出,更易读

ss -tlnp | awk 'BEGIN {printf "%-20s %-10s %-20s %-15s\n", "应用名称", "PID", "协议", "端口"}

NR>1 {split($7, a, ","); gsub(/pid=|,.*/, "", a[2]); printf "%-20s %-10s %-20s %-15s\n", a[1], a[2], "TCP", $4}'

# 只显示应用名、PID、端口

ss -tunlp | grep -Eo '[0-9]+\".*\"' | sed 's/pid=//g' | sed 's/,.*\"//g'

2. 使用 netstat命令

# 查看所有端口和进程名

netstat -tunlp

# 美化输出格式

netstat -tunlp | awk 'NR<2{print $0;next} {print $1, $4, $6, $7}' | column -t

# 按端口排序

netstat -tunlp | sort -n -k 4

3. 使用 lsof命令(功能最全)

# 查看所有TCP端口和进程

lsof -iTCP -sTCP:LISTEN -P -n

# 查看所有端口和进程

lsof -i -P -n | grep LISTEN

# 格式化输出

lsof -i -P -n | grep LISTEN | awk '{printf "%-20s %-10s %-15s %-20s\n", $1, $2, $8, $9}'

# 查看指定应用的端口

lsof -i -P -n | grep LISTEN | grep 应用名

4. 使用 fuser命令

# 查看指定端口的进程

fuser 80/tcp

fuser 3306/tcp

# 显示详细信息

fuser -v 端口号/tcp

5. 自定义脚本(整合信息)

#!/bin/bash

# 保存为 show_ports.sh

echo "================================================================"

echo "端口占用情况(应用名称 | PID | 协议 | 端口 | 状态)"

echo "================================================================"

# 使用ss命令收集信息

ss -tunlp | while read line; do

if echo "$line" | grep -q "LISTEN"; then

# 提取信息

proto=$(echo $line | awk '{print $1}')

local_addr=$(echo $line | awk '{print $4}')

process_info=$(echo $line | awk '{print $6}')

# 提取端口

port=$(echo $local_addr | awk -F: '{print $NF}')

# 提取进程名和PID

if [[ $process_info =~ \"(.*)\",pid=([0-9]+) ]]; then

proc_name=${BASH_REMATCH[1]}

pid=${BASH_REMATCH[2]}

printf "%-20s %-8s %-8s %-10s %-10s\n" \

"$proc_name" "$pid" "$proto" "$port" "LISTEN"

fi

fi

done

6. 一键查看脚本

#!/bin/bash

# 保存为 port_check.sh

echo "================= 系统端口占用详情 ================="

echo ""

# 检查命令是否存在

command -v ss >/dev/null 2>&1 && use_cmd="ss" || use_cmd="netstat"

if [ "$use_cmd" = "ss" ]; then

echo "使用 ss 命令查看:"

echo "----------------------------------------------------------------"

echo "应用名称 PID 协议 本地地址:端口"

echo "----------------------------------------------------------------"

ss -tlnp | tail -n +2 | while read proto state recvq sendq localaddr peeraddr process; do

if [[ $process =~ \"(.*)\",pid=([0-9]+) ]]; then

printf "%-20s %-10s %-10s %-20s\n" \

"${BASH_REMATCH[1]}" \

"${BASH_REMATCH[2]}" \

"$proto" \

"$localaddr"

fi

done

else

echo "使用 netstat 命令查看:"

echo "----------------------------------------------------------------"

netstat -tunlp | grep LISTEN | while read proto recvq sendq localaddr foreignaddr state pid_program; do

pid=$(echo $pid_program | sed 's/\/.*//')

program=$(echo $pid_program | sed 's/.*\///')

printf "%-20s %-10s %-10s %-20s\n" "$program" "$pid" "$proto" "$localaddr"

done

fi

echo ""

echo "================= 常见服务端口 ================="

echo "端口 服务/应用"

echo "----------------------------------------"

echo "22 SSH"

echo "80 HTTP (Web服务)"

echo "443 HTTPS"

echo "3306 MySQL数据库"

echo "5432 PostgreSQL数据库"

echo "6379 Redis"

echo "8080 HTTP代理/备用Web"

echo "9000 PHP-FPM"

7. 按应用名称过滤

# 查看Nginx相关端口

ss -tlnp | grep nginx

# 或

lsof -i -P -n | grep nginx

# 查看MySQL相关端口

ss -tlnp | grep mysql

# 或

lsof -i:3306

# 查看Docker相关端口

ss -tlnp | grep docker

8. 使用 systemctl查看服务端口

# 查看系统服务的端口

systemctl list-sockets --all

# 查看具体服务的端口

systemctl status 服务名 | grep -i listen

实用技巧

创建别名(添加到 ~/.bashrc)

# 查看端口占用的别名

alias showports="ss -tlnp | awk 'NR==1{print}; NR>1{split(\$6,a,\",\"); print a[1]\" \"\$4}' | column -t"

alias portcheck="echo '应用名称 PID 协议 端口'; ss -tlnp | tail -n +2 | awk '{match(\$6,/\"([^\"]+)\",pid=([0-9]+)/,m); if(m[1]!=\"\") print m[1], m[2], \$1, \$4}' | column -t"

实时监控端口变化

# 每2秒刷新一次

watch -n 2 'ss -tlnp'

输出示例

应用名称 PID 协议 本地地址:端口

nginx 1234 tcp 0.0.0.0:80

mysql 5678 tcp 127.0.0.1:3306

ssh 9012 tcp 0.0.0.0:22

docker-proxy 3456 tcp 127.0.0.1:8080

推荐使用

简单查看:ss -tlnp

详细查看:lsof -i -P -n | grep LISTEN

脚本工具:上面的 port_check.sh

调试排查:结合使用多种命令确保信息准确

快递被别人领取了由谁来赔偿?
揭秘Android设备GPS开启背后的高耗电真相:省电攻略大揭秘!