ddist konzipiert für das Blockieren - in der Regel das beste Werkzeug zur Verfügung , es zum Lesen von variabler Größe Eingaben ist , wenn Sie es getan müssen sofort da ddnicht aktuelle Puffer liest in eine Zukunft write() (wenn Sie sehr explizit mit größeren obs als ibs es so konfigurieren) , sondern write()alles, was es liest, sobald es read()ist (und optional verarbeitet) .
Hier sind einige wichtige Definitionen :
ibs=expr
- Geben Sie die Größe des Eingabeblocks in Byte an (Standard ist 512) .
expr
obs=expr
- Geben Sie die Ausgabeblockgröße in Byte an (Standard ist 512) .
expr
bs=expr
- Stellen Sie sowohl die Eingabe- als auch die Ausgabeblockgröße auf
exprBytes ein und ersetzen Sie ibs=und obs=. Wenn keine andere Konvertierung als sync, noerrorund notruncangegeben ist, wird jeder Eingabeblock als einzelner Block in die Ausgabe kopiert, ohne kurze Blöcke zu aggregieren.
Sie sehen also, wann ibsund obswie bsdann gemeinsam definiert werden, ibsaber ansonsten, wenn Sie spezifisch sind, entweder obsoder cbs.
Hier ist ein Beispiel, das ibsam wichtigsten ist. Sie könnten so etwas tun, wenn Sie nachverfolgen möchten, wie schnell sich der /dev/randomPool gefüllt hat ...
dd "ibs=$size" conv=sync "count=$lmt" \
if=/dev/random of="$somefile"
Solange if=das Ziel überhaupt lesbar ist, führt dies immer zu einer Ausgabedatei mit derselben Größe, da dddas syncEinlesen von Blöcken auf Nullen verzögert wird. Mit anderen Worten, wenn dd read()s für einen Eingabeblock von $((size=10)) $((count=5))Zeiten ist und die read()Datei 2 Bytes zurückgibt, dann ddschreiben 8 Bytes, dann 12 Bytes, dann 2 Bytes, dann 4 Bytes in ihre Outfile wie
2 read bytes 8NULs \
8 read bytes 2NULs \
10 read bytes 0NULs \
4 read bytes 6NULs \
4 read bytes 6NULs
... weil ddstandardmäßig nicht verzögert. Wenn Sie also In-Streams verfolgen und die Schreibvorgänge eines anderen Prozesses eingrenzen müssen, ddist dies das richtige Werkzeug für Sie.
Wenn Sie nur eine gewisse Menge an Daten in eine reguläre Datei zu schreiben dann, im Gegensatz zu anderen Aussagen hier, können Sie auch ddfür diese - und ziemlich leicht - aber Sie brauchen mehr als einen und einen zuverlässigen Sperrfaktor .
Wenn Sie zum Beispiel Folgendes getan haben:
{ dd ibs="$size" obs="${size}x$block_factor" |
dd bs="${size}x$blockfactor" "count=$lmt"
} <infile >outfile
... würde der erste ddso viele ibs="$size"Eingabeblöcke puffern, wie nötig sind, um mindestens einen obs="${size}x$block_factor"Ausgabeblock für jeden write()zu der Pipe zwischen ihm und dem zweiten zu füllen dd. Dies bedeutet, dass der zweite dddie Ausgabe zuverlässig begrenzen kann, count="$lmt"da alle write()s des ersten Herstellers der E / A-Blockgröße entsprechen - unabhängig davon, wie viele read()s der erste dafür ddtun muss.
Auf diese Weise können Sie ddPipes oder andere Arten von Spezialdateien zuverlässig lesen - mit nur ein wenig Mathematik.
/dev/randomwird blockiert, wenn nicht genügend Entropie zur Verfügung steht, um die gewünschte Anzahl von Ziffern zu generieren. Es braucht einfach Zeit, um die Menge der zufälligen "Zufälligkeit" von Pseudoqualität zu erfassen ... Verwenden Sie entweder/dev/urandomeinen weniger zufälligen "Zufall" -Wert oder überprüfen Sie Ihren Entropiepool (in einer Schleife und warten Sie nach Bedarf) ...