Linux shell编程学习笔记51: cat /proc/cpuinfo:查看CPU详细信息

0 前言

2024年的网络安全检查又开始了,对于使用基于Linux的国产电脑,我们可以编写一个脚本来收集系统的有关信息。对于中央处理器CPU比如,我们可以使用cat /proc/cpuinfo命令来收集中央处理器CPU的信息。

1. /proc/cpuinfo 保存了系统的cpu信息

在linux系统中,/proc目录下的文件保存了系统的软硬件信息。

[purpleendurer @ bash /]++ls -l /proc++

total 0

dr-xr-xr-x 9 csdn csdn 0 5月 28 22:19 1

dr-xr-xr-x 9 csdn csdn 0 5月 28 22:22 102

dr-xr-xr-x 9 csdn csdn 0 5月 28 22:22 127

dr-xr-xr-x 9 csdn csdn 0 5月 28 22:23 155

dr-xr-xr-x 9 csdn csdn 0 5月 28 22:24 170

dr-xr-xr-x 9 csdn csdn 0 5月 28 22:19 47

dr-xr-xr-x 9 csdn csdn 0 5月 28 22:19 72

drwxrwxrwt 2 root root 40 5月 28 22:19 acpi

-rw------- 1 root root 0 5月 28 22:23 async_load_calc

-r--r--r-- 1 root root 0 5月 28 22:23 buddyinfo

dr-xr-xr-x 4 root root 0 5月 28 22:19 bus

-r--r--r-- 1 root root 0 5月 28 22:23 cgroups

-r--r--r-- 1 root root 0 5月 28 22:23 cmdline

-r--r--r-- 1 root root 0 5月 28 22:23 consoles

-r--r--r-- 1 root root 0 5月 28 22:23 cpuinfo

dr-xr-xr-x 3 root root 0 5月 28 22:23 cpusli

-r--r--r-- 1 root root 0 5月 28 22:23 crypto

-r--r--r-- 1 root root 0 5月 28 22:23 devices

-r--r--r-- 1 root root 0 5月 28 22:23 diskstats

-r--r--r-- 1 root root 0 5月 28 22:23 dma

dr-xr-xr-x 4 root root 0 5月 28 22:23 driver

dr-xr-xr-x 3 root root 0 5月 28 22:23 dynamic_debug

--w------- 1 root root 0 5月 28 22:23 dyn_isolcpus

-r--r--r-- 1 root root 0 5月 28 22:23 execdomains

-rw-r--r-- 1 root root 0 5月 28 22:23 fault_events

-r--r--r-- 1 root root 0 5月 28 22:23 fb

-r--r--r-- 1 root root 0 5月 28 22:19 filesystems

dr-xr-xr-x 9 root root 0 5月 28 22:19 fs

-r--r--r-- 1 root root 0 5月 28 22:23 interrupts

-r--r--r-- 1 root root 0 5月 28 22:23 iomem

-r--r--r-- 1 root root 0 5月 28 22:23 ioports

dr-xr-xr-x 28 root root 0 5月 28 22:19 irq

-r--r--r-- 1 root root 0 5月 28 22:23 kallsyms

crw-rw-rw- 1 root root 1, 3 5月 28 22:19 kcore

crw-rw-rw- 1 root root 1, 3 5月 28 22:19 keys

-r--r--r-- 1 root root 0 5月 28 22:23 key-users

-r-------- 1 root root 0 5月 28 22:23 kmsg

-r-------- 1 root root 0 5月 28 22:23 kpagecgroup

-r-------- 1 root root 0 5月 28 22:23 kpagecount

-r-------- 1 root root 0 5月 28 22:23 kpageflags

-r--r--r-- 1 root root 0 5月 28 22:23 loadavg

-r--r--r-- 1 root root 0 5月 28 22:23 locks

-r--r--r-- 1 root root 0 5月 28 22:23 mdstat

-r--r--r-- 1 root root 0 5月 28 22:19 meminfo

dr-xr-xr-x 3 root root 0 5月 28 22:23 memsli

-r--r--r-- 1 root root 0 5月 28 22:23 misc

-r--r--r-- 1 root root 0 5月 28 22:23 modules

lrwxrwxrwx 1 root root 11 5月 28 22:23 mounts -> self/mounts

-rw-r--r-- 1 root root 0 5月 28 22:23 mtrr

lrwxrwxrwx 1 root root 8 5月 28 22:23 net -> self/net

