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

如何解读?

  1. 如果输出为空
    • 表示没有 Java 进程在监听任何端口,可能原因:
      • Java 应用未启动。
      • Java 启动时未绑定端口(如调试参数未生效)。
      • 使用了错误的 grep 关键字(如进程名是 tomcat 而非 java)。
  2. 如果输出有内容
    • 检查监听的端口是否符合预期:
      • 应用端口(如 8080、8081)。
      • 调试端口(如 5005、5006)。
    • 如果端口存在但无法连接,可能是:
      • 防火墙阻止(iptables/firewalld)。
      • 仅绑定了 127.0.0.1(本地访问),未绑定 0.0.0.0(远程访问)。

常见用途

  1. 确认 Spring Boot/Tomcat 是否启动

    sudo netstat -tulnp | grep 8080  # 检查默认端口
    
  2. 验证 JDWP 调试端口是否监听

    sudo netstat -tulnp | grep 5005  # 检查默认调试端口5005
    
  3. 排查端口冲突

    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.0 vs 127.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.82192.168.13.35192.168.12.37192.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 调试端口无法连接?

  1. 你的调试端口(如 5005)未在 iptables 规则中放行

    • 当前规则仅放行 22808001-8140 和少数高端口,其他端口(包括 JDWP 调试端口)会被最后一条 REJECT 规则拒绝
  2. 解决方案
    临时开放调试端口(如 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
    

  1. 总结
    • 当前规则:仅允许 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)    

各列含义

  1. 用户名:登录的用户(这里是 root)。
  2. 终端类型
    • pts/0pts/1:伪终端(远程登录或图形界面终端)。
    • tty:物理终端或控制台。
  3. IP 地址:登录来源的 IP(这里是 47.100.160.132)。可能是跳板机
  4. 登录时间:会话开始的日期和时间。
  5. 登出时间/状态
    • still logged in:当前仍在线。
    • - 分隔的时间范围:会话持续时长(格式为 (时:分))。

lscpu

image-20250925154701427

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 个逻辑核心

posted @ 2025-08-05 20:42  deyang  阅读(31)  评论(0)    收藏  举报