Kévin Subileau

Espace personnel

tux-disc

Images disques sous Linux en ligne de commande

Aujourd'hui je vous propose ce petit mémo des différentes commandes utiles à la création et à la gravure des fichiers ISO sous Linux, qui, contrairement à d'autres (suivez mon regard...), dispose à portée de main de tous les outils utiles pour gérer les images disques !

Création d'un ISO à partir d'un disque physique

Tout d'abord, insérez le disque dans le lecteur :P (non je ne suis pas en train de me moquez de vous...), puis tapez la commande suivante :

dd if=/dev/cdrom of=~/image.iso

La commande dd permet simplement d'effectuer une copie brute des données d'un point à un autre. Ici, on indique comme source (if pour input file) le fichier représentant le lecteur de DVD. Au passage, ajustez ce paramètre en fonction de votre distribution Linux. Sur certaines d’entre elles, ce fichier peut se nommer cdrom0, cdrom1, sr0 ou sr1 par exemple. Enfin, le paramètre of (pour output file) permet d'indiquer le chemin du fichier ISO de sortie. Là encore, adaptez ce chemin en fonction de ce que vous souhaitez.

Simplissime, non ? :D

Création d'un ISO à partir d'un dossier

La création d'une image disque à partir d'un dossier de fichiers est tout aussi simple. Cela s'effectue à l'aide de la commande mkisofs. Toutefois, sur certaines distributions, cette commande s’appelle désormais genisoimage suite à des problèmes de licences. Adaptez donc selon votre cas. Si aucune des deux commandes n'est présente, installez le paquet genisoimage.

Voici la syntaxe de la commande :

mkisofs -o ~/image.iso ~/dossier_source

Il vous suffit donc d'indiquer le chemin du fichier ISO en sortie ainsi que le chemin du dossier contenant les éléments à inclure dans l'image disque. La syntaxe de la commande genisoimage est identique, il vous suffit donc de remplacer le nom de la commande.

Monter une image

Pas besoin d'un Daemon tools vérolé pour monter une image disque sous Linux. Il vous suffit pour cela d'utiliser la commande.... mount bien sûr ! Voici la syntaxe à utiliser :

mount -t iso9660 -o loop image.iso /mnt/point_de_montage

On utilise ici le montage en boucle locale (loop), qui doit être activé dans les options de compilation du noyau pour que cette commande fonctionne, ce qui est fort heureusement le cas dans la plupart des distributions.

Gravure d'un ISO

La gravure est une opération un  peu plus délicate car il faut contrôler correctement les paramètres du graveur. Pour cette opération, il faut utiliser la commande wodim, fournie par le paquet du même nom. Pour les mêmes raisons que la commande mkisofs, cette commande se nomme cdrecord sur certaines distributions. Encore une fois, c'est à vous d'adapter. Voici la ligne de commande à utiliser :

wodim -v speed=4 dev=/dev/cdrom image.iso

Ici encore il faut modifier le nom du pseudo-fichier représentant votre graveur en fonction de votre système. Sachez également que la commande wodim permet également d'obtenir des informations sur votre graveur, de graver un CD audio ou encore d'effacer un DVD-RW. Consulter votre meilleur ami le man pour en savoir plus, ou votre second meilleur ami Google :D .

Convertir une image Nero (NRG) en ISO

Les précédentes astuces ne fonctionnent qu'avec des images au format ISO. Si vous avez des images disques issues de Nero au format propriétaire NRG, vous pouvez toutefois les convertir en ISO par deux méthodes. La méthode fainéante consiste à utiliser la commande nrg2iso du paquet éponyme.

nrg2iso image.nrg image.iso

La méthode un peu plus élaborée, mais qui reste assez simple, utilise la commande dd pour retirer simplement l'en-tête que Nero ajoute (c'est exactement ce que fait la commande nrg2iso, et rien de plus !) :

dd if=image.nrg of=image.iso bs=2048 skip=150

A noter que l'utilitaire nrg2iso existe aussi sous une version graphique pour Windows sur ce site.

Voilà, j'espère que ce mémo vous sera utile ! N'hésitez pas à le partager et à le commenter en ajoutant vos propres astuces autour de ce sujet :D

Ouvrir rapidement un invite de commande dans le dossier courant de l'explorateur

Sous Windows, il arrive régulièrement que l'on ait besoin d'ouvrir un invite de commande (CMD) dans un dossier particulier, souvent celui que l'on a sous les yeux dans l'explorateur de fichiers. Par exemple, après avoir créé et enregistrer un script Bat ou Python.

Pour faire cela rapidement, sans avoir à taper ou copier le chemin dans la console, une recherche sur Internet vous dirigera probablement vers une solution un peu bricolage, consistant à ajouter une entrée dans le menu contextuel via la modification d'une clé de registre. C'est en effet la solution que l'on trouve le plus souvent sur les forums ou autres blogs.

Il existe pourtant une astuce beaucoup plus simple, rapide et efficace ! En effet, lorsque vous êtes dans votre dossier de travail sur l'explorateur de fichiers, il suffit de cliquer dans la barre d'adresse, d'effacer son contenu, de taper cmd puis Entrer !

