如何在没有root权限的Linux(Ubuntu)下获取CPU序列号?
我尝试了 cpuid 命令,它在没有 root 权限的情况下工作,但似乎返回全零(我相信因为需要在 BIOS 中更改某些内容)。
您能否建议我另一种方法来从没有 root 权限且无需修改 BIOS 的程序中检索 CPU 序列号?
如何在没有root权限的Linux(Ubuntu)下获取CPU序列号?
我尝试了 cpuid 命令,它在没有 root 权限的情况下工作,但似乎返回全零(我相信因为需要在 BIOS 中更改某些内容)。
您能否建议我另一种方法来从没有 root 权限且无需修改 BIOS 的程序中检索 CPU 序列号?
需要根权限。答案是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
处理器序列号基本上只存在于 Pentium III 处理器中。由于引发了隐私问题,英特尔将其从后来的模型中删除。因此,除非您使用的是 PIII ,并且您的 BIOS 设置允许您读取序列号,否则您将得到的只是 0。
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
除非您指的是其他序列号...?
正如之前提出此问题时所建议的那样,如果您尝试将其用于许可(因为您使用了许可标签),您可能需要尝试 MAC 地址: CPU 序列号
将许可证与可执行文件安装到用户文件系统时获得的 inode 编号联系起来。如果它们被移动到其他地方,它们就会改变。
不利的一面是,如果必须从备份中恢复程序,则可能无法保留这些数字。
我以前做过这种事情。您必须非常慷慨地让真正的用户在更改硬件时激活许可证。
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 中工作。
你检查过dmesg
吗?在里面/bin