Lister les clefs usb branchées

clé-usb
Tags: #<Tag:0x00007fdf394463b0>

#1

Hello à toutes et tous :slight_smile:

Me revoile pour vosu demander encore de l’aide :slight_smile:

Pour mon projet, je mets en place un système de mise à jour via clef usb branchée sur le nanopc.

Voici la grosse partie du script :

if [ -f "/diagbox/web/tmp/clefusb_resultat" ];then
	sudo rm /diagbox/web/tmp/clefusb_resultat
fi

echo "verif dossier /tmp/usb"
if [ -d "/tmp/usb" ];then
	if sudo umount /tmp/usb;then
		echo "ok"
		if sudo rm -R /tmp/usb;then
		echo "ok"
		else
			sudo echo 'echec remove tmp/usb'	>> /diagbox/web/tmp/clefusb_resultat
		fi
	else
		if sudo rm -R /tmp/usb;then
		echo "ok"
		else
			sudo echo 'echec umount et remove tmp/usb '	>> /diagbox/web/tmp/clefusb_resultat
		fi
	fi
fi

#Vide le dossier iso
echo "vider le dossier stock iso"
if sudo rm -rf /StockImg/*; then
	echo "ok"
else
	sudo echo 'echec vider dossier iso'	>> /diagbox/web/tmp/clefusb_resultat
	ledoff
	exit
fi

echo "recuperer la clef usb"
if sudo mkdir /tmp/usb;then
	echo "ok"
else
	echo "echec creation /tmp/usb"	>>/diagbox/web/tmp/clefusb_resultat
	ledoff
	exit
fi

if sudo mount /dev/sda1 /tmp/usb;then
	echo "ok"
else
	echo "echec mount" >>/diagbox/web/tmp/clefusb_resultat
	ledoff
	exit
fi

if sudo cp /tmp/usb/diagbox.maj /StockImg/diagbox.maj;then
	echo "ok"
	exit
else
	echo "echec copie" >>/diagbox/web/tmp/clefusb_resultat
	ledoff
	exit
fi

Comme vous pouvez le voir je force l’utilisation de /dev/sda1, vu que je branche une clef à la fois.

Cependant, je souhaite anticiper et me dire que certaines personnes peuvent en brancher plusieurs.

Du coups, j’aimerais etablir une liste des clef usb branchées et l’editer dans un fichier texte, que je pourrai exploiter pour mon interface web.

quelqu’un aurait une idée :slight_smile: ?

Merci par avance


#2

Salut

lsusb -v

donne les informations sur le bus usb

A chaque fois que j’insère une clé , j’y vois

bInterfaceClass         8 Mass Storage

Sur un système standard les clés sont montées automatiquement dans /media

lsblk | grep media

#3

Hello
Merci pour tes idées.
Je vais les essayer et voir si ça peut m’aider dans ma démarche.
Merci encore :slight_smile:


#4

Re,

J’ai trouvé ce que je voulais faire :slight_smile: :slight_smile: :slight_smile:

ls /dev/[hs]d[a-z][0-9]

Après pour le sortir dans un fichier texte

ls /dev/[hs]d[a-z][0-9] >>/tmp/test_clef_usb


#5

je ne vois pas en quoi ça liste des clés usb

ça ne liste que mon disque dur :joy:

ls /dev/[hs]d[a-z][0-9]
/dev/sda1  /dev/sda2  /dev/sda5  /dev/sda6

 sudo fdisk -l
       
Disque /dev/sda : 298,1 GiB, 320072933376 octets, 625142448 secteurs
Modèle de disque : Hitachi HTS72503
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x00038c4c

Périphérique Amorçage    Début       Fin  Secteurs Taille Id Type
/dev/sda1    *            2048  40011775  40009728  19,1G 83 Linux
/dev/sda2             40011776 625142447 585130672   279G  5 Étendue
/dev/sda5             40013824  55717887  15704064   7,5G 82 partition d'échange Linux / Solaris
/dev/sda6             55719936 625141759 569421824 271,5G 83 Linux

#6

Chez moi ca voit mes deux clefs :slight_smile:


#7

Oui, mais pas uniquement non ?


#8

je travaille sur des nanocartes du style raspberry,
donc l’os est sur une sdcard,
et avec le script mis en haut je ne vois pas cette dernière dedans,
J’essaierai sur une machine virtuelle debian dans un “vrai pc” :slight_smile:


#9

Tu peux peut-être regarder comment c’est programmé dans bashmount.


#10

salut
tu pourrais aussi faire un
i=$(tail /var/log/messages |grep -i "Attached SCSI removable disk" |sed 's/.*\].*\[\(.*\)\]\ Attached\ SCSI\ removable\ disk.*/\1/') && fdisk -l /dev/$i |egrep "/dev/"$i"[0-9]" |sed "s/^\([^ ]*\)\ .*\ \([0-9a-fA-F][0-9a-fA-F]\)\ .*/\1 \2/"
ce qui donne sur une clé avec 2 partitions linux :
/dev/sdf1 83
/dev/sdf2 83