explorer-cmd-shortcut

A noter que vous pouvez également lancer plein d'autres commandes de cette manière, comme par exemple l'éditeur de Registre (regedit) ou une console Python en tapant python au lieu de cmd. Le dossier de travail de la console Python sera alors le même que celui affiché dans l'explorateur.

Si toutefois vous êtes un inconditionnel du clic-droit, il n'est tout de même pas nécessaire de modifier le registre pour ajouter manuellement une entrée au menu contextuel. Et pour cause, elle existe déjà ! Il suffit de maintenir la touche MAJ enfoncée puis de cliquer du bouton droit pour faire apparaitre le menu Ouvrir une fenêtre de commandes ici. Mais vous ne pourrez pas lancer autre chose que la console Windows de cette manière...

binary

Linux/Unix - Conversion de bases en ligne de commande

Saviez-vous qu'il est possible de convertir des nombres de bases en bases en ligne de commande ? Et pas seulement du décimal au binaire !

Il vous suffit pour cela d'utiliser la génialissime commande bc. Il s'agit d'un petit outil, présent sur la plupart des systèmes Linux/Unix, qui permet d'effectuer des calculs en tout genre en ligne de commande. L'avantage est que vous pouvez facilement intégrer cette commande dans un script, comme toute autre commande, et ainsi effectuer de nombreux calculs à la suite ou convertir des nombres issus d'une autre commande par exemple.

Assez de suspens, passons aux choses sérieuses ! Pour faire simple, je vous propose d'étudier ces quelques exemples (le $ symbolise le prompt du shell) :

Conversion du nombre 42 du décimal au binaire :

$ echo 'obase=2;42' | bc
101010

N'est-ce pas un joli nombre ?! Plus sérieusement, on utilise la commande echo pour envoyer les ordres de calcul à bc via un pipe.

Ces ordres consistent à spécifier la base de sortie (obase, pour output base), ici en binaire donc base 2, puis à donner le nombre que l'on souhaite convertir. Les ordres sont séparés par des points-virgules, ou des retours à la ligne (dans le cadre d'un script ou de la lecture des ordres depuis un fichier avec cat par exemple).

Conversion du nombre 101010 du binaire au décimal :

$ echo 'ibase=2;101010' | bc
42

Pour effectuer l'opération inverse à la précédente, il suffit de remplacer obase par ibase pour spécifier cette fois ci la base d'entrée (input base), ainsi que le nombre à convertir bien évidemment.

Conversion du nombre 2A de l'hexadécimal au binaire :

$ echo 'ibase=16;obase=2;2A' | bc
101010

Remarquez qu'il est tout à fait possible de combiner les deux instructions ibase et obase pour convertir directement un nombre d'une base à une autre sans passer par le décimal. Je pense que vous avez maintenant compris le principe.

Bonus : Conversion de secondes en heures, minutes et secondes :

$ echo 'obase=60;7520' | bc
02 05 20

Le temps s'exprimant en base 60, il est assez simple de convertir des secondes en heures, minutes et secondes (ou minutes en heures et minutes). Il suffit de spécifier la base 60 en sortie, et de donner le nombre de secondes à convertir. Ici 7520 secondes équivaut à 2 heures, 5 minutes et 20 secondes.

Bc gère en entrée toutes les bases de 2 à 16 compris. En sortie, il n'y a presque pas de limite, tant qu'il s'agit d'une base valide (les bases -5 ou 1 sont un peu difficiles à manier ! Plus de précision dans le man ;) )

Bonus 2 : création de commandes raccourcies :

Je vous l'accorde, la base 23 n'est pas la plus courante. Si vous utilisez comme moi plus régulièrement les bases binaire, décimal, ou hexadécimal, vous avez sans doute envie d'avoir des commandes un peu plus courtes à taper. C'est possible simplement en ajoutant ces quelques lignes à votre fichier ~/.bashrc :

# Hexadécimal vers décimal
h2d(){
  echo "ibase=16; $@" | tr -s ' ' ';' | bc
}
# Décimal vers hexadécimal
d2h(){
  echo "obase=16; $@" | tr -s ' ' ';' | bc
}

# Binaire vers décimal
b2d(){
  echo "ibase=2; $@" | tr -s ' ' ';' | bc
}
# Décimal vers binaire
d2b(){
  echo "obase=2; $@" | tr -s ' ' ';' | bc
}

L'utilisation est ensuite très simple, il suffit de tapez le nom de la commande raccourcie suivi du nombre ou de la liste de nombres à convertir. Par exemple, pour convertir 101010 et 101011 du binaire au décimal :

$ b2d 101010 101011
42
43

Vous pouvez bien sûr changer le nom de ces commandes ou créer vos propres raccourcis en fonction des bases que vous utilisez le plus fréquemment.

Pour terminer, si vous souhaitez en savoir un peu plus sur bc, n'oubliez pas de consulter, comme toujours, son manuel (man bc). Vous pouvez également vous documenter sur Internet : cette page par exemple est plutôt bien détaillé.