如何从命令行列出所有通过USB连接的存储设备(拇指驱动器/外部硬盘驱动器)?


18

我只想列出通过USB连接的设备。

问题在于,Ubuntu似乎将所有拇指驱动器都视为可移动的(在中/sys/block/*/removable),但它没有以相同的方式看到外部硬盘驱动器。

这比如何检测USB设备更具体

Answers:


14

如果您正在寻找挂载的磁盘,一个简单的

df

将列出它们以及所有其他磁盘以及一些有用的信息。


2
但这提供了所有块设备,而不仅仅是通过USB连接的那些块设备。
杰里米·科尔

9

我建议检查设备的udev属性,特别是该ID_BUS属性:

for device in /sys/block/*
do
    if udevadm info --query=property --path=$device | grep -q ^ID_BUS=usb
    then
        echo $device
    fi
done

即使没有插入卡,这也会为我的内置读卡器吐出设备。
b_laoshi

@b_laoshi:是的,那些仍将报告为存储设备,但没有媒体。
杰里米·科尔

2

我认为

lsusb

至少会在您了解我的要求的情况下为您提供所需的信息。(当然,它列出了所有USB设备,而不仅仅是存储。)


2

仅列出连接的USB存储设备

编辑:有空的时候,我将重新审阅此文章,使其仅列出USB设备。目前,它列出了所有安装的设备/media,对于某些人来说可能已经足够了。

列出所有安装在其中的设备 /media

此处所有其他答案似乎都无法过滤掉非USB存储设备或非存储USB设备。这是一条仅列出通过USB连接的存储设备的命令。 一个可能对任何人都无关紧要的例外是,这将不会显示已安装媒体的已连接USB光盘驱动器。

工作要求

  • 必须安装USB设备。默认情况下,Ubuntu桌面操作系统通常会自动挂载
  • 介质必须安装在/media目录中。如果您的USB设备已在fstab中配置为可挂载在其他位置,则必须调整以下命令

列出USB存储设备
在我正在编写的脚本的特殊情况下,我列出了各个分区。这是两个命令。一个将列出已连接设备的分区,而另一个将仅列出设备。

  • 列出分区:
    lsblk | grep /media | grep -oP "sd[a-z][0-9]?" | awk '{print "/dev/"$1}'
    示例输出:

    /dev/sdd1
    /dev/sdi1
    /dev/sdj1
    /dev/sdj2
    
  • 列出设备:
    lsblk | grep /media | grep -oP "sd[a-z]" | awk '{print "/dev/"$1}' | sort | uniq
    示例输出:

    /dev/sdd
    /dev/sdi
    /dev/sdj
    

装入内部磁盘的分区又如何/media呢?
muru

那会带来一个问题,但是这不会影响大多数用户。我会考虑一下,稍后再进行更新。
b_laoshi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.