Hier sind einige DD-Tricks, die ich mir über die Jahre ausgedacht habe.
Ausschneiden und Einfügen bei unfreundlichem oder nicht interaktivem Bash
Wenn Sie sich in einer Situation befinden, in der EOF / ^ D / ^ F nicht erkannt wird, können Sie dd verwenden, um Textdateien auf einen Host zu übertragen. Da es nach einer festgelegten Anzahl von Bytes automatisch aufhört zu lesen.
Ich habe dies erst letztes Jahr während einer Sicherheitsübung verwendet, bei der es uns möglich war, Nicht-Tty-Shells auf einem Remote-Host abzurufen und Dateien zu übertragen.
Tatsächlich habe ich sogar ein paar Binärdateien erstellt, indem ich sie mit base64 codiert und ein langsames, aber zuverlässiges Base64-Decodierungsskript für reine Bash-Dateien verwendet habe.
dd of=textfile.txt bs=1 count=<size_of_data_in_paste_buffer>
Ein super cooler Trick ist, dass während dd läuft, wenn Sie ein USR1-Signal senden, es seinen aktuellen Status ausgibt (gelesene Bytes, Bytes pro Sekunde ..)
Universeller Durchsatzstatusfilter
Ich habe dies geschrieben, um als reiner Bash-Fortschrittsfilter für jedes Programm zu fungieren, das Daten über stdout ausgibt. (Hinweis: Fast alles gibt Daten über stdout aus. Bei Programmen, die dies nicht tun, können Sie schummeln, wenn sie Sie nicht mit / dev / stdout als Dateinamen belästigen. Grundsätzlich gilt jedoch, dass Sie jedes Mal X erhalten Anzahl der Bytes, Drucken von Hash-Markierungen (wie bei FTP der alten Schule, wenn der Hash-Modus aktiviert war)
(Anmerkung) Die Sache mit der Fortschrittsdatei ist lahm, dies war größtenteils ein Proof of Concept. Wenn ich es überarbeite, würde ich nur eine Variable verwenden.
dd bs=$BLKSZ of=${TMPFILE} 2>&1 \
| grep --line-buffered -E '[[:digit:]]* bytes' \
| awk '{ print $1 }' >> ${PROGRESS} &
while [[ $(pidof dd) -gt 1 ]]; do
# PROTIP: You can sleep partial seconds
sleep .5
# Force dd to update us on it's progress (which gets
# redirected to $PROGRESS file.
pkill -USR1 dd
local BYTES_THIS_CYCLE=$(tail -1 $PROGRESS)
local XFER_BLKS=$(((BYTES_THIS_CYCLE-BYTES_LAST_CYCLE)/BLKSZ))
if [ $XFER_BLKS -gt 0 ]; then
printf "#%0.s" $(seq 0 $XFER_BLKS)
BYTES_LAST_CYCLE=$BYTES_THIS_CYCLE
fi
done
Slice-and-Dice-Dateien mit anonymen Shell-Dateihandles
Hier ist ein extrem pseudocodiertes Beispiel dafür, wie Sie eine signierte TAR-Datei haben können, die Sie ohne Fehler extrahieren können, indem Sie die TAR-Eingabe über ein anonymes Dateihandle bereitstellen - ohne TMP-Dateien zum Speichern von Teildateidaten zu verwenden.
generate_hash() {
echo "yay!"
}
# Create a tar file, generate a hash, append it to the end
tar -cf log.tar /var/log/* 2>/dev/null
TARFILE_SIZE=$(stat -f "%z" log.tar)
SIGNATURE=$(generate_hash log.tar)
echo $SIGNATURE >>log.tar
# Then, later, extract without getting an error..
tar xvf <(dd if=$OLDPWD/log.tar bs=1 count=${TARFILE_SIZE})
Die Antwort lautet: Ich finde dd unglaublich nützlich. Und dies sind nur die drei Beispiele, die mir auf den ersten Blick einfallen.