我正在寻找一种列出任何USB连接设备或可移动存储介质的方法。
我将使用此列表作为gtk启动媒体编写器,因此用户可以轻松地将iso写入usb。
这将创建所有分区的完美列表:
ls /dev | grep "[sh]d[a-z][1-9]"
如何获得仅属于可移动媒体的类似外观列表?
答案 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