我正在寻找一种列出任何 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 磁盘一起使用。
根据 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,但我不知道它是否适用于任何其他系统。
也许您可以使用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
要获取 USB 存储使用的安装路径
mount|grep /media|awk '{打印 $3}'
mount 将打印所有已安装的驱动器,grep 将仅显示安装在 /media 中的驱动器,(考虑到 /media 是默认安装点)此输出通过管道传输到 awk,它将打印 USB 驱动器的安装路径
bootiso
-l
BASH 实用程序只是在使用选项调用时执行此操作。这是稍微修改的 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