某个设备文件背后的驱动程序是什么?

Ale*_*ain 10 linux drivers devices block-device

给定一个设备文件,比如说/dev/sdb,是否可以确定它背后的驱动程序?

具体来说,我想确定我的存储设备正在使用什么驱动程序。fdisk -l列出 2 个设备:/dev/sda/dev/sdb. 一个是 SATA 硬盘驱动器,另一个是 USB 大容量存储设备 - 实际上是 SD 卡。

我如何以编程方式确定哪个是哪个?

我正在编写一个软件,我想保护初学者免于擦除他们的硬盘驱动器,同时允许他们擦除他们的 SD 卡。

Gil*_*il' 12

运行udevadm info -a -n /dev/sda并解析输出。你会看到像

DRIVERS=="ahci"
Run Code Online (Sandbox Code Playgroud)

对于使用ahci驱动程序的 SATA 磁盘,或

DRIVERS=="usb-storage"
Run Code Online (Sandbox Code Playgroud)

用于 USB 连接的设备。您还可以显示供应商和型号名称以供确认。还,

ATTR{removable}=="1"
Run Code Online (Sandbox Code Playgroud)

存在于可移动设备上。

所有这些信息也可以通过/sys(实际上,这就是udevadm去查看的地方)获得,但/sys界面会不时变化,因此udevadm从长远来看,解析更加健壮。