Linux 硬盘序列号为非 root

mus*_*afa 15 hardware linux

首先,我要为标题中没有包含硬件细节而道歉。这是因为我正在寻找一个适用于所有 Linux 发行版的命令。

题:

我对 Linux 很陌生,不太了解,但是,是否可以检索以非 root 身份运行的硬盘驱动器序列号。我知道有一些命令可用于检索使用 sudo 运行的此信息。但是,我需要一种无需以 sudo 身份运行即可检索此信息的方法。

任何建议将不胜感激。

亲切的问候,

穆斯塔法

Ser*_*sov 19

在大多数当前发行版中,硬盘序列号存储在 udev 数据库中,无需 root 权限即可查询:

/sbin/udevadm info --query=property --name=sda
Run Code Online (Sandbox Code Playgroud)

(查找ID_SERIAL, ID_SERIAL_SHORT;还有/dev/disk/by-id/ata-*基于这些值的 ATA 驱动器的符号链接)。

udisks为这些数据提供了一个更高级别的接口等等(它还提供了对 SMART 属性的访问,而无需 root 权限,这对于调用而言是需要的,例如,smartctl直接)。


Chr*_*all 6

另一种通常有效的方法是:

ls -l /dev/disk/by-id/
Run Code Online (Sandbox Code Playgroud)

这是一个单行代码,可让您快速枚举驱动器和型号/序列号:

ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print $NF " " $(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'  
Run Code Online (Sandbox Code Playgroud)

或者对于远程机器:

ssh $host "ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print \$NF \" \" \$(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'"
Run Code Online (Sandbox Code Playgroud)

然后,您可以进一步处理此输出。对于大多数驱动器类型,每行的第二个字符串是 MODEL_SERIAL。


wom*_*ble 1

如果不向某些进程授予类似 root 的权限,您将无法实现这一目标。即使作为 root 您也无法在某些硬件配置上执行此操作。