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

Linux bash,搜索usb存储设备。输出位置,linux,bash,usb,Linux,Bash,Usb,我正在寻找一种方法来列出任何usb连接的设备或可移动存储媒体 我将使用这个列表作为gtk引导媒体写入器,这样用户就可以轻松地将iso写入usb 这将创建所有分区的完美列表: ls /dev | grep "[sh]d[a-z][1-9]" 我怎样才能得到一个只有可移动媒体的类似列表呢?在我的系统(Ubuntu 12.04)上,我可以得到一个包含USB设备和分区的列表 ls /dev/disk/by-path/*usb* 给予 /dev/disk/by-path/pci-0000:00:02.

我正在寻找一种方法来列出任何usb连接的设备或可移动存储媒体

我将使用这个列表作为gtk引导媒体写入器,这样用户就可以轻松地将iso写入usb

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

ls /dev | grep "[sh]d[a-z][1-9]"
我怎样才能得到一个只有可移动媒体的类似列表呢?

在我的系统(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磁盘一起工作。

在我的系统(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磁盘一起工作。

也许您可以使用
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

也许您可以使用
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

根据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上运行,但我不知道它是否能在任何其他系统上运行。

根据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上运行,但我不知道它是否能在任何其他系统上运行。

获取usb存储使用的挂载路径

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

指挥解释
mount将打印所有已安装的驱动器,grep将仅显示安装在/media中的驱动器(考虑到/media是默认安装点),此输出通过管道传输到awk,awk将打印usb驱动器的安装路径,以获取usb存储使用的安装路径

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

指挥解释 mount将打印所有安装的驱动器,grep将仅显示安装在/media中的驱动器(考虑到/media是默认安装点),此输出通过管道传输到awk,awk将打印usb驱动器的安装路径。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
printUSBDevices(){
排版-一种通用设备
打字机-一种设备
getDeviceType(){
排版deviceName=/sys/block/${1}/dev/}
typeset deviceType=$(udevadm info--query=property--path=“$deviceName”| grep-Po'ID\u BUS=\K\w+”)
回显“$deviceType”
}
mapfile-t devices-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
printUSBDevices(){
排版-一种通用设备
打字机-一种设备
getDeviceType(){
排版deviceName=/sys/block/${1}/dev/}
typeset deviceType=$(udevadm info--query=property--path=“$deviceName”| grep-Po'ID\u BUS=\K\w+”)
回显“$deviceType”
}

mapfile-t devices<我添加了一个标记。如果这是针对另一个操作系统的,请将其删除并添加相应的标记。我添加了一个标记。如果这是针对另一个操作系统的,请将其删除并添加相应的标记。这并不是因为您无法分辨哪些设备是磁盘。也不是因为您无法分辨哪些设备是磁盘。