0 前言
2024年的网络安全检查又开始了,对于使用基于Linux的国产电脑,我们可以编写一个脚本来收集系统的有关信息。对于中央处理器CPU的信息采集,除了可以使用cat /proc/cpuinfo命令来实现,我们也可以使用lscpu 和 nproc命令。
关于 cat /proc/cpuinfo命令,可以参考:
1 lscpu命令 的功能、格式和选项说明
我们可以使用命令 lscpu --help 来查看lscpu命令的帮助信息。
[purpleendurer @ bash ~] lscpu --help
Usage:
lscpu [options]
Display information about the CPU architecture.
Options:
-a, --all print both online and offline CPUs (default for -e)
-b, --online print online CPUs only (default for -p)
-c, --offline print offline CPUs only
-e, --extended[=<list>] print out an extended readable format
-p, --parse[=<list>] print out a parsable format
-s, --sysroot <dir> use specified directory as system root
-x, --hex print hexadecimal masks rather than lists of CPUs
-y, --physical print physical instead of logical IDs
-h, --help display this help and exit
-V, --version output version information and exit
Available columns:
CPU logical CPU number
CORE logical core number
SOCKET logical socket number
NODE logical NUMA node number
BOOK logical book number
DRAWER logical drawer number
CACHE shows how caches are shared between CPUs
POLARIZATION CPU dispatching mode on virtual hardware
ADDRESS physical address of a CPU
CONFIGURED shows if the hypervisor has allocated the CPU
ONLINE shows if Linux currently makes use of the CPU
MAXMHZ shows the maximum MHz of the CPU
MINMHZ shows the minimum MHz of the CPU
For more details see lscpu(1).
[purpleendurer @ bash ~]
1.1 lscpu 命令的功能
lscpu从 sysfs 和 /proc/cpuinfo 收集 并显示有关 CPU 架构的信息。
1.2 lscpu 命令的格式
lscpu [选项]
1.3 lscpu 命令的选项说明
选项 | 说明 | 备注 |
---|---|---|
-a --all | 打印在线和离线 CPU信息(默认为 -e) | 此选项只能与选项-e或-p一起指定 |
-b --online | 仅打印在线 CPU信息(默认为 -p) | 此选项只能与选项-e或-p一起指定 |
-c --offline | 仅打印离线 CPU | 此选项只能与选项-e或-p一起指定 |
-e --extended[=<list>] | 打印出扩展的可读格式 | 以人性化的格式显示cpu信息,如果list参数省略,输出所有可用数据的列,在指定了list参数时,选项的字符串、等号(=)和列表必须不包含任何空格或其他空白。 比如: ’-e=cpu,node’ 或 ’–extended=cpu,node’ |
-p --parse[=<list>] | 打印出可解析的格式 | 优化命令输出,便于分析。 如果省略list,则命令的输出与早期版本的lscpu兼容,兼容格式以两个逗号用于分隔cpu缓存列,如果没有发现cpu缓存,则省略缓存列。 如果使用list参数,则缓存列以冒号(:)分隔。 在指定了list参数时,选项的字符串、等号(=)和列表必须不包含空格或者其它空白。 比如: ’-e=cpu,node’ 或 ’–extended=cpu,node’ |
-s --sysroot | 使用指定目录作为系统根目录 | 为一个Linux实例收集CPU数据,而不是发出lscpu命令的实例。指定的目录是要检查Linux实例的系统根 |
-x --hex | 打印十六进制掩码,而不是 CPU 列表 | 使用十六进制来表示cpu集合,默认情况是打印列表格式的集合(例如:0,1) |
-y --physical | 打印物理 ID 而不是逻辑 ID | |
-h --help | 显示此帮助并退出 | |
-V --version | 输出版本信息并退出 |
1.4 可用的信息列表项
使用-e 或 -p 选项时可以指定一个信息列表,可用的信息列表项如下:
信息列表项 | 说明 | 备注 |
---|---|---|
CPU | 逻辑 CPU | 逻辑 CPU 数量 = Socket * Core * Thread |
CORE | 逻辑核心数 | |
SOCKET | 插槽数 | 电脑主板上 CPU 的插槽数量,一般笔记本电脑和台式电脑只有一个,而服务器可能会有多个。如果有两个插槽,通常称为两路 |
NODE | 逻辑 NUMA 节点号 | |
BOOK | logical book number | |
DRAWER | logical drawer number | |
CACHE | 显示CPU之间共享的缓存数 | |
POLARIZATION | 虚拟硬件上的 CPU 调度模式 | |
ADDRESS | CPU 的物理地址 | |
CONFIGURED | 显示虚拟机监控程序是否已分配 CPU | |
ONLINE | 显示 Linux 当前是否使用 CPU | |
MAXMHZ | 显示 CPU 的最大 MHz | |
MINMHZ | 显示 CPU 的最小 MHz |
2 lscpu命令使用实例
2.1 不带选项的lscpu命令
2.1.1 实例1 csdn程序研究院系统的信息
[purpleendurer @ bash ~] lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 2
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Platinum
Stepping: 4
CPU MHz: 2500.016
BogoMIPS: 5000.03
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 33792K
NUMA node0 CPU(s): 0,1
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat
[purpleendurer @ bash ~]
命令返回信息列及其含义如下:
信息列 | 说明 | 实例 |
---|---|---|
Architecture | 架构 | x86_64 |
CPU op-mode(s) | CPU可选模式 | 32-bit, 64-bit |
Byte Order | 字节顺序 | Little Endian |
CPU(s): | 逻辑CPU颗数 | 2 |
On-line CPU(s) list | 在线CPU列表 | 0,1 |
Thread(s) per core | 每个核的线程数 | 2 |
Core(s) per socket | 每个cpu插槽核数(每颗物理cpu核数) | 1 |
Socket(s) | cpu插槽数 | 1 |
NUMA node(s) | 逻辑 NUMA 节点号 | 1 |
Vendor ID | CPU厂商ID | GenuineIntel |
CPU family | CPU系列 | 6 |
Mode | 型号 | 85 |
Model name | 型号名称 | Intel(R) Xeon(R) Platinum |
Stepping: | 步进 | 4 |
CPU MHz | CPU主频 | 2500.016 |
BogoMIPS | 在系统内核启动时粗略测算的CPU速度 Bogo是Bogus(伪)的意思 | 5000.03 |
Hypervisor vendor | 虚拟机管理程序供应商 | KVM |
Virtualization type | 虚拟化类型 | full |
L1d cache | CPU的一级数据缓存大小 | 32K |
L1i cache | CPU的一级指令缓存大小 | 32K |
L2 cache | CPU的二级缓存大小 | 1024K |
L3 cache | CPU的二级缓存大小 | 33792K |
NUMA node0 CPU(s) | NUMA 节点0 CPU | 0,1 |
Flags | 标志 | fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat |
2.1.2 实例2 另一个系统的中信息
[purpleendurer @ bash ~] lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
每个核的线程数:1
每个座的核数: 2
Socket(s): 2
Model name: Phytium,FT-2000/4
CPU max MHz: 2600.0000
CPU min MHz: 1900.0000
BogoMIPS: 3456.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32
[purpleendurer @ bash ~]
2.2 lscpu -e:以人性化的格式显示cpu信息
2.2.1 实例1 csdn程序研究院系统的信息
[purpleendurer @ bash ~] lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
0 0 0 0 0:0:0:0 yes
1 0 0 0 0:0:0:0 yes
[purpleendurer @ bash ~]
好多数据是0
2.2.2 实例2 另一个系统的中信息
[purpleendurer @ bash ~] lscpu -e
CPU SOCKET CORE ONLINE MAXMHZ MINMHZ
0 0 0 是 2600.0000 1900.0000
1 0 1 是 2600.0000 1900.0000
2 1 2 是 2600.0000 1900.0000
3 1 3 是 2600.0000 1900.0000
[purpleendurer @ bash ~]
2.3 lscpu -p:优化命令输出cpu信息
2.3.1 实例1 csdn程序研究院系统的信息
[purpleendurer @ bash ~] lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3
0,0,0,0,,0,0,0,0
1,0,0,0,,0,0,0,0
[purpleendurer @ bash ~]
2.3.2 实例2 另一个系统的中信息
[purpleendurer @ bash ~] lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node
0,0,0,
1,1,0,
2,2,1,
3,3,1,
[purpleendurer @ bash ~]
2.4 关闭指定CPU
一位网友分享的代码:
cd /sys/devices/system/cpu/ # 进入CPU目录
ls -Al |grep 'cpu[0-9]' # 正规则查询 CPU目录下 所有CPU
drwxr-xr-x. 6 root root 0 2月 5 2018 cpu0
drwxr-xr-x. 6 root root 0 2月 5 2018 cpu1
cat ./cpu[0-9]/online # 查看所有CPU的 online 值
1
1
echo 0 > ./cpu1/online # 将CPU0 关闭
cat ./cpu[0-9]/online
1
0
lscpu |grep -Ei 'on-line|off-line' # 查看所有CPU的 online 值,可以看到 CPU1 已经被关闭
On-line CPU(s) list: 1
Off-line CPU(s) list: 0
在csdn程序研究院的系统上操作,结果如下:
[purpleendurer @ bash ~] cd /sys/devices/system/cpu/
[purpleendurer @ bash /sys/devices/system/cpu] ls -Al |grep 'cpu[0-9]' # 正规则查询 CPU目录下 所有CPU
drwxr-xr-x 7 root root 0 5月 29 12:21 cpu0
drwxr-xr-x 7 root root 0 5月 29 12:21 cpu1
[purpleendurer @ bash /sys/devices/system/cpu] cat ./cpu[0-9]/online # 查看所有CPU的 online 值
1
1
[purpleendurer @ bash /sys/devices/system/cpu] echo 0 > ./cpu1/online # 将CPU0 关闭
bash: ./cpu1/online: Read-only file system
[purpleendurer @ bash /sys/devices/system/cpu]