在银河麒麟系统中,可通过lsof、netstat或ss命令反向查询进程监听端口:lsof用sudo lsof -i -P -n -c 进程名;netstat需先ps查PID再sudo netstat -tulnp | grep PID;ss支持sudo ss -tulnp | grep 进程名或结合pgrep精确筛选。

银河麒麟系统中,当你已知某个进程名称(如nginx、java、docker-proxy)但不确定它监听了哪些端口时,需反向从进程查端口,避免盲目扫描全部端口浪费时间。
用lsof根据进程名查所有监听端口
这一步最直接,适合已知进程名但不清楚其绑定端口的场景。
执行命令:sudo lsof -i -P -n -c nginx——其中-c nginx表示只匹配COMMAND列为nginx的进程,【-P -n必须保留,否则DNS解析会导致命令卡住或超时】。
若要查Java进程所有网络连接,把nginx换成java即可:sudo lsof -i -P -n -c java。
输出中NAME列显示*:8080、127.0.0.1:3306等格式,冒号后即为该进程正在使用的端口号。
用ps和netstat组合定位进程对应端口
当lsof不可用或需交叉验证时,此方法更底层、兼容性更强。
第一步:获取目标进程PID
运行ps -ef | grep nginx,从结果中记下第二列的数字(如12345),这就是PID。
第二步:用netstat查该PID占用的端口
执行sudo netstat -tulnp | grep 12345——注意grep后直接跟PID数字,不要加空格或冒号。
如果系统提示command not found,说明net-tools未安装:Debian/Ubuntu系执行sudo apt install net-tools,RHEL/CentOS系执行sudo yum install net-tools。
用ss快速筛选指定进程的端口
ss是现代Linux首选工具,响应快、字段清晰,特别适合在终端快速过一遍。
方法一:直接过滤进程名
运行sudo ss -tulnp | grep nginx,输出中Process字段会显示users:(("nginx",pid=12345,fd=6)),同时Local Address:Port列直接给出端口。
方法二:按PID精确匹配(更稳妥)
先用pgrep nginx拿到PID,再执行sudo ss -tulnp | awk '$7 ~ /'$(pgrep nginx)'/ {print $5}'——这条命令会只打印出该PID监听的Local Address:Port部分,例如*:80或127.0.0.1:9000。

















