Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

lundi 23 janvier 2017

Monter disques et clés usb sans être administrateur avec udisksctl

Sous Linux, les médias amovibles sont généralement montés par un clic depuis l'environnement graphique, celui-ci effectue alors le montage en tant qu'utilisateur avec toutes les options nécessaires après avoir créé un point de montage.

Cette façon de faire présente les avantages suivants:

  • Il n'est pas besoin d'être administrateur, i.e. root pour effectuer le montage
  • Le point de montage est créé pour nous
  • Les options de montage sont positionnées pour nous, en particulier celles qui font que le média est en lecture/écriture pour l'utilisateur et non uniquement pour root

L'autre façon de faire étant de passer une commande mount en root avec toutes les options utiles.

Pour monter un média amovible depuis un terminal à la façon de faire de l'environnement graphique, on peut utiliser la commande udisksctl.

Il suffit pour cela de connaître le device du média ou clé USB:

user@machine:~$ udisksctl mount -b /dev/sdc1
Mounted /dev/sdc1 at /media/user/my-data.

On peut aussi utiliser l'option longue:

user@machine:~$ udisksctl mount --block-device /dev/sdc1
Mounted /dev/sdc1 at /media/user/my-data.

Et vous aurez remarqué que je ne suis pas connecté en root.

Vérifions que les options de montage sont correctes:

user@machine:~$ mount | grep sdc
/dev/sdc1 on /media/user/my-data type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

Un montage depuis un clic avec Mate n'aurait pas fait mieux.

Et pour démonter ce volume:

user@machine:~$ udisksctl unmount -b /dev/sdc1
Unmounted /dev/sdc1.

Ces commandes sont évidemment utilisables dans un script même si la manpage d'udisksctl ne le recommande pas.

jeudi 19 janvier 2017

Vérifier (proprement) si un volume est monté ou non

Sous Linux, les disques durs amovibles et autres clés USB peuvent être montés de manière automatique ou non.

Lorsque ces derniers sont utilisés à des fins de sauvegarde on a besoin de vérifier si le média de sauvegarde est disponible ou non.

Imaginons que notre disque externe de sauvegarde soit monté sur /media/backup, une première façon de vérifier si on peut procéder à la sauvegarde consiste à vérifier si le répertoire de montage est vide:

mount_point="/media/external-backup"

Puis:

if [ "$(ls -A $mount_point)" ]; then
    echo "Backup disk is present."
fi

ça n'est pas très élégant mais cela fonctionne.

On peut aussi "parser" la sortie standard de la commande mount:

if mount | grep $mount_pount >/dev/null; then
    echo "Backup disk is present."
fi

C'est déjà un peu plus propre mais on peut faire encore mieux. En effet, la commande mountpoint est là pour cela:

if mountpoint -q $mount_point; then
    echo "Backup disk is present."
fi

Je vous fait grâce des méthodes (sales) qui consistent à parser les fichier /etc/mtab ou /procs/mounts.

vendredi 13 janvier 2017

Trier les fichiers et répertoires sous Linux par taille

Quand on doit archiver le contenu d'un répertoire ou qu'on manque de place sur un système de fichiers, la question de savoir quels fichiers ou répertoires occupent le plus d'espace se pose nécessairement.

On voit beaucoup de commandes sur Internet pour trier les fichiers et répertoires sous Linux, à base de find, ls, plus ou moins compliquées, alors que Linux fournit nativement une commande simple pour cet usage, la commande du, qui signifie "disk usage".

Par défaut, la commande du affiche la place utilisée dans chaque répertoire dans /var/log:

du /var/log
1140    /var/log/cups
32      /var/log/mysql
12      /var/log/fsck
48      /var/log/exim4
8       /var/log/dbconfig-common
104     /var/log/apt
4       /var/log/firebird
36      /var/log/lightdm
32      /var/log/tor
4       /var/log/speech-dispatcher
88      /var/log/apache2
14516   /var/log/installer/cdebconf
16724   /var/log/installer
27636   /var/log

Il s'agit de l'espace cumulé dans chaque répertoire: le chiffre affiché pour /var/log/installer tient compte de l'espace occupé par /var/log/installer/cdebconf.

Si on veut que du affiche strictement ce qui est occupé par chaque répertoire, il faut utiliser l'option -S:

du -S /var/log/installer/
14516   /var/log/installer/cdebconf
2208    /var/log/installer/

On retrouve bien que 14516 + 2208 font 16724.

Si vous n'êtes pas convaincus:

du /var/log/installer/
14516   /var/log/installer/cdebconf
16724   /var/log/installer/

Voià pour la base.

Maintenant, on peut obtenir un affiche plus sympatique avec l'option -h, --human-readable:

du -Sh /var/log/
1,2M    /var/log/cups
32K     /var/log/mysql
12K     /var/log/fsck
48K     /var/log/exim4
8,0K    /var/log/dbconfig-common
104K    /var/log/apt
4,0K    /var/log/firebird
36K     /var/log/lightdm
32K     /var/log/tor
4,0K    /var/log/speech-dispatcher
88K     /var/log/apache2
15M     /var/log/installer/cdebconf
2,2M    /var/log/installer
9,2M    /var/log/

Et si on cherche les répertoires qui occupent le plus de place, il suffit de faire appel à la commande sort:

du -Sh /var/log/ | sort -hr
15M     /var/log/installer/cdebconf
9,2M    /var/log/
2,2M    /var/log/installer
1,2M    /var/log/cups
104K    /var/log/apt
88K     /var/log/apache2
48K     /var/log/exim4
36K     /var/log/lightdm
32K     /var/log/tor
32K     /var/log/mysql
12K     /var/log/fsck
8,0K    /var/log/dbconfig-common
4,0K    /var/log/speech-dispatcher
4,0K    /var/log/firebird

Le flag -h de sort signifie --human-numeric-sort, et le flag -r signifie -reverse.

Et si en plus de l'espace occupé par les répertoires, je souhaite inclure celui des fichiers, il faut ajouter aux options de du le flag -a, --all.

Enfin, quand la commande du nous retourne trop de résultats, on peut en limiter l'affichage par un | head -n 25 par exemple.

- page 1 de 39