Der Quellcode wird am Ende des Artikels beschrieben. Bitte speichern Sie ihn vor der Verwendung in einer Datei.
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.
(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.
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.
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."
Recommended Posts