我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:

cat /proc/cpuinfo | awk '/^processor/{print $3}'

最后一个元素应该是cpu数量减1。


当前回答

不是我的网页,但是来自http://www.ixbrian.com/blog/?p=64&cm_mc_uid=89402252817914508279022&cm_mc_sid_50200000=1450827902的这个命令在centos上很适合我。即使启用了超线程,它也会显示实际的cpu。

Cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l

其他回答

如果有人想知道,下面是Python psutil.cpu_count(logical=False)调用在Linux上的等效shell脚本中所做的事情:

cat /sys/devices/system/cpu/cpu[0-9]*/topology/core_cpus_list | sort -u | wc -l

下面是一个稍长的版本,如果core_cpus_list不可用,它将返回到已弃用的thread_siblings_list文件中的信息(psutil有这个回退):

cat /sys/devices/system/cpu/cpu[0-9]*/topology/{core_cpus_list,thread_siblings_list} | sort -u | wc -l

我还认为cat /proc/cpuinfo会给我正确的答案,但是我最近看到我的ARM四核Cortex A53系统只显示了一个单核。似乎/proc/cpuinfo只显示活动的内核,而:

猫/ sys /设备/系统/ cpu /礼物

能更好地衡量那里有什么。你也可以

cat /sys/devices/system/cpu/online

查看哪些内核在线,以及

猫姐姐/设备/系统cpu -离线

查看哪些核心处于脱机状态。在线、离线和当前sysfs条目返回cpu的索引,因此返回值为0表示核心0,而返回值为1-3表示核心1、2和3。

参见https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu

使用awk计算每个“物理id”方法的“核心id”,如果“核心id”不可用,则返回“处理器”计数(如覆盆子)

echo $(awk '{ if ($0~/^physical id/) { p=$NF }; if ($0~/^core id/) { cores[p$NF]=p$NF }; if ($0~/processor/) { cpu++ } } END { for (key in cores) { n++ } } END { if (n) {print n} else {print cpu} }' /proc/cpuinfo)

使用下面的查询获取核心细节

[oracle@orahost](TESTDB)$ grep -c ^processor /proc/cpuinfo
8

处理/proc/cpuinfo的内容是不必要的繁复。使用nproc,它是coreutils的一部分,所以它应该在大多数Linux安装中可用。

命令nproc打印当前进程可用的处理单元的数量,该数量可能小于在线处理器的数量。

使用nproc——all查找所有已安装的内核/处理器的数量

在我的8核机器上:

$ nproc --all
8