Dd komutunda 'bs', 'count' ve 'seek' arasındaki fark nedir?


24

Ben nasıl kullanılacağını açıklayan kılavuzları ve forum Mesajları birçok okudum ddama fark ettik bir şey insanların her zaman farklı değerlerini kullanmasıdır bs=, count=ve seek=anahtarları.

Lütfen birileri bu anahtarların tam olarak ne yaptığını açıklayabilir (man sayfası çok ayrıntılı değildir) ve / dev / random veya / dev / zero'dan dosya oluşturma ve üzerine yazma gibi farklı görevler için bunlar için en iyi ayarların ne olduğunu açıklayabilir mi? bölümler ve harici sürücüler.


Yanıtlar:


27

Bunu, manpage'den daha iyi nasıl açıklayacağımı bilmiyorum.

bs=blok bs=1Mboyutunu ayarlar, örneğin 1MiB blok boyutu olur.

count=sadece bu blok sayısını kopyalar (varsayılan değer gd'nin sonsuza kadar veya giriş bitene kadar devam etmesi içindir). İdeal olarak bloklar bs=büyüklüktedir ancak eksik okumalar olabilir, bu nedenle count=belirli bir miktarda veriyi ( count*bs) kopyalamak için kullanırsanız, ayrıca tedarik etmelisiniz iflag=fullblock.

seek= Çıkış cihazının başına yazmak yerine, bu blok sayısını çıkışta arar.

Bu nedenle, örneğin, bu, 1MiB değerinin 8MiB'lik çıktı dosyasını y\nkonumlandırmasını sağlar. Böylece toplam dosya boyutu 9MiB olacaktır.

$ yes | dd bs=1M count=1 seek=8 iflag=fullblock of=outputfile
$ ls -alh outputfile
9.0M Jun  3 21:02 outputfile
$ hexdump -C outputfile
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000  79 0a 79 0a 79 0a 79 0a  79 0a 79 0a 79 0a 79 0a  |y.y.y.y.y.y.y.y.|
*
00900000

Eğer söz yana /dev/randomve bölümleri üzerine yazma ... o zamandan beri sonsuza alacaktır /dev/random(yanı sıra /dev/urandom) sadece çok yavaş. Bunun shred -v -n 1yerine sadece kullanabilirsiniz , bu hızlı ve genellikle her yerde kullanılabilir.


21

Tamam, adam sayfalarının ayrıntılı olmadığını söyledin, bu yüzden hareketli bir adam hakkında metaforları kolay anlamanın ne anlama geldiğini açıklayacağım (ismine göre dd):

   bs=BYTES
          read and write up to BYTES bytes at a time

ddbir şey alır (kutular, vazolar, yataklar, pirinç vb.), olması gereken yere taşınır ve bırakılır. Yükü düşürmeden, başka bir şey seçmiyor. Şimdi, ona seyahat başına tam olarak kaç tane nesne seçmesi gerektiğini söylemeniz gerektiğinde, bunu bsyapar. Okuyacağı ve yazacağı veri miktarını siz belirlersiniz. Bu, tüm faydalı ve yaygın komutlarda neredeyse zorunludur.

   count=N
          copy only N input blocks

Bu, taşınacağı toplam kutu miktarını belirler. Bu bağlamdaki kutular , diskteki bloklardır . Ona 5 kutu taşımasını söylüyorsun, 5 kutudan fazla olsa bile sadece 5 kutuyu hareket ettiriyor (5 kutudan daha az varsa, eklemek için kutuların yanında bulduğu bir vazoyu alacak). Eğer söylersen ddiçin countsadece 5 ve yere yazmak, o gördüğü ilk 5 blok kopyalamak istiyorum ve istediğiniz yere yazın.

   seek=N skip N obs-sized blocks at start of output

Adam normalde yükü bırakmak için uygun olan ilk yeri bulur, bu normalde başlangıçta (diskin) ve sonuna kadar doldurmaya devam eder. Peki, bununla dddaha da başlaman gerektiğini söylüyorsun, salon yerine diyelim ki, içerideki odalardan birine başlayınız. Sadece başlangıç ​​bloklarını atlar.

Şimdi, ne yaptığınıza bağlı olarak, kaynak ve varış yerine göre okunacak ve yazılacak formatla farklı kombinasyonlara ihtiyacınız olacak. Ayrı aramanızı öneririm.


"Eklemek için kutuların yanında bulduğu bir vazoyu alacak". Bu metafor ne anlama geliyor?
Ini

1
@Ini Eğer okumaya ait olmayan bir bitişik blok varsa, dd onu okuyacak ve hareket ettirecektir. Vazo bir kutu değildir, ama onu taşır.
Braiam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.