PS
la variable i est égale à /dev/sdf
j’ai mis un tail plutot qu’un cat car la variable i devient, par exemple,
sdf sdg sdf sdf sdg sdf sdg sdf sdf sdf sdf sdf sdf sdf sdf sdf
avec un cat
il faut nettoyer un peu le code :slight_smile:

PPS
commentaire du code :

  1. `i=$(tail /var/log/messages |grep -i “Attached SCSI removable disk”
    |sed ‘s/.].[(.)]\ Attached\ SCSI\ removable\ disk./\1/’)

1.1 tail /var/log/messages : on cherche dans les 10 dernières lignes du fichier messages, si on trouve la chaine de caractères Attached SCSI removable disk , ce qui donne par exemple

` Apr 9 13:30:34 de5A kernel: [ 2413.954981] sd 18:0:0:0: [sdf] Attached SCSI removable disk

1.2 A cette ligne on filtre et on garde sdf :en supposant que la ligne est
` …]…[sdf] Attached SCSI removable disk…

1.3 finalement , i=sdf

  1. fdisk -l /dev/$i |egrep “/dev/”$i"[0-9]" |sed “s/^([^ ])\
    .
    \ ([0-9a-fA-F][0-9a-fA-F])\ .*/\1 \2/”`

2.1 fdisk -l /dev/$i donne les infos sur /dev/sdf,

2.2 ` |egrep “/dev/”$i"[0-9]" filtrées pour n’avoir que celles avec des partitions ( on enlève /dev/sdf, on garde /dev/sdf1 )
on a alors

`/dev/sdf1 2048 10242047 10240000 4,9G 83 Linux
/dev/sdf2 10242048 61472767 51230720 24,4G 83 Linux

2.3 |sed "s/^\([^ ]*\)\ .*\ \([0-9a-fA-F][0-9a-fA-F]\)\ .*/\1 \2/"
on filtre en supposant que la ligne s’écrit
blahblah sans espace , espace , 2 hexas , espace ; on garde blahblah et les 2 hexas


#11

Merci :slight_smile: je jetterai un coups d’oeil


#12

Ça c’est du code lol.
Je vais prendre le temps de le comprendre et l’essayer.
Merci tout cas :slight_smile:


#13

Re à toutes et tous :slight_smile:

J’arrive à éditer la liste des disques et clefs branchées sur ma tinkerboard via le script en dessous.
(en tout cas ça fonctionne sur ma nanocarte :slight_smile: )

#Recupère les infos sur les clefs usb
if sudo ls /dev/[hs]d[a-z][0-9] >>$resultat;then
	echo "ok"
	echo "fin" >>$resultat
else
	echo "echec" >>$resultat
	ledoff
	exit
fi

Maintenant, je m’attaque à une autre chose : récupérer les capacités de chaque disque.
en utilisant fdisk -l /dev/sdb1 j’obtiens :

Disk /dev/sdb1: 14.7 GiB, 15733127168 bytes, 30728764 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x69205244

Et en fait, je cherche à extraire cette partie seulement :

/dev/sdb1: 14.7 GiB

J’ai cherché les commandes awk, cut, grep mais en vain, je ne les manipule pas encore bien.

