On a backup process the program has to copy tar.gz file to a mounted USB flash drive. The program (nodeJS) uses API child_process.exec() to run the shell script.
The function itself obtains the stdio.
So, using a shell script, how can I check whether the USBFlashDrive is disconnected/unplugged?
The device usually appears as sd[a-z]1 - please note the regex in the string.
3 Answers
I suggest
lsusbaccording to its author,
lsusbis a utility for displaying information about USB buses in the system and the devices connected to them.
An example:
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 hubSo as you see, the seventh line of the output shows details about the flash drive (USB drive) that is plugged in right now to the computer (via the USB port).
To check which USB disks are connected look in /dev/disk/by-path/
ls -l /dev/disk/by-path/*usb* | grep -v "part" | awk '{print $NF}'| awk -F "/" '{print $NF}' | sortThe output of previous command will list only usb disks.
grep -v "part" - excludes the partitions.
sdb
sdcThen lsblk command can print some useful info like model and size.
#!/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
doneTo check where the partitions of USB disks are mounted
#!/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 I don't know much about nodeJS (I am a C++ guy) but you can check the presence of drive in /dev/ folder.
When I plugged in my pen drive, I get file /dev/sdc. If I unplugged it then /dev/sdc vanishes .
Here is some more info about How to check if a file exists in a shell script