ddolduğu tasarlanmış engelleme için - genellikle emrinde iyi araçtır değişken büyüklükte girdilerden okumak için siz tamam gerekirse derhal çünkü ddakım tampon olmaz bazı geleceğe okur write() (eğer çok açık bir şekilde ibs daha büyük obs ile bu şekilde yapılandırmak sürece) ama olacak yerine write()her şeyi o en kısa sürede okur read()bunu s (ve isteğe bunu işler) .
İşte bazı önemli tanımlar :
ibs=expr
- Giriş bloğu boyutunu bayt olarak belirtin (varsayılan 512) .
expr
obs=expr
- Çıktı bloğu boyutunu bayt olarak belirtin (varsayılan 512) .
expr
bs=expr
- İçin hem giriş hem de çıkış bloğu boyutlarını ayarlama
exprbayt yerine geçer ibs=ve obs=. Daha dönüşüm için diğer ise sync, noerrorve notruncbelirtilen her bir giriş bloğu kısa blok yığılmasma neden olmadan tek bir blok olarak çıkışına kopyalanmalıdır.
Gördüğünüz Yani, ne zaman ibsve obsolarak birlikte tanımlanır bssonra ibsya sonra, özel olup olmadığını, aksi ama - önceliklidir obsveya cbsyok.
İşte ibsen önemli olan bir örnek . /dev/randomHavuzun ne kadar sürede dolduğunu izlemek istersen böyle bir şey yapabilirsin ...
dd "ibs=$size" conv=sync "count=$lmt" \
if=/dev/random of="$somefile"
if=Hedefi hiç okunabildiği sürece , her zaman aynı boyutta bir çıktı dosyasına ddyol syncaçacaktır , çünkü boş değerlerde okunan blokları tıkar. Başka bir deyişle, dd read()bir giriş bloğu için s ise $((size=10)) $((count=5))ve read()dosya 2 byte, sonra 8 byte, sonra 12 byte, sonra 2 byte, sonra 4 byte döndürürse, bunun yerine bir dosya ddyazacaktır.
2 read bytes 8NULs \
8 read bytes 2NULs \
10 read bytes 0NULs \
4 read bytes 6NULs \
4 read bytes 6NULs
... çünkü ddvarsayılan olarak gelmez, değil geciktirir. Dolayısıyla yayın içi akışı izlemeniz ve başka bir işlemin yazılarını sınırlandırmanız gerekirse, ddsizin için bir araçtır.
Eğer sadece bir miktar veriyi düzenli bir dosyaya yazarsanız, burada yapılan diğer ifadelerin aksine, ddbunun için de kullanabilirsiniz - ve oldukça kolay - ama birden fazla ve güvenilir bir engelleme faktörüne ihtiyacınız olacak .
Örneğin, eğer yaptıysanız:
{ dd ibs="$size" obs="${size}x$block_factor" |
dd bs="${size}x$blockfactor" "count=$lmt"
} <infile >outfile
... birincisi dd, her ibs="$size"biri ile ikincisi arasındaki boruya en az bir obs="${size}x$block_factor"çıkış bloğunu doldurmak için gereken sayıda giriş bloğu tamponlar . Bu, ikincisinin çıkışı güvenli bir şekilde sınırlayabileceği anlamına gelir; çünkü ilk yapanların tümü, bunu yapmak için ilk önce ne kadar yapmaları gerektiğine bakılmaksızın , giriş / çıkışları ile aynı olacaktır .write()ddddcount="$lmt"write()read()dd
Ve budd şekilde, küçük bir matematik dersi ile boruları veya diğer özel dosya türlerini güvenilir bir şekilde okumak için kullanabilirsiniz .
/dev/randomİstediğiniz basamak sayısını oluşturmak için yeterli entropi yoksa engeller. sadece bu kadar yüksek kalitede psuedo rasgele "rastgelelik" miktarı toplamak için zaman alır ... Ya/dev/urandomdaha az rastgele "rastgele" bir değer kullanın ya da entropi havuzunuzu kontrol edin (bir döngüde ve gerektiği gibi bekleyin)