12

如何在没有root权限的Linux(Ubuntu)下获取CPU序列号?

我尝试了 cpuid 命令,它在没有 root 权限的情况下工作,但似乎返回全零(我相信因为需要在 BIOS 中更改某些内容)。

您能否建议我另一种方法来从没有 root 权限且无需修改 BIOS 的程序中检索 CPU 序列号?

4

7 回答 7

9

需要根权限。答案是dmidecode。
如果您需要 CPU ID:

dmidecode | grep -w ID | sed "s/^.ID\: //g"

这将获得 CPU ID,从输出中删除 'ID:'
如果您需要接收计算机 ID:

dmidecode | grep -w UUID | sed "s/^.UUID\: //g"

如果你想在没有 root 权限的情况下获取内核 uuid,那么:

dmesg | grep UUID | grep "Kernel" | sed "s/.*UUID=//g" | sed "s/\ ro\ quiet.*//g"

这是因为最近的评论。很久以前发生的,所以现在无法解释为什么这些 ID 被视为机器标识符。从部分获得了实际的处理器 ID Processor Information。在 Debian 操作系统上提取。

pr=0; dmidecode | while read line; do [ "$line" == "Processor Information" ] && pr=1; [ $pr -eq 0 ] && continue; [ -n "$(echo $line | grep '^ID')" ] && echo $line | awk -F"ID: " '{print $2}' && break; done
于 2014-04-10T14:51:07.263 回答
7

处理器序列号基本上只存在于 Pentium III 处理器中。由于引发了隐私问题,英特尔将其从后来的模型中删除。因此,除非您使用的是 PIII ,并且您的 BIOS 设置允许您读取序列号,否则您将得到的只是 0。

于 2011-02-18T19:11:02.917 回答
1

cpuid不管我使用的是什么,都会为我返回相同的序列号sudo

 % cpuid | grep serial
Processor serial: 0002-0652-0000-0000-0000-0000
 % sudo cpuid | grep serial
Processor serial: 0002-0652-0000-0000-0000-0000

除非您指的是其他序列号...?

于 2011-02-18T19:12:37.757 回答
1

正如之前提出此问题时所建议的那样,如果您尝试将其用于许可(因为您使用了许可标签),您可能需要尝试 MAC 地址: CPU 序列号

于 2011-02-18T19:13:53.437 回答
1

将许可证与可执行文件安装到用户文件系统时获得的 inode 编号联系起来。如果它们被移动到其他地方,它们就会改变。

不利的一面是,如果必须从备份中恢复程序,则可能无法保留这些数字。

我以前做过这种事情。您必须非常慷慨地让真正的用户在更改硬件时激活许可证。

于 2012-03-10T05:16:11.770 回答
0

CPU没有序列号;也许您想要没有 root 权限的 DMI 基本信息(这只会显示您的主板制造商和型号的持久 ID,但没有序列号):

dmesg | grep -i dmi: | cut -d ":" -f 2-

否则,您可以“告诉” dmidecode从非特权用户运行:

sudo chmod +s /usr/sbin/dmidecode

然后你可以运行例如:

dmidecode -s system-serial-number

在大多数情况下,“system-serial-number”类似于“chassis-serial-number”或“baseboard-serial-number”。请记住,并非所有发行版都安装了这个程序,例如,基于 Debian 的系统有一个以它命名的包。

否则,您可以通过系统磁盘找到唯一且持久的安装系统 ID;为此,您可以运行以下命令:

mount | grep "on / type" | awk '{print $1}'

前者将为您提供安装系统的设备路径(对于我的操作系统,它返回/dev/sda7),然后您可以使用以下内容找到它的 ID:

find /dev/disk/by-id/ -lname "*sda" ! -name "wwn*"

因此,从系统硬盘中查找唯一 ID 的完整命令可能是:

find /dev/disk/by-id/ -lname "*`mount | grep " / " | awk '{print $1}' | cut -b 6-8`" ! -name "wwn*" -printf "%f\n"

我希望这可能适合您或其他人的需求。命令cut -b 6-8可能不可移植,因为我假设块设备名称为三个字符长;此外,/dev/disk/by-id/路径仅由 UDEV 托管系统填充,并非所有 Linux 发行版都使用它,但我保证前者将在 Ubuntu 中工作。

于 2019-06-07T15:09:11.877 回答
-2

你检查过dmesg吗?在里面/bin

于 2011-02-18T19:07:38.633 回答