2

我正在寻找一种列出任何 USB 连接设备或可移动存储介质的方法。

我将使用此列表作为 gtk 引导媒体写入器,以便用户可以轻松地将 iso 写入 USB。

这将创建所有分区的完美列表:

ls /dev | grep "[sh]d[a-z][1-9]"

我怎样才能得到一个类似的列表,它只是可移动媒体?

4

5 回答 5

3

在我的系统(Ubuntu 12.04)上,我可以使用以下命令获取 USB 设备和分区列表

ls /dev/disk/by-path/*usb*

给予

/dev/disk/by-path/pci-0000:00:02.1-usb-0:1.1:1.0-scsi-0:0:0:0  
/dev/disk/by-path/pci-0000:00:02.1-usb-0:1.1:1.0-scsi-0:0:0:0-part1

或单独分区

ls /dev/disk/by-path/*usb*part*

/dev/sdd例如,这些是符号链接,指向真实的设备文件/dev/sdd1

我仅使用 USB 记忆棒和外部 USB 硬盘对此进行了测试。我不能说这是否或如何与 eSATA 或 Firewire 磁盘一起使用。

于 2013-04-05T11:15:46.210 回答
1

根据 Olaf Dietsche 的回答,我得出以下结论:

devs=`ls -al /dev/disk/by-path/*usb*part* 2>/dev/null | awk '{print($11)}'`; for dev in $devs; do dev=${dev##*\/}; echo -n "$dev ("; echo -n `mount | grep \`echo -E ${dev}\` | awk '{print($3)}'`; echo ")"; done

对我来说,上面的代码显示了 USB 设备以及它们的安装位置(括号之间)。它适用于 Ubuntu 13.04 和 12.04.2,但我不知道它是否适用于任何其他系统。

于 2013-08-05T22:20:35.857 回答
0

也许您可以使用lsusb命令的输出:

lsusb
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0db0:3870 Micro Star International 
Bus 002 Device 003: ID 0000:0000  
Bus 002 Device 004: ID 14cd:6116 Super Top M6116 SATA Bridge
于 2013-04-05T11:25:15.693 回答
0

要获取 USB 存储使用的安装路径

mount|grep /media|awk '{打印 $3}'

命令的解释

mount 将打印所有已安装的驱动器,grep 将仅显示安装在 /media 中的驱动器,(考虑到 /media 是默认安装点)此输出通过管道传输到 awk,它将打印 USB 驱动器的安装路径

于 2014-11-25T05:22:41.943 回答
0

bootiso-lBASH 实用程序只是在使用选项调用时执行此操作。这是稍微修改的 bash 代码段的输出:

/dev/sdd /dev/sde

相关片段:

printUSBDevices() {
  typeset -a usbDevices
  typeset -a devices
  getDeviceType() {
    typeset deviceName=/sys/block/${1#/dev/}
    typeset deviceType=$(udevadm info --query=property --path="$deviceName" | grep -Po 'ID_BUS=\K\w+')
    echo "$deviceType"
  }
  mapfile -t devices < <(lsblk -o NAME,TYPE | grep --color=never -oP '^\K\w+(?=\s+disk$)')
  for device in "${devices[@]}" ; do
    if [ "$(getDeviceType "/dev/$device")" == "usb" ]; then
      usbDevices+=("/dev/$device")
    fi
  done
  echo "${usbDevices[@]}"
}

printUSBDevices
于 2018-04-12T15:16:36.887 回答