不使用sudo提取Linux序列号
可以不使用sudo提取Linux序列号吗 我知道可以在Windows中执行以下操作:不使用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
wmic bios获取serialnumber
和
MAC OSsystem|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
如果您可以安装packagehal
(在最近的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
的等价物是什么?