dd
olduğ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ü dd
akı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
expr
bayt yerine geçer ibs=
ve obs=
. Daha dönüşüm için diğer ise sync
, noerror
ve notrunc
belirtilen 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 ibs
ve obs
olarak birlikte tanımlanır bs
sonra ibs
ya sonra, özel olup olmadığını, aksi ama - önceliklidir obs
veya cbs
yok.
İşte ibs
en önemli olan bir örnek . /dev/random
Havuzun 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 dd
yol sync
aç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 dd
yazacaktır.
2 read bytes 8NULs \
8 read bytes 2NULs \
10 read bytes 0NULs \
4 read bytes 6NULs \
4 read bytes 6NULs
... çünkü dd
varsayı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, dd
sizin 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, dd
bunun 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()
dd
dd
count="$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/urandom
daha az rastgele "rastgele" bir değer kullanın ya da entropi havuzunuzu kontrol edin (bir döngüde ve gerektiği gibi bekleyin)