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

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

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


当前回答

 dmidecode  | grep -i cpu | grep Version

给我

版本:Intel(R) Xeon(R) CPU E5-2667 v4 @ 3.20GHz 版本:Intel(R) Xeon(R) CPU E5-2667 v4 @ 3.20GHz

这是正确的插座数量-查找E5-2667告诉我每个插座有8个核心,所以乘以,最终在2个插座上有16个核心。

lscpu给了我20个cpu -这是完全不正确的-不知道为什么。(cat /proc/cpu也一样-结果是20。

其他回答

我发现的最可移植的解决方案是getconf命令:

getconf _NPROCESSORS_ONLN

它在Linux和Mac OS x上都可以工作,与其他一些方法相比,它的另一个好处是getconf已经存在很长时间了。我必须在一些旧的Linux机器上进行开发,这些机器没有nproc或lscpu命令,但它们有getconf。

编者注:虽然getconf实用程序是posix强制的,但具体的_NPROCESSORS_ONLN和_NPROCESSORS_CONF值不是。 也就是说,如前所述,它们可以在Linux平台和macOS上运行;在FreeBSD/PC-BSD上,你必须省略前导_。

这很简单。只需使用这个命令:

lscpu
cat /proc/cpuinfo | grep processor

这工作得很好。当我尝试第一个答案时,我得到了3个CPU的输出。我知道我在系统上有4个cpu,所以我只是为处理器做了一个grep,输出看起来像这样:

[root@theservername ~]# cat /proc/cpuinfo | grep processor
processor       : 0
processor       : 1
processor       : 2
processor       : 3

Python 3还提供了一些简单的方法来获取它:

$ python3 -c "import os; print(os.cpu_count());"

4

$ python3 -c "import multiprocessing; print(multiprocessing.cpu_count())"

4

如果有人想知道,下面是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