简体   繁体   English

列出 Linux 中的所有 USB 驱动器

[英]Listing all USB drives in Linux

How can I get a list of removable drives (plugged into USB) in Linux?如何在 Linux 中获取可移动驱动器列表(插入 USB)? I'm fine with using KDE, GNOME or other DE libraries if it would make things easier.如果使用 KDE、GNOME 或其他 DE 库会使事情变得更容易,我就可以了。

I think a nice idea is to use udev interface from python. 我认为一个好主意是使用python的udev接口

Small example (of course in your case you have adjust some filtering): 小例子(当然在你的情况下你调整了一些过滤):

In [1]: import pyudev
In [2]: pyudev.Context()
In [3]: ctx = pyudev.Context()
In [4]: list(ctx.list_devices(subsystem='usb'))
Out[4]: 
[Device(u'/sys/devices/pci0000:00/0000:00:1a.0/usb2'),
 Device(u'/sys/devices/pci0000:00/0000:00:1a.0/usb2/2-0:1.0'),
 Device(u'/sys/devices/pci0000:00/0000:00:1a.0/usb2/2-2'),

It is a good way in most cases as new systems use udev. 在大多数情况下,这是一种很好的方式,因为新系统使用udev。

After all this time the question got unlocked again… 毕竟这一次问题再次解锁了......

In the end I used UDisks via the D‐Bus interface like shown here . 最后,我通过d-总线接口使用UDisks像示出在这里

Sometime back i got this small script ( it's not mine ) but it surely helped me alot putting just for reference 有时回来我得到了这个小脚本(它不是我的)但它确实帮我把它作为参考

#!/usr/bin/python
import sys
import usb.core
# find USB devices
dev = usb.core.find(find_all=True)
# loop through devices, printing vendor and product ids in decimal and hex
for cfg in dev:
      try:
              #print dir(cfg)
              sys.stdout.write('Decimal VendorID=' + str(cfg.idVendor) + ' & ProductID=' + str(cfg.bDeviceClass) + '  ' + str(cfg.product) + ' ' + str(cfg.bDeviceSubClass)+ '  ' + str(cfg.manufacturer)+'\n')
      except:
              print 

This is what I use from bash: lsblk --pairs --nodeps |这是我在 bash 中使用的: lsblk --pairs --nodeps | grep 'RM="1"' grep 'RM="1"'

Sample output: NAME="sda" MAJ:MIN="8:0" RM="1" SIZE="59.5G" RO="0" TYPE="disk" MOUNTPOINT=""示例输出:NAME="sda" MAJ:MIN="8:0" RM="1" SIZE="59.5G" RO="0" TYPE="disk" MOUNTPOINT=""

Note it is listing the devices, not its partitions.请注意,它列出的是设备,而不是其分区。 If you like to see the partitions also, lsblk --pairs |如果您还想查看分区,请 lsblk --pairs | grep 'RM="1"' grep 'RM="1"'

Any reason not to just parse out the results from lsusb ? 有什么理由不解析lsusb的结果? I'm sure there are modules for this, but then again, easy is sometimes best. 我确定有这方面的模块,但是再一次,简单有时候最好。

I can't help you with Python, in Perl I might do: 我无法帮助你使用Python,在Perl中我可能会这样做:

#!/usr/bin/env perl

use strict;
use warnings;

my @data;
foreach (`lsusb`) {
  next unless /Bus (\S+) Device (\S+): ID (\S+) (.*)/;
  push @data, { bus => $1, device => $2, id => $3, info => $4 };
}

use Data::Printer;
p @data;

which, on my computer, results in 在我的电脑上,导致

[
    [0] {
        bus   005,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [1] {
        bus   004,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [2] {
        bus   003,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [3] {
        bus   002,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [4] {
        bus   001,
        device   003,
        id   "0bda:0158",
        info   "Realtek Semiconductor Corp. USB 2.0 multicard reader"
    },
    [5] {
        bus   001,
        device   002,
        id   "064e:a129",
        info   "Suyin Corp. "
    },
    [6] {
        bus   001,
        device   001,
        id   "1d6b:0002",
        info   "Linux Foundation 2.0 root hub"
    }
]

Note that Data::Printer and its p function are human-friendly object dumping for inspection purposes only. 请注意, Data::Printer及其p函数是人性化的对象转储,仅用于检查目的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM