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

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

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


当前回答

简介: 获取物理cpu:

grep 'core id' /proc/cpuinfo | sort -u

获取物理和逻辑cpu:

grep -c ^processor /proc/cpuinfo

/proc <<这是你需要的任何关于进程和

/proc/cpuinfo <<是任何CPU信息的黄金资源。

其他回答

你也可以使用Python!获取物理核数:

$ python -c "import psutil; print(psutil.cpu_count(logical=False))"
4

获取超线程核的数量:

$ python -c "import psutil; print(psutil.cpu_count(logical=True))"
8

如果您只想计算物理内核,这个命令可以满足我的需要。

lscpu -e | tail -n +2 | tr -s " " | cut -d " " -f 4 | sort | uniq | wc -w

非常基本,但似乎是计算实际的物理内核,忽略了逻辑计数

grep -c ^processor /proc/cpuinfo

将计算在/proc/cpuinfo中以“processor”开头的行数

对于具有超线程的系统,可以使用

grep ^cpu\\scores /proc/cpuinfo | uniq |  awk '{print $4}'

它应该返回(例如)8(而上面的命令将返回16)

考虑到打印可用CPU内核信息的特定示例代码片段,例如:

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

两种方法

根据最高的cpu核心id值得出总价值

利用一个事实,即CPU核心有一个连续的编号附加到它们,并存储在处理器字段下。由于proc文件中存储的每个CPU核心的信息是在一个由处理器字段升序排列的列表中,您可以简单地获取该序列的最后一个条目并观察处理器字段中的数值。

$ cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -n 1

注意:由于/proc/cpuinfo保存了一些对应于cpu计数的条目,处理器字段的初始值为0,不要忘记将最后一个cpu核心的值增加1。

$ last_cpu_core_id=$(/proc/cpuinfo | awk '/^processor/{print $3}' | tail -n 1)
$ echo $((last_cpu_core_id + 1))

计算输出的行数

这种方法与第一种方法相反,我们并不真正关心cpu核心id的特定值,我们只是计算输出行数。当涉及到计数时,这个过程通常从1开始,这简化了我们的解决方案。

使用grep

$ cat /proc/cpuinfo | grep processor | wc -l

或者,我们不需要记住处理器字段本身,而是利用描述单个cpu核心细节的每个条目由换行符分隔的事实。

cat /proc/cpuinfo | grep -v '^\w' | wc -l

使用awk

cat /proc/cpuinfo | awk '($1 == "processor") {count++ } END { print count }'

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

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

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

在我的8核机器上:

$ nproc --all
8