在没有root权限的Linux(Ubuntu)下如何获取CPU序列号?
我尝试了 cpuid 命令,它无需 root 权限即可工作,但似乎返回全零(我相信是因为 BIOS 中需要更改某些内容)。
您能否建议我另一种在没有 root 权限且无需修改 BIOS 的情况下从程序中检索 CPU 序列号的方法?
处理器序列号基本上仅存在于 Pentium III 处理器中。由于提出的隐私问题,英特尔从后来的型号中删除了它。因此,除非您使用的是 PIII 并且您的 BIOS 设置允许您读取序列号,否则您将得到的只是 0。
需要root权限。答案是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 被用作机器标识符。从
Processor Information
部分获取实际的处理器 ID。在 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
将许可证与其可执行文件安装到用户文件系统时获得的索引节点号联系起来。如果它们被移动到其他地方,它们就会改变。
缺点是如果必须从备份恢复程序,则可能无法保留数字。
我以前也做过这样的事。您必须非常慷慨地让真正的用户在更改硬件时激活许可证。
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
并检查序列号,如下所示:
cat /proc/cpuinfo
在 Raspbian GNU/Linux 11 (bullseye) 上测试,无需超级用户。
Hardware : BCM2835
Revision : c03115
Serial : <....>
否则你可以“告诉”dmidecode
从非特权用户运行:
dmesg | grep -i dmi: | cut -d ":" -f 2-
然后你可以运行例如:
sudo chmod +s /usr/sbin/dmidecode
在大多数情况下,“系统序列号”类似于“机箱序列号”或“基板序列号”。请记住,并非所有发行版都安装了此程序,例如,基于 Debian 的系统都有一个以它命名的软件包。
否则,您可以通过系统磁盘找到唯一且持久的、通过安装的系统 ID;为此,您可以运行以下命令:
dmidecode -s system-serial-number
前者将为您提供安装系统的设备路径(对于我的操作系统,它返回/dev/sda7
),然后您可以使用以下命令找到它的ID:
mount | grep "on / type" | awk '{print $1}'
因此,从系统硬盘查找唯一 ID 的完整命令可能是:
find /dev/disk/by-id/ -lname "*sda" ! -name "wwn*"
我希望这可以满足您或这里其他人的需求。命令cut -b 6-8
可能不可移植,因为我假设块设备名称为三个字符长;此外,/dev/disk/by-id/路径仅由UDEV托管系统填充,并非所有Linux发行版都使用它,但我保证前者可以在Ubuntu中工作。
find /dev/disk/by-id/ -lname "*`mount | grep " / " | awk '{print $1}' | cut -b 6-8`" ! -name "wwn*" -printf "%f\n"
? 它在
dmesg