Si quelqu’un a une idée je le remercie d’avance :slight_smile:


#14

u ntruc genre

fdisk -l /dev/sda1 |head -n 1|sed 's#.*/dev/\([^ ]*\)[^0-9]\([0-9].*\)\ GiB.*#/dev/\1 \2 GiB#'

/dev/sda1 : 29,3 GiB
sed est vraiment le mieux : multitache , multiutilisation, simple à mettre en oeuvre


#15

moi je m’amuse avec cut

sudo fdisk -l /dev/sda1 |head -1|cut -dB -f 1

sudo fdisk -l /dev/sda1 |head -1|cut -dB -f 1
Disque /dev/sda1 : 19,1 Gi

ou plus simple pour l’ensemble du disque

sudo fdisk -l |head -1|cut -c 1-28

sudo fdisk -l |head -1|cut -c 1-28
Disque /dev/sda : 298,1 GiB


#16

héhé
mon man cut ne donne rien avec -dB :slight_smile: héhé normal, c’est B qui coupe
j’aime bien cut aussi mais , comme toi ici , presque uniquement quand je ne garde que le début .


#17

Mieux avec une clé usb connectée

sudo fdisk -l |grep Disque|cut -c 1-28

sudo fdisk -l |grep Disque|cut -c 1-28
Disque /dev/sda : 298,1 GiB
Disque /dev/zram0 : 128 MiB
Disque /dev/zram1 : 128 MiB
Disque /dev/sdb : 3,7 GiB,

Mais c’est pas satisfaisant car le nombre de caractères édité en sortie dépends de la taille du disque, à affiner donc.


#18

Hello
Merci pour ton aide :slight_smile:
Cependant sur ma machine ca ne fonctionne pas, ca me renvoie une ligne vide :frowning:


#19

Hello
Merci pour ton aide :slight_smile:
Ca se rapproche de ce que je cherche

 root@diagbox:/diagbox/web/tmp# fdisk -l /dev/sda5 | grep Disk | cut -c 1-28
Disk /dev/sda5: 14.3 GiB, 15
Disklabel type: dos
Disk identifier: 0x69205244

Le petit peaufinage serait à enlever les dernieres lignes et le 15 en fin de première :slight_smile:
Je sais qu’il y a une commande qui permet de remplacer le Disk, je vais la chercher :slight_smile:
Merci encore en tout cas


#20

J’ai réussi je pense :stuck_out_tongue:

qu’en pensez vous?

#!/bin/bash !/bin/bash
function ledon
{
sudo python /diagbox/web/scripts/gpio/led_32_on.py
sudo python /diagbox/web/scripts/gpio/led_10_on.py
}
function ledoff
{
sudo python /diagbox/web/scripts/gpio/led_32_off.py 
sudo python /diagbox/web/scripts/gpio/led_10_off.py
}

readonly resultat=/diagbox/web/tmp/resultat_choix_usb 
readonly resultat_capacite=/diagbox/web/tmp/resultat_capacite_usb
readonly resultat1=/diagbox/web/tmp/resultat_choix_usb1 

#Allume les leds
ledon

#Verifie presence de fhichiers résultats antérieurs
	#recupération des clefs usb
if [ -f $resultat ];then
	sudo rm $resultat 
fi

if [ -f $resultat1 ];then
	sudo rm $resultat1 
fi
	#capacités
if [ -f $resultat_capacite ];then
	sudo rm $resultat_capacite
fi

#Recupère les infos sur les clefs usb
if sudo ls /dev/[hs]d[a-z][0-9] >>$resultat;then
	echo "ok"
	echo "fin" >>$resultat
else
	echo "echec" >>$resultat
	ledoff
	exit
fi

if sudo ls /dev/[hs]d[a-z][0-9] >>$resultat1;then
	echo "ok"
else
	echo "echec" >>$resultat1
	ledoff
	exit
fi

#Recupérer la capacité des clefs usb
while read line 
do 
sudo fdisk -l $line | sed 's/Disk/clef usb/g' | grep "clef usb" | cut -d ' ' -f1-5 | sed '2,20d' >>$resultat_capacite
done <$resultat1

exit