检查是否连接了特定的外部磁盘


Answers:


9

要测试是否连接了特定设备,可以使用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

无论是否安装设备,两者都可以使用。


对于已安装的分区- lsblk -f | grep f9035fce-b3a1-4aee-80ef-44e432b78fdb | grep / -q && echo yes || echo no
N0rbert

当然,我使用了您提供的UUID :)
N0rbert

9

/dev/disk/包含以下目录,其中包含指向真实设备的符号链接。该链接是由动态创建和删除的udev,因此它们始终是最新的:

  • 代号
  • 分部标签
  • 随便的
  • 旁路
  • 随便

因此,检查符号链接的存在将使用较少的资源。

这是一个使用磁盘序列号测试磁盘是否存在的示例:

test -e /dev/disk/by-id/wwn-0x5002538d408be9e0 && echo yes || echo no

在备份脚本中,我什至不检查磁盘是否存在,只检查如下mount命令的结果:

mount -o noatime $DESTINATION_PARTITION $DESTINATION_DIR || exit 1

2

lsusb 如果您的外部磁盘通过USB接口连接,则用于列出连接的USB设备。

lsblk -f 列出块设备,UUID及其安装点,因为您的外部磁盘是一个块设备。


1
@ N0rbert为什么需要-f列出安装点?无论如何,默认输出都会列出它们
-muru

0

findfs为此。您可以按以下方式搜索:

  • FS标签

    findfs LABEL="Ubuntu" &>/dev/null
    
  • FS uuid

    findfs UUID="f9035fce-b3a1-4aee-80ef-44e432b78fdb" &>/dev/null
    
  • GPT标签

    findfs PARTLABEL="EFI system partition" &>/dev/null
    
  • GPT uuid

    findfs PARTUUID="85e66d2f-3709-4060-938e-ffe836433cc9" &>/dev/null
    

搜索区分大小写。如果有多个分区匹配,则仅显示最后一个分区。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.