web-dev-qa-db-fra.com

Comment savoir quelle sdb est une clé USB?

J'ai écrit un script qui formate la clé USB et y place des supports. Il aide les gens d'une bibliothèque à obtenir un tas de code HTML et de médias dessus pour parcourir les données historiques (version officielle).

Tous mes scripts font bien le travail (formatage, montage, copie, démontage, dites "au revoir"). Mais un point: comment savoir quel appareil dois-je parcourir.

Une seule condition: il y a encore MAXimum 1 clé USB branchée.

Il y a généralement 3 personnes par jour qui viennent brancher leur clé (USB!) Dans la machine (cela ressemble à une machine à sous pour carte de crédit).

Ma question Aidez-moi, je ne sais pas quoi faire pour dire mon script:

Hé, le seul périphérique USB est/dev/sdX1

Ou

Hé, pas de clé USB dans mes E/S.

Je vous remercie

2
3pic

Ubuntu a une commande soignée udisksctl qui permet de rechercher des informations avec l'option info sur un périphérique bloc spécifié avec le -b drapeau.

Maintenant, si nous analysons la sortie de udiskctl pour chaque périphérique de bloc de a à z, et recherchons la chaîne 'usb' dedans, nous pouvons être sûrs qu'il s'agit d'un périphérique USB.

Ci-dessous est un script qui fait exactement cela:

#!/bin/bash

FOUND=0
for var in {a..z}; do 

    udisksctl info -b /dev/sd$var 2>/dev/null | grep -q 'usb'; 
    if [ $(echo $?) -eq 0 ]; then 
        echo " FOUND USB DEVICE /dev/sd$var "; 
        FOUND=1
    fi 


done 

if [ $FOUND -eq 0 ]; then
    echo "NO USB DEVICES FOUND"
fi

Nous avons là le drapeau FOUND, qui sert juste à imprimer "AUCUN PÉRIPHÉRIQUE USB TROUVÉ" si ... eh bien ... si aucun périphérique USB n'est trouvé! Sinon, si nous trouvons au moins un périphérique USB, nous mettons ce drapeau à 1 et nous l'ignorons.

Voici un exemple de sortie avec deux ports USB branchés puis retirés:

CURRENT DIR:[/home/xieerqi]
$ ./bin/sh/findusb.sh                                                                                                                         
 FOUND USB DEVICE /dev/sdb 
 FOUND USB DEVICE /dev/sdc 

CURRENT DIR:[/home/xieerqi]
$ ./bin/sh/findusb.sh                                                                                                                         
NO USB DEVICES FOUND

N'hésitez pas à modifier ce script en fonction de vos besoins.

1
Sergiy Kolodyazhnyy

Utilisation de find et awk

#!/bin/bash

# your code ...

# The name of your MAXimum 1 drive in /media/$USER
maximum1="MAXimum 1"

if [ -z "$(find /media/$USER/ -maxdepth 1 ! -path /media/$USER/ -type d |\
    awk '! /'"$maximum1"'/')" ]
then
    echo "Hey, the only USB device is $maximum1"
else
    echo "Hey, no USB pendrive in my I/O."
fi

# your code ...

Exemple

% ls -laog /media/$USER

total 24
drwxr-x---+ 3  4096 Aug 20 15:16 .
drwxr-xr-x  5  4096 Aug 18 08:43 ..
drwxr-xr-x  8 16384 Jan  1  1970 STORE N GO

% maximum1="STORE N GO"; if [ -z "$(find /media/$USER/ -maxdepth 1 ! -path /media/$USER/ -type d | awk '! /'"$maximum1"'/')" ]; then echo "Hey, the only USB device is $maximum1"; else echo "Hey, no USB pendrive in my I/O."; fi
Hey, the only USB device is STORE N GO

% maximum1="NOT STORE N GO"; if [ -z "$(find /media/$USER/ -maxdepth 1 ! -path /media/$USER/ -type d | awk '! /'"$maximum1"'/')" ]; then echo "Hey, the only USB device is $maximum1"; else echo "Hey, no USB pendrive in my I/O."; fi
Hey, no USB pendrive in my I/O.
1
A.B.