可以在不使用sudo的情况下提取Linux序列号吗?
我知道可以在Windows中执行:wmic bios get serialnumber
和
MAC OS system_profiler |grep "r (system)"
它们都不需要根文本。
在Linux中可以使用:sudo dmidecode -s system-serial-number
但它需要sudo。还有其他办法吗?
由于
答案 0 :(得分:12)
dmidecode
使用需要root的/dev/mem
从物理内存中读取此信息。
Linux内核也通过虚拟目录/sys/devices/virtual/dmi/id
中的sysfs提供相同的信息。
不幸的是,有人认为该虚拟目录中的所有信息都对所有人开放,只是不是序列号:
$ 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
如果您可以安装软件包hal
(默认情况下不会在最近的Ubuntu版本上安装),则此命令将作为非root用户使用:
lshal | grep system.hardware.serial
system.hardware.serial = '<serial_number>' (string)
这是因为程序包hal
安装了hald
守护程序,它以root身份运行并收集此数据,使lshal
可以将其作为非root用户进行读取。
答案 1 :(得分:1)
另一种不需要root权限的解决方案:
udevadm info --query=all --name=/dev/sda | grep ID_SERIAL
这实际上是由 don_crissti 提到的 lsblk 利用的库,但我的 lsblk 版本不包括串行选项。
答案 2 :(得分:0)
Device1 名称和对应的序列号:
lsblk --nodeps -o name,serial
输出:
NAME SERIAL
sda 0000000012400917BA30
sdb 0000000012400917BA96
如果不想打印标题行,请添加 -n:
lsblk --nodeps -no name,serial
输出:
sda 0000000012400917BA30
sdb 0000000012400917BA96
将设备作为参数传递以仅获取特定设备的序列号:
lsblk --nodeps -no serial /dev/sda
输出:
0000000012400917BA30
记住 lsblk 列出了所有可用(或指定)块设备的信息。现在,对于那些不知道最后一个术语是什么意思的人:
一般来说,块设备是存储或保存数据的设备。软盘驱动器、硬盘驱动器和 CD-ROM 驱动器都是块设备。但这在使用 lsblk 时不是问题,因为您可以简单地添加更多列,例如 type(设备类型)和/或 tran(设备传输类型)等:
lsblk --nodeps -no name,serial,type,tran
.
sda 0000000012400917BA30 disk sata
sdb 0000000012400917BA96 disk sata
sr0 4B583242334C453233353320 rom usb