如何检测 USB 闪存盘是否已拔出

如何检测 USB 闪存盘是否已拔出

在备份过程中,程序必须将tar.gz文件复制到已安装的 USB 闪存驱动器。程序 (nodeJS) 使用 APIchild_process.exec()运行 shell 脚本。函数本身获取stdio

那么,使用 shell 脚本,我该如何检查 USBFlashDrive 是否已断开连接/拔出?

该设备通常显示为sd[a-z]1- 请注意字符串中的正则表达式。

答案1

我建议

lsusb

据作者称,

lsusb 是一个用于显示系统中 USB 总线及其所连接设备的信息的实用程序。

一个例子:

hani@My-FRIEND:~$ lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp.  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
Bus 002 Device 005: ID 8087:07dc Intel Corp.   
Bus 002 Device 004: ID 04f2:b3a3 Chicony Electronics Co., Ltd   
Bus 002 Device 003: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller  
Bus 002 Device 007: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive  
Bus 002 Device 002: ID 0458:0185 KYE Systems Corp. (Mouse Systems)   
Bus 002 Device 006: ID 1c4f:0002 SiGma Micro Keyboard TRACER Gamma   Ivory  
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

正如您所看到的,输出的第七行显示了有关当前插入计算机(通过 USB 端口)的闪存驱动器(USB 驱动器)的详细信息。

答案2

要检查已连接的 USB 磁盘,请查看/dev/disk/by-path/

ls -l /dev/disk/by-path/*usb*  | grep -v "part" | awk '{print $NF}'|  awk -F "/" '{print $NF}' | sort

上述命令的输出将仅列出 USB 磁盘。

grep -v "part"- 排除分区。

sdb
sdc

然后lsblk命令可以打印一些有用的信息,如模型和尺寸。


#!/bin/bash
for usb in $(ls -l /dev/disk/by-path/*usb*  | grep -v "part" | awk '{print $NF}'|  awk -F "/" '{print $NF}')
  do
   lsblk  -n -d -o NAME,MODEL,VENDOR,SIZE,RM /dev/$usb
done


检查 USB 磁盘分区的挂载位置

#!/bin/bash
for usbp in $(ls -l /dev/disk/by-path/usb  | grep "part" | awk '{print $NF}'|  awk -F "/" '{print $NF}')
  do
   findmnt -rno TARGET /dev/$usbp
done

答案3

我不太了解 nodeJS(我是 C++ 人员)但你可以检查/dev/文件夹中是否存在驱动器。

当我插入 U 盘时,我得到了文件/dev/sdc。如果我拔掉它,它 /dev/sdc就会消失。

以下是有关如何检查 shell 脚本中某个文件是否存在

相关内容