Publiez le script shell créé pour réduire les problèmes de création de LiveUSB sous Linux

Le code source est décrit en bas de l'article, veuillez donc le sauvegarder dans un fichier avant utilisation.

Méthode d'exécution

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.

Mode opératoire

(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.

Licence applicable

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.

Code source

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."

Postscript

Recommended Posts

Publiez le script shell créé pour réduire les problèmes de création de LiveUSB sous Linux
[Démarrage du shell] J'ai essayé d'afficher le shell sur le téléviseur avec un G-cluster à carte Linux bon marché
Branche conditionnelle en raison de l'existence d'un fichier de script shell
Créer un script shell pour écrire un journal
J'ai essayé de mesurer le temps d'attente de la file d'attente d'exécution d'un processus sous Linux
J'ai écrit un script pour relancer la montre gulp qui mourra bientôt
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police
"Arrêtez de soumettre des fichiers japonais à git sur Mac> <" Pour le moment, j'ai écrit un script pour rechercher des fichiers japonais incompatibles sur Mac et Linux.
[OCI] Script Python pour obtenir l'adresse IP d'une instance de calcul dans Cloud Shell
[Linux] Copie des données de Linux vers Windows avec un script shell
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
J'ai essayé de créer un script qui retrace les tweets d'un utilisateur spécifique sur Twitter et enregistre l'image publiée à la fois
Traitez le contenu du fichier dans l'ordre avec un script shell
J'ai essayé de créer un environnement de MkDocs sur Amazon Linux
[Linux] J'ai essayé de résumer les commandes de confirmation des ressources
Script Shell (Linux, macOS) qui affiche la date de la semaine dernière
J'ai créé une bibliothèque Python pour appeler l'API de LINE WORKS
Créez un script shell pour exécuter le fichier python plusieurs fois
Sous Linux, l'horodatage d'un fichier est un peu dépassé.
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
Une note à laquelle j'étais accro lors de l'émission d'un bip sous Linux
Je viens d'écrire un script pour construire Android sur une autre machine
Comment afficher le résultat de sortie de la commande man Linux dans un fichier
J'ai essayé d'enregistrer une station sur la plateforme IoT "Rimotte"
Une commande pour vérifier facilement la vitesse du réseau sur la console
Comment mettre à jour la version Python de Cloud Shell dans GCP
J'ai découvert en créant un script python pour enregistrer radiko tout en lisant le code des prédécesseurs
Comment exécuter le code pratique du livre "Making Profitable AI with Python" sur Google Colaboratory
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
Une histoire sur la création d'un programme qui augmentera le nombre d'abonnés Instagram de 0 à 700 en une semaine
J'ai refactoré "J'ai essayé de faire un script qui enregistre les images postées à la fois en retournant sur les tweets d'un utilisateur spécifique sur Twitter".
Une histoire à laquelle j'étais accro à essayer d'installer LightFM sur Amazon Linux
J'ai fait une minuterie de cuisine à afficher sur la barre d'état!
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
Générer semi-automatiquement une description du package à enregistrer dans PyPI
Écrivain AtCoder J'ai écrit un script qui regroupe les concours pour chaque écrivain
Je souhaite trier une liste dans l'ordre des autres listes
Un script shell pour se souvenir à nouveau du shell pipenv
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
[Linux] J'ai essayé de vérifier la méthode de confirmation sécurisée du FQDN (CentOS7)
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
Folding @ Home sur Linux Mint pour contribuer à l'analyse du nouveau virus corona
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
L'histoire de la création de Botonyan qui renvoie le contenu de Google Docs en réponse à un mot-clé spécifique sur Slack
J'ai créé un utilisateur uniquement SFTP sous Linux.
Script pour changer la description de fasta
Je veux utiliser Linux sur mac
[Ubuntu] Comment exécuter un script shell