-r-------- 1 root root 0 5月 28 22:23 pagetypeinfo

-r--r--r-- 1 root root 0 5月 28 22:23 partitions

crw-rw-rw- 1 root root 1, 3 5月 28 22:19 sched_debug

-r--r--r-- 1 root root 0 5月 28 22:23 schedstat

drwxrwxrwt 2 root root 40 5月 28 22:19 scsi

lrwxrwxrwx 1 root root 0 5月 28 22:19 self -> 170

-r-------- 1 root root 0 5月 28 22:23 slabinfo

-r--r--r-- 1 root root 0 5月 28 22:23 softirqs

-r--r--r-- 1 root root 0 5月 28 22:23 stat

-r--r--r-- 1 root root 0 5月 28 22:23 swaps

dr-xr-xr-x 1 root root 0 5月 28 22:19 sys

--w------- 1 root root 0 5月 28 22:19 sysrq-trigger

dr-xr-xr-x 5 root root 0 5月 28 22:23 sysvipc

lrwxrwxrwx 1 root root 0 5月 28 22:19 thread-self -> 170/task/170

crw-rw-rw- 1 root root 1, 3 5月 28 22:19 timer_list

dr-xr-xr-x 6 root root 0 5月 28 22:23 tty

dr-xr-xr-x 4 root root 0 5月 28 22:23 unevictable

-r--r--r-- 1 root root 0 5月 28 22:23 uptime

-r--r--r-- 1 root root 0 5月 28 22:23 version

-r-------- 1 root root 0 5月 28 22:23 vmallocinfo

-r--r--r-- 1 root root 0 5月 28 22:23 vmstat

-r--r--r-- 1 root root 0 5月 28 22:23 zerobuddyinfo

-r--r--r-- 1 root root 0 5月 28 22:23 zoneinfo

[purpleendurer @ bash /]

如果想了解和获取系统中CPU的提供商和相关配置信息,则可以查看/proc/cpuinfo。

2.cat /proc/cpuinfo:查看CPU详细信息

2.1 实例

2.1.1 实例1

[purpleendurer @ bash /] cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel(R) Xeon(R) Platinum
stepping        : 4
microcode       : 0x1
cpu MHz         : 2499.442
cache size      : 33792 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
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
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit mmio_stale_data retbleed
bogomips        : 4998.88
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:



processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel(R) Xeon(R) Platinum
stepping        : 4
microcode       : 0x1
cpu MHz         : 2499.442
cache size      : 33792 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
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
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit mmio_stale_data retbleed
bogomips        : 4998.88
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

[purpleendurer @ bash /] 

2.1.2 实例2

[purpleendurer @ bash ~] cat /proc/cpuinfo
processor	: 0
model name	: Phytium,FT-2000/4
bogomips	: 3456.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32
flags		: fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer	: 0x70
CPU architecture: 8
CPU variant	: 0x1
CPU part	: 0x663
CPU revision	: 3

processor	: 1
model name	: Phytium,FT-2000/4
bogomips	: 3456.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32
flags		: fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer	: 0x70
CPU architecture: 8
CPU variant	: 0x1
CPU part	: 0x663
CPU revision	: 3

processor	: 2
model name	: Phytium,FT-2000/4
bogomips	: 3456.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32
flags		: fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer	: 0x70
CPU architecture: 8
CPU variant	: 0x1
CPU part	: 0x663
CPU revision	: 3

processor	: 3
model name	: Phytium,FT-2000/4
bogomips	: 3456.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32
flags		: fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer	: 0x70
CPU architecture: 8
CPU variant	: 0x1
CPU part	: 0x663
CPU revision	: 3

2.2 返回信息说明

不同的系统返回的信息内容也不尽相同,以下是一些常见的信息项。

