不使用sudo提取Linux序列号

不使用sudo提取Linux序列号,linux,serial-number,Linux,Serial Number,可以不使用sudo提取Linux序列号吗 我知道可以在Windows中执行以下操作:wmic bios获取serialnumber和 MAC OSsystem|u profiler | grep“r(system)”它们都不需要根提供程序 在Linux中,这可以使用:sudo dmidecode-s系统序列号,但它需要sudo。还有别的办法吗 谢谢dmidecode使用/dev/mem从物理内存读取此信息,这需要root用户 同样的信息也由Linux内核通过虚拟目录中的sysfs提供/sys/d

可以不使用sudo提取Linux序列号吗

我知道可以在Windows中执行以下操作:
wmic bios获取serialnumber
和 MAC OS
system|u profiler | grep“r(system)”
它们都不需要根提供程序

在Linux中,这可以使用:
sudo dmidecode-s系统序列号
,但它需要sudo。还有别的办法吗


谢谢

dmidecode
使用
/dev/mem
从物理内存读取此信息,这需要root用户

同样的信息也由Linux内核通过虚拟目录中的sysfs提供
/sys/devices/virtual/dmi/id

不幸的是,有人决定该虚拟目录中的所有信息都可以供任何人阅读,而不是序列号:

$ ls -l /sys/devices/virtual/dmi/id

-r--r--r-- 1 root root 4096 Nov 25 17:12 bios_date
-r--r--r-- 1 root root 4096 Nov 14 14:59 bios_vendor
-r--r--r-- 1 root root 4096 Nov 25 17:12 bios_version
-r--r--r-- 1 root root 4096 Nov 25 17:12 board_asset_tag
-r--r--r-- 1 root root 4096 Nov 25 17:12 board_name
-r-------- 1 root root 4096 Nov 25 17:12 board_serial
-r--r--r-- 1 root root 4096 Nov 14 14:59 board_vendor
-r--r--r-- 1 root root 4096 Nov 25 17:12 board_version
-r--r--r-- 1 root root 4096 Nov 25 17:12 chassis_asset_tag
-r-------- 1 root root 4096 Nov 25 17:12 chassis_serial
-r--r--r-- 1 root root 4096 Nov 25 17:12 chassis_type
-r--r--r-- 1 root root 4096 Nov 25 17:12 chassis_vendor
-r--r--r-- 1 root root 4096 Nov 25 17:12 chassis_version
-r--r--r-- 1 root root 4096 Nov 25 17:12 modalias
drwxr-xr-x 2 root root    0 Nov 25 17:12 power
-r--r--r-- 1 root root 4096 Nov 14 14:59 product_name
-r-------- 1 root root 4096 Nov 25 17:12 product_serial
-r-------- 1 root root 4096 Nov 14 14:59 product_uuid
-r--r--r-- 1 root root 4096 Nov 14 14:59 product_version
lrwxrwxrwx 1 root root    0 Nov 14 14:59 subsystem -> ../../../../class/dmi
-r--r--r-- 1 root root 4096 Nov 14 14:59 sys_vendor
-rw-r--r-- 1 root root 4096 Nov 14 14:59 uevent
如果您可以安装package
hal
(在最近的Ubuntu版本中默认不安装),此命令将作为非root用户为您工作:

 lshal | grep system.hardware.serial

 system.hardware.serial = '<serial_number>'  (string)
lshal | grep system.hardware.serial
system.hardware.serial=''(字符串)

这是因为包
hal
安装了
hald
守护进程,该守护进程以root用户身份运行并收集此数据,使得
lshal
能够以非root用户身份读取数据。

另一个不需要root权限的解决方案:

udevadm info --query=all --name=/dev/sda | grep ID_SERIAL

这实际上是don_Cristi提到的lsblk利用的库,但我的lsblk版本不包括序列号选项。

设备1名称和相应的序列号:

lsblk --nodeps -o name,serial
输出:

NAME SERIAL
sda  0000000012400917BA30
sdb  0000000012400917BA96
sda  0000000012400917BA30
sdb  0000000012400917BA96
0000000012400917BA30
如果不想打印标题行,请添加-n:

lsblk --nodeps -no name,serial
输出:

NAME SERIAL
sda  0000000012400917BA30
sdb  0000000012400917BA96
sda  0000000012400917BA30
sdb  0000000012400917BA96
0000000012400917BA30
将设备作为参数传递以仅获取特定设备的序列号:

lsblk --nodeps -no serial /dev/sda
输出:

NAME SERIAL
sda  0000000012400917BA30
sdb  0000000012400917BA96
sda  0000000012400917BA30
sdb  0000000012400917BA96
0000000012400917BA30
请记住,lsblk列出了有关所有可用(或指定)块设备的信息。现在,对于那些不知道最后一个词是什么意思的人:

通常,块设备是存储或保存数据的设备。软盘驱动器、硬盘驱动器和CD-ROM驱动器都是块设备。但使用lsblk时这不是问题,因为您可以简单地添加更多列,例如type(设备类型)和/或tran(设备传输类型)等:


如果此数据不是以sudo方式启动的,那么
lshal
如何访问此数据?此软件包将安装
hald
守护程序,该守护程序以root用户身份运行并收集此数据,从而使
lshal
能够读取此数据。谢谢!遗憾的是,如果没有根权限HAL get属性--udi'/org/freedesktop/HAL/devices/computer'-key system.hardware.serial将在不解析序列号的情况下获取序列号,而不必解析它是否是您想要的。在Ubuntu 20.04中,
HAL
的等价物是什么?