Linux命令详解
Linux命令详解
netstat命令
sudo netstat -tulnp | grep java
这个命令的作用是 检查当前系统中是否有 Java 进程正在监听 TCP/UDP 端口,通常用于确认 Java 应用(如 Tomcat、Spring Boot、JDWP 调试服务等)是否正常运行并绑定了预期的端口。
命令分解
| 参数 | 含义 |
|---|---|
sudo |
以管理员权限运行(查看所有进程) |
netstat |
显示网络连接、路由表、接口统计等信息 |
-t |
显示 TCP 协议相关的连接 |
-u |
显示 UDP 协议相关的连接 |
-l |
仅显示 监听 (LISTEN) 状态的端口 |
-n |
以 数字形式 显示 IP 和端口(不解析域名和服务名) |
-p |
显示 进程名/PID(需 sudo 权限) |
| ` | grep java` |
典型输出示例
tcp6 0 0 :::8080 :::* LISTEN 12345/java
tcp6 0 0 :::5005 :::* LISTEN 67890/java
:::8080:Java 进程监听8080端口(常见于 Spring Boot/Tomcat)。:::5005:Java 进程监听5005端口(常见于 JDWP 远程调试)。12345/java:进程 PID 为12345,进程名为java。
如何解读?
- 如果输出为空
- 表示没有 Java 进程在监听任何端口,可能原因:
- Java 应用未启动。
- Java 启动时未绑定端口(如调试参数未生效)。
- 使用了错误的
grep关键字(如进程名是tomcat而非java)。
- 表示没有 Java 进程在监听任何端口,可能原因:
- 如果输出有内容
- 检查监听的端口是否符合预期:
- 应用端口(如 8080、8081)。
- 调试端口(如 5005、5006)。
- 如果端口存在但无法连接,可能是:
- 防火墙阻止(
iptables/firewalld)。 - 仅绑定了
127.0.0.1(本地访问),未绑定0.0.0.0(远程访问)。
- 防火墙阻止(
- 检查监听的端口是否符合预期:
常见用途
-
确认 Spring Boot/Tomcat 是否启动
sudo netstat -tulnp | grep 8080 # 检查默认端口 -
验证 JDWP 调试端口是否监听
sudo netstat -tulnp | grep 5005 # 检查默认调试端口5005 -
排查端口冲突
sudo netstat -tulnp | grep 80 # 检查 80 端口被哪个进程占用
替代命令(如果 netstat 不可用)
# 使用 ss 命令(推荐,更现代)
sudo ss -tulnp | grep java
# 使用 lsof 命令
sudo lsof -i -P -n | grep java
总结
- 此命令用于检查 Java 进程监听的端口,帮助确认应用或调试服务是否正常运行。
- 如果无输出:Java 未监听端口,需检查启动日志或参数。
- 如果有输出但无法连接:检查防火墙、绑定 IP(
0.0.0.0vs127.0.0.1)。
iptables命令
iptables -nL
运行 iptables -nL 可以查看当前系统的 iptables 防火墙规则(即使 firewalld 未运行,iptables 仍可能生效)。
输出示例
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5005
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
INPUT链:控制入站流量(影响外部连接调试端口)。OUTPUT链:控制出站流量(一般不影响调试)。FORWARD链:控制转发流量(NAT/路由场景)。
Chain INPUT真实数据详解
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.13.82 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 192.168.13.35 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 192.168.12.37 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 192.168.11.192 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:8001:8140
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 26340,26928,30209,58050
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
1. 允许特定 IP 访问 SSH(22 端口)
ACCEPT tcp -- 192.168.13.82 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 192.168.13.35 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 192.168.12.37 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 192.168.11.192 0.0.0.0/0 tcp dpt:22
- 含义:仅允许来自
192.168.13.82、192.168.13.35、192.168.12.37、192.168.11.192的 TCP 流量访问本机的 22 端口(SSH)。 - 问题:如果你的调试客户端 IP 不在此列表中,可能无法连接其他端口(如 JDWP 调试端口)。
2. 允许任意 IP 访问 HTTP(80 端口)
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
- 含义:允许所有 IP 访问本机的 80 端口(HTTP)。
3. 允许任意 IP 访问 8001-8140 端口范围
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:8001:8140
- 含义:开放 8001 到 8140 端口范围 的 TCP 流量(常用于应用服务)。
4. 允许特定高端口(26340, 26928, 30209, 58050)
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 26340,26928,30209,58050
- 含义:允许访问 26340、26928、30209、58050 这四个特定端口。
5. 允许已建立的连接和关联流量
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
- 含义:放行所有 已建立(ESTABLISHED)或关联(RELATED) 的连接(如响应出去的请求)。
6. 允许 ICMP(Ping 请求)
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
- 含义:允许 ICMP 协议(如
ping测试)。
7. 默认放行所有流量(但被后续规则覆盖)
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
- 含义:理论上允许所有流量,但被下一条
REJECT规则覆盖。
8. 默认拒绝所有其他流量
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
- 含义:拒绝所有未匹配上述规则的流量,并返回
icmp-host-prohibited错误。
关键问题:为什么 JDWP 调试端口无法连接?
-
你的调试端口(如 5005)未在
iptables规则中放行- 当前规则仅放行
22、80、8001-8140和少数高端口,其他端口(包括 JDWP 调试端口)会被最后一条REJECT规则拒绝。
- 当前规则仅放行
-
解决方案
临时开放调试端口(如 5005):sudo iptables -I INPUT -p tcp --dport 5005 -j ACCEPT-I INPUT:插入到INPUT链开头(优先级高于REJECT)。--dport 5005:替换为你的实际调试端口。
永久保存规则(避免重启失效):
sudo apt install iptables-persistent && sudo netfilter-persistent save # Ubuntu/Debian sudo service iptables save # CentOS/RHEL
- 总结
- 当前规则:仅允许 SSH(22)、HTTP(80)、8001-8140 端口及少数高端口,其他端口默认被拒绝。
- 调试失败原因:JDWP 端口(如 5005)未被放行。
- 解决方法:添加
iptables规则放行调试端口,并确保 Java 进程正确监听该端口。
last命令
执行last
结果
root pts/0 47.100.160.132 Thu Jul 31 19:16 still logged in
root pts/0 47.100.160.132 Thu Jul 31 13:10 - 19:11 (06:01)
root pts/1 47.100.160.132 Tue Jul 29 10:05 - 11:00 (00:55)
各列含义
- 用户名:登录的用户(这里是
root)。 - 终端类型:
pts/0、pts/1:伪终端(远程登录或图形界面终端)。tty:物理终端或控制台。
- IP 地址:登录来源的 IP(这里是
47.100.160.132)。可能是跳板机 - 登录时间:会话开始的日期和时间。
- 登出时间/状态:
still logged in:当前仍在线。-分隔的时间范围:会话持续时长(格式为(时:分))。
lscpu

CPU 核心配置(最重要)
- CPU(s): 总的逻辑处理器数量(这是我们通常说的"几核")
- 示例中的
8表示系统有8个逻辑核心
- 示例中的
- On-line CPU(s) list: 当前在线的CPU列表
0-7表示所有8个CPU核心都在运行
- Thread(s) per core: 每个物理核心的线程数
2表示支持超线程技术,每个物理核心有2个逻辑处理器1表示不支持超线程
- Core(s) per socket: 每个物理CPU插槽的核心数
4表示每个物理CPU有4个物理核心
- Socket(s): 物理CPU插槽数量(有几个CPU)
1表示单CPU系统2或更多表示多CPU系统
计算总核心数的公式:
CPU(s) = Thread(s) per core × Core(s) per socket × Socket(s)
示例:8 = 2 × 4 × 1 个逻辑核心
浙公网安备 33010602011771号