Veröffentlichen Sie das erstellte Shell-Skript, um die Probleme beim Erstellen von LiveUSB unter Linux zu verringern

Der Quellcode wird am Ende des Artikels beschrieben. Bitte speichern Sie ihn vor der Verwendung in einer Datei.

Ausführungsmethode

Führen Sie den folgenden Befehl aus.

   sudo sh "createLiveMedia.sh Pfad" "ISO-Dateipfad"

Es ist eine ISO-Datei, aber jede andere Datei ist möglich.

Funktionsweise

(1) Eine Liste der angeschlossenen Geräte wird wie folgt angezeigt. Geben Sie den Index des Geräts ein, auf das geschrieben werden soll (das angezeigte Gerät ändert sich je nach Umgebung).

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
Geben Sie den Index des Geräts an, in das geschrieben werden soll:

(2) Eine Liste der bereitgestellten Partitionen und eine Bestätigungsmeldung, in der Sie gefragt werden, ob Sie die Bereitstellung aufheben möchten, werden wie unten gezeigt angezeigt (wenn die bereitgestellte Partition nicht vorhanden ist, wird sie übersprungen).

/dev/sde1
Es gibt eine gemountete Partition. Sind Sie sicher, dass Sie es aushängen möchten?[y/n]:

(3) Es wird eine Bestätigungsmeldung angezeigt, in der Sie gefragt werden, ob Sie schreiben möchten.

Alle Daten auf dem angegebenen Gerät werden gelöscht. Ist es o.k?[y/n]:

(4) Wenn der Schreibvorgang abgeschlossen ist, wird "Schreibvorgang abgeschlossen" angezeigt.

Anwendbare Lizenz

Dieses Shell-Skript wird unter einer Lehrbuchlizenz (Originallizenz) veröffentlicht.

Bei Verwendung dieses Produkts wird davon ausgegangen, dass Sie die Lehrbuchlizenz akzeptiert haben (Einzelheiten finden Sie im folgenden Artikel).

(Nutzungsbedingungen) Bei der Verwendung dieses Produkts müssen keine Bedingungen beachtet werden.
(Haftungsausschluss 1) Der Rechteinhaber dieses Produkts haftet nicht für Schäden, die durch die Verwendung dieses Produkts verursacht werden.
(Haftungsausschluss 2) Wir garantieren nicht, dass dieses Produkt in jedem Fall verwendet werden kann.

(Angenommene Frage und Antwort)
F: Welche Art von Aktion entspricht "Verwenden dieses Produkts"?
A: Alle mit diesem Produkt verbundenen Aktionen sind anwendbar.

Quellcode

createLiveMedia.sh


#!/bin/sh
#Da dieses Shell-Skript Vorgänge enthält, für die Administratorrechte erforderlich sind (Befehl umount und Schreiben in Gerätedateien), sind zur Laufzeit Administratorrechte erforderlich.
#Der Befehl umount ist nicht erforderlich, aber wenn er nicht ausgehängt ist, wird das entsprechende Gerät unter Linux nach Abschluss des Vorgangs nicht erkannt (es wird als Mounten einer nicht vorhandenen Partition behandelt).
#Der Synchronisierungsbefehl ist nicht erforderlich. Wenn jedoch ein verzögertes Schreiben ausgeführt wird, wird er möglicherweise als abgeschlossen angezeigt, obwohl gerade geschrieben wird.
#Es ist möglich, auf optische Medien zu schreiben, dies ist jedoch begrenzt (nur DVD kann normal geschrieben werden).+RW, DVD-RAM, BD-Nur 3 Arten von RE. Sie können jedoch nicht alle im unformatierten Zustand geschrieben werden.

println(){
    printf "%s" "$1"
    echo ""
}

throwException(){
    printf "%s" "$1"
    echo ""
    exit 1
}

