Linux命令集锦-个人整理(偏向进程和端口的查询)
# 查看详细日志(替换实际日志路径)
sudo tail -f /var/log/neo4j/debug.log# 检查端口占用
sudo netstat -tuln | grep 7474echo "fs.inotify.max_user_watches=100000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -psudo nano /etc/neo4j/neo4j.confhostname -I # 记录输出的IP(如172.xx.xx.xx)
以下是针对 netstat
、ps aux
和 lsof
在查看端口状态时的核心区别、适用场景及实例分析的详细对比,结合资料中的技术要点进行说明:
一、核心功能与设计目标对比
命令 | 核心功能 | 设计目标 | 是否直接关联端口 |
---|---|---|---|
netstat | 显示网络连接、路由表、接口统计等网络层信息(如TCP/UDP状态、监听端口、进程PID) | 网络状态监控 | ✅ 直接支持 |
lsof | 列出系统所有打开的文件(包括网络套接字、磁盘文件、管道等),可过滤端口关联的进程 | 文件/资源占用分析 | ✅ 直接支持 |
ps aux | 显示当前运行进程的详细信息(CPU/内存占用、启动时间等),不直接关联端口 | 进程状态监控 | ❌ 需间接关联 |
📌 关键区别:
netstat
和lsof
直接关联端口与进程,而ps aux
仅提供进程信息,需结合其他命令关联端口。lsof
的视角更广(所有文件资源),netstat
专注网络连接,ps aux
专注进程状态。
二、命令语法与输出解析(结合实例)
1. netstat
:网络连接与端口的直接关联
# 查看所有TCP监听端口及对应进程名/PID
sudo netstat -tulnp
输出示例:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 5678/postgres
分析:
-tulnp
参数组合:-t
:仅TCP协议 |-u
:UDP协议 |-l
:监听状态 |-n
:禁用DNS解析(显示IP) |-p
:显示进程信息
- 直接关联端口(
:80
、:5432
)与进程(nginx
、postgres
)及PID 。
2. lsof
:通过文件描述符关联端口与进程
# 查看占用80端口的进程详情
sudo lsof -i :80
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 12345 0t0 TCP *:http (LISTEN)
分析:
-i :80
:过滤IPv4/IPv6中端口80的套接字文件- 字段含义:
COMMAND
:进程名 |PID
:进程ID |FD
:文件描述符(6u
=IPv4套接字) |TYPE
:资源类型
- 优势:可查看进程打开的所有资源(如同时监听的多个端口、打开的文件)。
3. ps aux
:仅显示进程状态,无法直接关联端口
# 查看所有进程状态(含CPU/内存占用)
ps aux
输出示例:
USER PID %CPU %MEM COMMAND
root 1234 0.0 1.0 nginx
postgres 5678 0.5 5.2 postgres
分析:
-
无端口信息!需先通过
netstat
/lsof
获取端口对应的PID,再用ps aux | grep <PID>
查看进程详情:# 查找PID 1234的进程资源占用 ps aux | grep 1234
-
适用场景:已知PID后检查进程资源消耗,或批量筛选进程(如
ps aux | grep nginx
)。
三、典型场景与工具选择建议
场景1:快速定位端口占用进程
- 首选工具:
netstat -tulnp | grep <端口>
或lsof -i :<端口>
- 原因:直接输出进程名和PID,效率最高 。
- 实例:
# 检查3306端口占用 sudo netstat -tulnp | grep 3306 # 或 sudo lsof -i :3306
场景2:分析进程打开的所有网络端口
- 首选工具:
lsof -p <PID>
- 原因:列出进程打开的所有文件(含网络套接字)。
- 实例:
# 查看PID 1234打开的所有端口和文件 sudo lsof -p 1234
场景3:监控高资源占用进程的端口
- 组合命令:
# 找出CPU占用前5的进程,再关联其端口 ps aux --sort=-%cpu | head -6 # 获取高负载进程PID lsof -p <高负载PID> | grep "IPv[46]" # 查看该进程的端口
场景4:排查恶意进程的隐蔽端口
-
组合命令:
# 检测异常监听端口 sudo netstat -tulp | grep LISTEN | awk '{print $7}' | sort -u # 交叉验证进程路径(通过PID) ps aux | grep <可疑PID> ls -l /proc/<可疑PID>/exe # 查看进程真实路径
📌 资料显示此方法常用于应急响应 。
四、进阶技巧与常见问题
1. 权限要求差异
命令 | 需root权限场景 | 原因 |
---|---|---|
netstat -p | ✅ 显示其他用户的进程信息 | 保护系统进程隐私 |
lsof -i | ✅ 查看非当前用户的端口占用 | 访问系统级网络套接字 |
ps aux | ⚠️ 仅显示当前用户进程(非root时) | 系统安全策略 |
2. 替代方案:ss
命令
-
背景:
netstat
已逐渐被更高效的ss
(Socket Statistics)取代 。 -
对比优势:
# 查看所有TCP监听端口(速度更快) ss -tulnp
- 输出格式与
netstat
兼容,但内核直接获取数据,性能提升10倍以上 。
- 输出格式与
3. 常见报错处理
- 问题:
netstat
无进程名/PID
解决:添加-p
参数并提权(sudo
)。 - 问题:
lsof
无输出
解决:检查端口是否存在或使用sudo
。 - 问题:
ps aux
找不到进程
解决:确认PID是否已退出,或使用pgrep
辅助 。
五、总结:工具选择决策树
graph TDA[需查看端口状态?] --> B{是否需直接关联进程?}B -->|是| C{是否需查看进程所有资源?}C -->|是| D[lsof -i :端口 或 lsof -p PID]C -->|否| E[netstat -tulnp | grep 端口]B -->|否| F[仅需进程状态?]F -->|是| G[ps aux | grep 进程名]F -->|否| H[组合命令:netstat/lsof + ps]
核心建议:
- 日常排查端口占用 →
netstat
或ss
- 深度分析进程资源 →
lsof
- 监控进程状态 →
ps aux
- 高性能需求 → 优先使用
ss
替代netstat
。