2012-06-05 62 views
13

得到的/ dev /一個等效您可以使用如何在Linux下

dd if=/dev/zero of=file count=1024 bs=1024 

零填充文件。

而不是我想填寫一個文件。我怎麼做?

沒有/ dev/one文件,所以我如何通過bash shell來模擬該效果?

+0

編寫一個C程序來做到這一點,應該是微不足道的。 –

回答

10

試試這個:

dd if=<(yes $'\01' | tr -d "\n") of=file count=1024 bs=1024 

替代$'\377'$'\xFF'如果你希望所有的位是的。

4

嗯,你可以這樣做:

dd if=/dev/zero count=1024 bs=1024 | 
    tr '\000' '\001' > file 
+0

一個填充是'\ 377',不是? – Neil

+0

嗯,我想這取決於你想要什麼。這將填充文件字節值爲1('01 01 01 01 ...')。使用'\ 377'可以將所有*位*設置爲1(所以'FF FF FF FF ...')。取決於OP的要求。 – larsks

23
tr '\0' '\377' < /dev/zero | dd bs=64K of=/dev/sdx 

這應該快得多。選擇您需要的塊大小(或添加計數)。寫入一個SSD-Disk直到99M的塊大小完全給了我350M/s的寫入性能。

+0

我確認這至少比公認的解決方案快兩倍。然而,我並沒有注意到通過改變塊大小來改善性能(儘管沒有bs參數會導致性能大幅下降)。 –

0
pv /dev/zero |tr \\000 \\377 >targetfile 

...其中\377255的八進制表示(具有設置爲一個所有位字節)。爲什麼tr只適用於八進制數字,我不知道 - 但要小心,不要下意識地將其轉換爲3FF


使用tr的語法容易出錯。我建議驗證它正在所需的翻譯...

cat /dev/zero |tr \\000 \\377 |hexdump -C 

注:pv是一個很好的工具,取代cat並增加了一個進度/速度顯示。

+1

注意:如果您試圖填充整個設備,最好避免使用「dd」,因爲如果您不手動選擇最佳的「bs」值,那麼會降低速度(大量)。 – nobar

+0

如果有足夠的信息,'pv'也會給出估計的剩餘時間。 – nobar

+0

當你在它的時候,也許前綴'時間'和'好'。 – nobar