如何通过 shell 命令检查特定外部磁盘是否已连接?(通过标签或设备 ID)
答案1
要测试特定设备是否已连接,您可以使用grep
选项来搜索或-q
的输出,例如lsusb
lsblk
uuid=f9035fce-b3a1-4aee-80ef-44e432b78fdb
lsblk -f | grep -wq $uuid && echo yes || echo no
devicename="some Inc. Keyboard"
lsusb | grep -q "$devicename" && echo yes || echo no
或者if
:
uuid=f9035fce-b3a1-4aee-80ef-44e432b78fdb
if lsblk -f | grep -wq $uuid; then
echo yes
else
echo no
fi
无论设备是否安装,都可以使用。
答案2
/dev/disk/
包含以下目录,其中包含指向真实设备的符号链接。这些链接由 动态创建和删除udev
,因此它们始终是最新的:
- 按 ID
- 按部分标签
- 部分 uid
- 旁路
- 按 uuid
因此检查符号链接的存在将使用更少的资源。
下面是使用序列号测试磁盘存在的示例:
test -e /dev/disk/by-id/wwn-0x5002538d408be9e0 && echo yes || echo no
在我的备份脚本中我甚至不检查磁盘存在,我只检查mount
如下命令的结果:
mount -o noatime $DESTINATION_PARTITION $DESTINATION_DIR || exit 1
答案3
lsusb
如果您的外部磁盘通过 USB 接口连接,则列出连接的 USB 设备。
lsblk -f
列出块设备、UUID 及其挂载点,因为您的外部磁盘是块设备。
答案4
findfs
是为此而制作的。您可以按以下方式搜索:
FS 标签
findfs LABEL="Ubuntu" &>/dev/null
文件系统唯一标识
findfs UUID="f9035fce-b3a1-4aee-80ef-44e432b78fdb" &>/dev/null
GPT 标签
findfs PARTLABEL="EFI system partition" &>/dev/null
-
findfs PARTUUID="85e66d2f-3709-4060-938e-ffe836433cc9" &>/dev/null
搜索区分大小写。如果多个分区匹配,则仅显示最后一个分区。