bash,搜索USB存储设备。输出位置

时间:2013-04-05 09:14:58

标签: linux bash usb

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

我将使用此列表作为gtk启动媒体编写器,因此用户可以轻松地将iso写入usb。

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

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

如何获得仅属于可移动媒体的类似外观列表?

5 个答案:

答案 0 :(得分: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磁盘一起使用。

答案 1 :(得分: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,但我不知道它是否适用于任何其他系统。

答案 2 :(得分: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

答案 3 :(得分:0)

要获取USB存储的挂载路径

  

mount | grep / media | awk'{print $ 3}'

命令解释

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

答案 4 :(得分:0)

bootiso BASH实用程序只需在使用-l选项调用时执行此操作。以下是略微修改的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