[ "$(uname)" != "Linux" ] && throwException "Dieses Shell-Skript enthält Befehle, die nur unter Linux verfügbar sind und auf Ihrem Betriebssystem nicht ausgeführt werden können."
[ -z "$(type lsblk 2> /dev/null)" ] && throwException "Der Befehl lsblk ist in Ihrer Umgebung nicht installiert."
[ -z "$(type umount 2> /dev/null)" ] && throwException "Der Befehl umount ist in Ihrer Umgebung nicht installiert."
[ -z "$(type sync 2> /dev/null)" ] && throwException "Der Synchronisierungsbefehl ist in Ihrer Umgebung nicht installiert."
[ $# -ne 1 ] && throwException "Die Anzahl der Argumente ist ungültig. Die Anzahl der Argumente muss immer 1 sein."

isoFile=$1
[ ! -e "${isoFile}" ] && throwException "Die gesuchte Datei wurde nicht gefunden."
[ "$(id -u)" -ne 0 ] && throwException "Dieses Shell-Skript enthält Vorgänge, für die Administratorrechte erforderlich sind und die von allgemeinen Benutzern nicht ausgeführt werden können."

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 "Es gab keine Geräte zur Auswahl."

println "${view}"
printf "%s" "Geben Sie den Index des Geräts an, in das geschrieben werden soll:"
read -r index
index="$(println "${index}" | grep "^[1-9][0-9]*$")"
[ -z "${index}" ] && throwException "Geben Sie die in der Spalte INDEX angezeigte Nummer ein."
[ "${index}" -gt "$(println "${deviceList}" | wc -l)" ] && throwException "Geben Sie die in der Spalte INDEX angezeigte Nummer ein."

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" "Es gibt eine gemountete Partition. Sind Sie sicher, dass Sie es aushängen möchten?[y/n]:"
    read -r canUnmount
    canUnmount="$(println "${canUnmount}" | grep "^[Yy]$")"
    [ -z "${canUnmount}" ] && throwException "Die Verarbeitung wurde abgebrochen, weil etwas anderes als y eingegeben wurde."

    partitionCount="$(println "${partitionList}" | wc -l)"
    while [ "${partitionCount}" -ge 1 ]; do
        partitionFile="$(println "${partitionList}" | sed -n "${partitionCount}p")"
        [ -n "$(umount "${partitionFile}" 2>&1)" ] && throwException "Die Verarbeitung wurde abgebrochen, da beim Aufheben der Bereitstellung ein Fehler aufgetreten ist."

        partitionCount="$((partitionCount - 1))"
    done
fi

printf "%s" "Alle Daten auf dem angegebenen Gerät werden gelöscht. Ist es o.k?[y/n]:"
read -r canExecute
canExecute="$(println "${canExecute}" | grep "^[Yy]$")"
[ -z "${canExecute}" ] && throwException "Die Verarbeitung wurde abgebrochen, weil etwas anderes als y eingegeben wurde."

dd bs=64k if="${isoFile}" of="${deviceFile}" && sync && println "Das Schreiben ist abgeschlossen."

Nachtrag

Recommended Posts

Veröffentlichen Sie das erstellte Shell-Skript, um die Probleme beim Erstellen von LiveUSB unter Linux zu verringern
[Shell-Start] Ich habe versucht, die Shell mit einem billigen Linux-Board-G-Cluster auf dem Fernseher anzuzeigen
Bedingte Verzweigung aufgrund des Vorhandenseins einer Shell-Skriptdatei
Erstellen eines Shell-Skripts zum Schreiben eines Tagebuchs
Ich habe versucht, die Wartezeit der Ausführungswarteschlange eines Prozesses unter Linux zu messen
Ich habe ein Skript geschrieben, um die Schluckuhr wiederzubeleben, die bald sterben wird
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
Ich habe ein Skript erstellt, um zu überprüfen, ob an der angegebenen Position der JSON-Datei in Python Englisch eingegeben wird.
Ich möchte einen Screenshot der Site in Docker mit einer beliebigen Schriftart erstellen
"Stoppen Sie das Festschreiben japanischer Dateien für Git auf Mac> <" Vorerst habe ich ein Skript geschrieben, um nach inkompatiblen japanischen Dateien unter Mac und Linux zu suchen.
[OCI] Python-Skript zum Abrufen der IP-Adresse einer Recheninstanz in Cloud Shell
[Linux] Kopieren Sie Daten mit einem Shell-Skript von Linux nach Windows
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, ein Skript zu erstellen, das die Tweets eines bestimmten Benutzers auf Twitter verfolgt und das veröffentlichte Bild sofort speichert
Verarbeiten Sie den Inhalt der Datei der Reihe nach mit einem Shell-Skript
Ich habe versucht, eine Umgebung von MkDocs unter Amazon Linux zu erstellen
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Shell-Skript (Linux, macOS), das das Datum der letzten Woche ausgibt
Ich habe eine Python-Bibliothek erstellt, um die API von LINE WORKS aufzurufen
Erstellen Sie ein Shell-Skript, um die Python-Datei mehrmals auszuführen
Unter Linux ist der Zeitstempel einer Datei etwas vorbei.
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Ein Hinweis, von dem ich süchtig war, als ich unter Linux einen Piepton machte
Ich habe gerade ein Skript geschrieben, um Android auf einem anderen Computer zu erstellen
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
Ich habe versucht, einen Sender auf der IoT-Plattform "Rimotte" zu registrieren.
Ein Befehl zum einfachen Überprüfen der Netzwerkgeschwindigkeit auf der Konsole
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Ich fand es heraus, indem ich ein Python-Skript erstellte, um Radiko aufzuzeichnen, während ich den Code der Vorgänger las
So führen Sie den Übungscode des Buches "Profitable KI mit Python erstellen" in Google Colaboratory aus
Ich habe ein POST-Skript erstellt, um ein Problem in Github zu erstellen und es im Projekt zu registrieren
Eine Geschichte über das Erstellen eines Programms, mit dem die Anzahl der Instagram-Follower in einer Woche von 0 auf 700 erhöht wird
Ich habe "Ich habe versucht, ein Skript zu erstellen, das gepostete Bilder sofort speichert, indem ich zu den Tweets eines bestimmten Benutzers auf Twitter zurückgekehrt bin" überarbeitet.
Eine Geschichte, die mich süchtig nach dem Versuch machte, LightFM unter Amazon Linux zu installieren
Ich habe einen Küchentimer erstellt, der in der Statusleiste angezeigt wird!
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
Erzeugt halbautomatisch eine Beschreibung des Pakets, das in PyPI registriert werden soll
AtCoder-Autor Ich habe ein Skript geschrieben, das Wettbewerbe für jeden Autor zusammenfasst
Ich möchte eine Liste in der Reihenfolge anderer Listen sortieren
Ein Shell-Skript, um sich wieder an die pipenv-Shell zu erinnern
Ich möchte einen beliebigen Befehl im Befehlsverlauf von Shell belassen
[Linux] Ich habe versucht, die sichere Bestätigungsmethode von FQDN (CentOS7) zu überprüfen.
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Ich habe versucht, das Ergebnis des A / B-Tests mit dem Chi-Quadrat-Test zu überprüfen
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Folding @ Home unter Linux Mint soll zur Analyse des neuen Corona-Virus beitragen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Die Geschichte der Erstellung von Botonyan, das den Inhalt von Google Text & Tabellen als Antwort auf ein bestimmtes Keyword in Slack zurückgibt
Ich habe einen Nur-SFTP-Benutzer unter Linux erstellt.
Skript zum Ändern der Beschreibung von Fasta
Ich möchte Linux auf dem Mac verwenden
[Ubuntu] So führen Sie ein Shell-Skript aus