在没有sudo的情况下解压缩Linux序列号

时间:2013-11-26 00:43:34

标签: linux serial-number

可以在不使用sudo的情况下提取Linux序列号吗?

我知道可以在Windows中执行:wmic bios get serialnumber和 MAC OS system_profiler |grep "r (system)"它们都不需要根文本。

在Linux中可以使用:sudo dmidecode -s system-serial-number但它需要sudo。还有其他办法吗?

由于

3 个答案:

答案 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