🐧 第01章 · 系统信息与硬件

uname lsblk lscpu free uptime /proc

系统信息与硬件

运维的起点是"先搞清楚自己在哪台机器上、跑着什么东西"。这一章教你用最常用的命令读出这台服务器的内核、发行版、CPU、内存、磁盘、架构与网络信息——所有后续章节的排查,都从这几条命令开始。

内核、发行版与架构

"Linux" 其实指内核;用户真正接触的是发行版(Distribution)。两者都要能一眼看清:

命令 作用 示例(本机实际输出)
uname -r 内核版本 6.8.0-139-generic
uname -m CPU 架构 x86_64
uname -a 内核+主机名+架构成一键汇总 Linux srv1952823 6.8.0-139-generic x86_64 GNU/Linux
lsb_release -a 发行版信息 Ubuntu 24.04.5 LTS
uname -r          # 只输出内核版本号
uname -m          # 架构:x86_64 是 64 位,x86 是 32 位,arm64 是 ARM 服务器
uname -a          # 一条命令看全:主机名、内核、架构
cat /etc/os-release   # 发行版的权威来源,比 lsb_release 更完整(含 VERSION_ID)

/etc/os-release 是 systemd 时代发行版的标准标识文件,写脚本时判断系统版本就用它:

# 判断是否为 Debian/Ubuntu 系
grep -qi "ubuntu\|debian" /etc/os-release && echo "Debian 系"

易错 uname 默认只输出内核名 Linux,必须带 -r 或 -a 才有内核版本号。uname -m 输出 x86_64 ≠ 32 位,别被"64"吓到——那是 AMD64 的规范写法,就是常见的 64 位 x86。

主机名与网络标识

主机名用来在集群里区分机器,也常出现在提示符和日志里。本机是 srv1952823。

hostname              # 当前主机名
hostname -I           # 本机 IP 地址列表(-I 大写,只显示地址不带接口名)
hostnamectl           # systemd 主机名信息,含机器 ID、启动说明等

hostnamectl 还顺带给出了这台机器的重要身份信息。

CPU 信息

CPU 是性能的第一源头。lscpu 给出结构化的 CPU 信息,nproc 给出可用核心数,lscpu 的 -e 参数可同时看到多核细节。

nproc                 # 可用核心数(本机 4)
lscpu                 # CPU 架构、型号、核心数、线程数、缓存
lscpu | grep -E "Model name|^CPU\(s\)|Thread|Core|Socket"   # 只看关键行

lscpu 里几个要到看的字段:

  • Model name —— CPU 型号;
  • CPU(s) —— 总逻辑线程数;
  • Thread(s) per core / Core(s) per socket / Socket(s) —— 超线程与物理核心数,三者相乘等于总线程数;
  • Virtualization —— 是否支持硬件虚拟化(虚拟机、Xray 等常见用例)。

提示 云服务器上看到的物理核心往往被宿主机分配(本机 4 核是虚机配额),lscpu 显示的是"我能用到的"核心数,不一定等于宿主机物理核。判断是否虚机可用 systemd-detect-virt。

systemd-detect-virt   # 输出 qemu/kvm/… 表示是虚拟机;无输出表示物理机

内存与负载概览

这章先给一条命令感受系统"忙不忙",细节留到第 3、7 章:

free -h               # -h 人类可读,查看内存总量与使用(本机 15Gi 总量)
uptime                # 开机时长 + 1/5/15 分钟平均负载

平均负载(load average)三个数字分别代表过去 1/5/15 分钟的"排队等待 CPU 的任务数"。判断准则:平均负载 / 核心数 超过 1 就说明 CPU 开始饱和。

# 本机 4 核,负载 4 以内算正常,超过 4 就需要关注
uptime
# 约输出: up 2 days, load average: 0.20, 0.18, 0.15  → 4 核下负载 0.2 很轻松

磁盘与块设备

磁盘由块设备管理工具 lsblk 一次性看清层次关系(挂载点、容量、文件系统):

lsblk                       # 树状显示磁盘与分区
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT   # 指定输出列,信息更清晰
lsblk -f                    # 一并显示文件系统类型与 UUID

本机的磁盘结构(运行 lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT 所得):

NAME   SIZE TYPE FSTYPE MOUNTPOINT
sda    200G disk
├─sda1 199G part ext4   /
├─sda14  4M part
├─sda15 106M part vfat  /boot/efi
├─sda16 913M part ext4  /boot

易错 df 看到的是"挂载好的文件系统",lsblk 看到的是"物理磁盘与分区"。一块 200G 磁盘分区后,每个分区单独挂载,容量加起来才是总容量。sda14(4M)没有挂载点,那是 Windows/UEFI 或 OEM 保留分区,正常现象。

/proc:内核的虚拟文件系统

/proc 是内核暴露给用户态的"只读数据库",每一文件对应一条内核信息,读它不需要额外工具:

cat /proc/meminfo        # 内存详情,free 命令的数据来源
cat /proc/cpuinfo        # CPU 详情,含每核细致参数(lscpu 的数据来源)
cat /proc/loadavg        # 平均负载(等价 uptime)
cat /proc/uptime         # 开机秒数
cat /proc/version        # 内核编译版本(uname -a 的来源)

/proc/sys 是其中的"可写区",用来调内核运行参数(第 8 章会用到):

sysctl net.ipv4.ip_forward       # 查看是否开启 IP 转发
sysctl -a | grep vm.swappiness   # 查看 swap 倾向配置(第 3 章细讲)

提示 /proc 里的内容不占磁盘空间,是内存里的"假文件"。判断一个文件是否属于 /proc 的诀窍:ls -l 看到大小为 0,但 cat 能读出内容——那就是内核动态生成的。

硬件型号细节

想看物理硬件厂商、型号、序列号,用 DMI 工具(需要 root):

dmidecode -t system        # 主板/机器制造商、序列号
dmidecode -t memory        # 内存条型号与容量
dmidecode -t processor     # 处理器厂商与型号
# 只看机器型号,避免一屏刷屏
dmidecode -t system | grep -E "Manufacturer|Product Name"

易错 dmidecode 必须 root 权限;在虚机里它读的是宿主机虚拟出的 DMI 数据,生产环境多为"QEMU"/"KVM",型号可能不是真实厂商名。

uptime 与负载的延伸

uptime 其实是 top 的第一行信息,用 top -bn1 | head -5 也能拿到同样的负载数据。负载升高不代表一定是 CPU 问题——也可能是磁盘 I/O 排队(第 7 章 iostat 或 vmstat 区分)。

易错点

  • uname 不带参数:只输出 Linux,以为系统有问题,其实要加 -r。
  • 把 lscpu 的 CPU(s) 当物理核:那是含超线程的逻辑线程数,物理核还要看 Socket×Core。
  • lsblk 里没挂载点的分区:不一定是故障,保留分区/EFI 分区本就常见。
  • dmidecode 读不到序列号:虚机常见,别据此怀疑硬件损坏。

相关命令

hostnamectl、lscpu、free、uptime、lsblk、df、dmidecode、sysctl、systemd-detect-virt。