输出项 含义 备注
address sizes 可访问地址空间位数
apicid 用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
bogomips 在系统内核启动时粗略测算的CPU速度 Million Instructions Per Second
cache_alignment 缓存地址对齐单位
cache size CPU二级缓存大小
clflush size 每次刷新缓存的大小单位
core id 当前物理核在其所处CPU中的编号 这个编号不一定连续
cpu cores 该逻辑核所处CPU的物理核数 比如此处cpu cores 是4个,那么对应core id 可能是 1、3、4、5。
cpu family CPU产品系列代号
cpuid level 执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
cpu MHz CPU的实际使用主频
flags 当前CPU支持的功能
fpu 是否具有浮点运算单元(Floating Point Unit)
fpu_exception 是否支持浮点计算异常
initial apicid
microcode
model CPU属于其系列中的哪一代的代号
model name CPU全名,包括处理器品牌。 一旦您知道您拥有的 CPU 的确切类型,您就可以查看有关处理器规格的产品文档。CPU属于的名字及其编号、标称主频
processor 系统中逻辑处理核心的编号,从0开始排序。 对于单核处理器,则认为是其CPU编号 对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核
physical id 单个CPU的标号
power management 对能源管理的支持
siblings 单个CPU逻辑物理核数
stepping CPU属于制作更新版本
vendor_id CPU制造商
wp 表明当前CPU是否在内核态支持对用户空间的写保护 Write Protection

2.3 关于物理CPU、核数、逻辑cpu数的概念

2.3.1 物理CPU数(physical id)

主板上实际插入的cpu数量,可以数不重复的 physical id 有几个

2.3.2 CPU核心数(cpu cores)

单块CPU上面能处理数据的芯片组的数量,如双核、四核等

2.3.3逻辑CPU数

一般情况下:

在不支持超线程技术或没有开启次技术的情况下:

逻辑CPU=物理CPU个数×每颗核数

在服务器的CPU支持超线程技术的情况下:

逻辑CPU=物理CPU个数×每颗核数 *2

简单来说,在这种情况下,处理器中的1 颗内核会像2 颗内核那样在操作系统中发挥作用。

这样一来,操作系统可使用的执行资源扩大了一倍,大幅提高了系统的整体性能。

3 应用实例

3.1 grep -m 1 'model name' /proc/cpuinfo :显示CPU名称

[purpleendurer @ bash ~] ++grep -m 1 'model name' /proc/cpuinfo++

model name : Intel(R) Xeon(R) Platinum

[purpleendurer @ bash ~]

3.2 grep -c 'model name' /proc/cpuinfo:显示CPU数量

[purpleendurer @ bash ~] ++grep -c 'model name' /proc/cpuinfo++

2

[purpleendurer @ bash ~]

3.3 grep -c "cpu cores" /proc/cpuinfo : 获取CPU核数

[purpleendurer @ bash ~] grep -c "cpu cores" /proc/cpuinfo

2

[purpleendurer @ bash ~]

3.4 grep -c "processor" /proc/cpuinfo:获取系统中的逻辑CPU数量

[purpleendurer @ bash ~] ++grep -c "processor" /proc/cpuinfo++

2

[purpleendurer @ bash ~]

3.5 grep -c "siblings" /proc/cpuinfo:获取每个物理CPU中逻辑CPU的个数

[purpleendurer @ bash ~] ++grep -c "siblings" /proc/cpuinfo++

2

[purpleendurer @ bash ~]

3.6 检测cpu是否使用了超级程Hyper-Threading

我们可以通过比较cpu cores数量和siblings数量来判断:

如果cpu cores数量和siblings数量一致,说明没有启用超线程,否则就是启用了超线程。

我们把cpu cores数量保存到变量a,把siblings数量保存到变量b,然后用if语句比变量a和b的值,并输出相应的结果

[purpleendurer @ bash ~] ++grep -c "cpu cores" /proc/cpuinfo++

2

[purpleendurer @ bash ~] ++grep -c "siblings" /proc/cpuinfo++

2

[purpleendurer @ bash ~] ++a=(grep -c "cpu cores" /proc/cpuinfo);b=(grep -c "siblings" /proc/cpuinfo);if [ $a = $b ]; then echo 'No Hyper-Threading'; else echo 'Hyper-Threading'; fi++

No Hyper-Threading

[purpleendurer @ bash ~]

cpu cores数量和siblings数量一致,都是2,说明没有启用超线程。

4.其它相关命令

除了利用/proc/cpuinfo文件,我们还可以使用其它命令,比如 lscpu、nproc,留待下回讲解。

相关推荐
Peter_chq31 分钟前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮1 小时前
Linux 使用中的问题
linux·运维
dsywws2 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零3 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
小林熬夜学编程5 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
程思扬5 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
sun0077005 小时前
拷贝 cp -rdp 和 cp -a
linux·运维·服务器
wowocpp5 小时前
ubuntu 22.04 server 安装 anaconda3
linux·运维·ubuntu
乡村农夫6 小时前
cuda 环境搭建
linux
tingting01196 小时前
Linux 普通用户禁用sudo su - 命令
linux·运维·服务器