我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
当前回答
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
其他回答
grep -c ^processor /proc/cpuinfo
将计算在/proc/cpuinfo中以“processor”开头的行数
对于具有超线程的系统,可以使用
grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}'
它应该返回(例如)8(而上面的命令将返回16)
下面将给出超线程和非超线程系统上的“真实”内核数。至少它在我所有的测试中都有效。
awk -F: '/^physical/ && !ID[$2] { P++; ID[$2]=1 }; /^cpu cores/ { CORES=$2 }; END { print CORES*P }' /proc/cpuinfo
Linux、MacOS、Windows跨平台解决方案:
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu || echo "$NUMBER_OF_PROCESSORS")
可以通过以下两种方式确定CPU的物理核数。
Count the number of unique core ids (roughly equivalent to grep -P '^core id\t' /proc/cpuinfo | sort -u | wc -l). awk '/^core id\t/ {cores[$NF]++} END {print length(cores)}' /proc/cpuinfo Multiply the number of 'cores per socket' by the number of sockets. lscpu | awk '/^Core\(s\) per socket:/ {cores=$NF}; /^Socket\(s\):/ {sockets=$NF}; END{print cores*sockets}' Count the number of unique logical CPU's as used by the Linux kernel. The -p option generates output for easy parsing and is compatible with earlier versions of lscpu. lscpu -p | awk -F, '$0 !~ /^#/ {cores[$1]++} END {print length(cores)}'
重申一下其他人所说的,有一些相关的属性。
要确定可用的处理器数量:
getconf _NPROCESSORS_ONLN
grep -cP '^processor\t' /proc/cpuinfo
确定可用的处理单元数量(不一定与内核数量相同)。这是超线程感知的。
nproc
我不想太深入,但是您还可以通过getconf _NPROCESSORS_CONF确定已配置处理器的数量(而不是简单的可用/在线处理器)。要确定CPU的总数(离线和在线),您需要解析lscpu -ap的输出。
考虑到打印可用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 }'