Le code source est décrit en bas de l'article, veuillez donc le sauvegarder dans un fichier avant utilisation.
Exécutez la commande suivante.
sudo sh "createLiveMedia.chemin sh" "chemin du fichier iso"
C'est un fichier iso, mais tout autre fichier est possible.
(1) Une liste des périphériques connectés s'affichera comme indiqué ci-dessous. Entrez l'index du périphérique sur lequel écrire (le périphérique affiché changera en fonction de votre environnement).
INDEX TRAN SIZE MODEL NAME
1 sata 465.8G HGST HTS545050A7 /dev/sda
2 sata 119.2G SSM128GPTC0-S91 /dev/sdb
3 usb 2.7T HDCZ-UT /dev/sdc
4 usb 60.4G Multi-Card /dev/sdd
5 usb 3.8G Cruzer Colors+ /dev/sde
6 sata 1024M DVD-RAM UJ8E2 /dev/sr0
Spécifiez l'index du périphérique sur lequel écrire:
(2) Une liste des partitions montées et un message de confirmation vous demandant si vous voulez démonter seront affichés comme indiqué ci-dessous (si la partition montée n'existe pas, elle sera ignorée).
/dev/sde1
Il y a une partition montée. Êtes-vous sûr de vouloir le démonter?[y/n]:
(3) Un message de confirmation s'affiche pour vous demander si vous souhaitez écrire.
Toutes les données de l'appareil spécifié seront supprimées. Est-ce que c'est bon?[y/n]:
(4) Lorsque l'écriture est terminée, "L'écriture est terminée." S'affiche.
Ce script shell est publié sous une licence de manuel (licence originale).
En utilisant ce produit, il est considéré que vous avez accepté la licence du manuel (voir l'article ci-dessous pour plus de détails).
(Conditions d'utilisation) Aucune condition ne doit être respectée pour utiliser ce produit.
(Clause de non-responsabilité 1) Le titulaire des droits de ce produit ne pourra être tenu responsable des dommages causés par l'utilisation de ce produit.
(Clause de non-responsabilité 2) Nous ne garantissons pas que ce produit puisse être utilisé dans tous les cas.
(Question et réponse supposées)
Q: Quel type d'action correspond à «utiliser ce produit»?
R: Toutes les actions liées à ce produit sont applicables.
createLiveMedia.sh
#!/bin/sh
#Étant donné que ce script shell contient des opérations qui nécessitent des privilèges d'administrateur (commande umount et écriture dans des fichiers de périphérique), il requiert des privilèges d'administrateur lors de l'exécution.
#La commande umount n'est pas requise, mais si elle n'est pas démontée, le périphérique correspondant de Linux après traitement n'est pas reconnu (il sera traité comme le montage d'une partition qui n'existe pas).
#La commande sync n'est pas requise, mais si une écriture différée est en cours d'exécution, elle peut être affichée comme terminée même si l'écriture est en cours.
#Il est possible d'écrire sur un support optique, mais c'est limité (seul le DVD peut être gravé normalement)+RW, DVD-RAM, BD-Seulement 3 types d'ER. Cependant, tous ne peuvent pas être écrits à l'état non formaté).
println(){
printf "%s" "$1"
echo ""
}
throwException(){
printf "%s" "$1"
echo ""
exit 1
}
[ "$(uname)" != "Linux" ] && throwException "Ce script shell contient des commandes qui ne sont disponibles que sous Linux et ne peuvent pas être exécutées sur votre système d'exploitation."
[ -z "$(type lsblk 2> /dev/null)" ] && throwException "La commande lsblk n'est pas installée dans votre environnement."
[ -z "$(type umount 2> /dev/null)" ] && throwException "La commande umount n'est pas installée dans votre environnement."
[ -z "$(type sync 2> /dev/null)" ] && throwException "La commande sync n'est pas installée dans votre environnement."
[ $# -ne 1 ] && throwException "Le nombre d'arguments n'est pas valide. Le nombre d'arguments doit toujours être 1."
isoFile=$1
[ ! -e "${isoFile}" ] && throwException "Le fichier demandé n'a pas été trouvé."
[ "$(id -u)" -ne 0 ] && throwException "Ce script shell contient des opérations qui nécessitent des privilèges d'administrateur et ne peuvent pas être exécutées par des utilisateurs généraux."
view="$(lsblk -d -l -p -o TRAN,SIZE,MODEL,NAME)"
view="$(println "${view}" | nl -v 0 -w 5 -s " " | sed -e "1 s/^ *0/INDEX/")"
deviceList="$(println "${view}" | sed -e "1d" | sed -e "s/^.* \{1,\}//")"
[ -z "${deviceList}" ] && throwException "Il n'y avait aucun appareil à choisir."
println "${view}"
printf "%s" "Spécifiez l'index du périphérique sur lequel écrire:"
read -r index
index="$(println "${index}" | grep "^[1-9][0-9]*$")"
[ -z "${index}" ] && throwException "Saisissez le numéro affiché dans la colonne INDEX."
[ "${index}" -gt "$(println "${deviceList}" | wc -l)" ] && throwException "Saisissez le numéro affiché dans la colonne INDEX."
deviceFile="$(println "${deviceList}" | sed -n "${index}p")"
partitionList="$(lsblk "${deviceFile}" -l -n -p -o NAME)"
partitionCount="$(println "${partitionList}" | wc -l)"
while [ "${partitionCount}" -ge 1 ]; do
partitionFile="$(println "${partitionList}" | sed -n "${partitionCount}p")"
mountDir="$(lsblk "${partitionFile}" -d -l -n -o MOUNTPOINT 2> /dev/null)"
if [ -z "${mountDir}" ]; then
partitionList="$(println "${partitionList}" | sed -e "${partitionCount}d")"
fi
partitionCount="$((partitionCount - 1))"
done
if [ -n "${partitionList}" ]; then
println "${partitionList}"
printf "%s" "Il y a une partition montée. Êtes-vous sûr de vouloir le démonter?[y/n]:"
read -r canUnmount
canUnmount="$(println "${canUnmount}" | grep "^[Yy]$")"
[ -z "${canUnmount}" ] && throwException "Le traitement a été annulé car un élément autre que y a été saisi."
partitionCount="$(println "${partitionList}" | wc -l)"
while [ "${partitionCount}" -ge 1 ]; do
partitionFile="$(println "${partitionList}" | sed -n "${partitionCount}p")"
[ -n "$(umount "${partitionFile}" 2>&1)" ] && throwException "Le traitement a été annulé car une erreur s'est produite lors du démontage."
partitionCount="$((partitionCount - 1))"
done
fi
printf "%s" "Toutes les données de l'appareil spécifié seront supprimées. Est-ce que c'est bon?[y/n]:"
read -r canExecute
canExecute="$(println "${canExecute}" | grep "^[Yy]$")"
[ -z "${canExecute}" ] && throwException "Le traitement a été annulé car un élément autre que y a été saisi."
dd bs=64k if="${isoFile}" of="${deviceFile}" && sync && println "L'écriture est terminée."