2013-12-21 24 views
3

我有一個硬盤驅動器,我想覆蓋,而不是空字節,但與消息。使用DD遞歸地寫入特定文件

48 69 64 64 65 6E 20 = 「隱藏」

這是我的命令迄今:

echo "Hidden " > /myfile 
dd if=/myfile of=/dev/sdb bs=1M 

注:我也嘗試的參數,如數量和CONV的assorment無濟於事

現在,這很好。當我運行時:

dd if=/dev/sdb | hexdump -C | less 

我可以看到寫入的前幾個字節,但其餘的沒有變化。我想遞歸地將「隱藏」寫入驅動器。

+3

您的意思是「重複」,而不是「遞歸」。請參閱[維基百科上的遞歸](https://en.wikipedia.org/wiki/Recursion_%28computer_science%29) – 1ace

+0

您的問題已經得到解答和接受,但這裏有一個有用的提示,可以幫助您節省一些打字費用: 'dd if =/dev/sdb | hexdump -C | less' 可寫爲: 'hexdump -C/dev/sdb |更少' – OmnipotentEntity

回答

11

我沒有備用磁盤嘗試了這一點,但你可以使用yes command to continuously push your string into the pipe

yes "Hidden" | dd of=/dev/sdb 

我假設一旦dd寫入了整個磁盤,那麼它將關閉管道,並且此命令將完成。

以上將新行分隔「隱藏」字符串。如果你想它的空間分隔,如問題,你可以這樣做:

yes "Hidden" | paste -d' ' -s - | dd of=/dev/sdb 

或者,如果你想讓它空分隔:

yes "Hidden" | tr '\n' '\0' | dd of=/dev/sdb 
+0

這一個做到了!謝謝! 粘貼命令不是必需的,但它有很多整潔的空白分隔符。 – Goodies

+0

我也是+1,每天學習一些東西,從來沒有聽說過「是」命令:) –

+1

是的,除非您希望「隱藏」空格分隔,否則「粘貼」命令不是絕對必要的。否則它將被換行符分隔。很高興它對你有效! –

2

如果您未指定if參數,則從標準輸入讀取輸入。這允許你做這樣的事情:

dd of=/dev/sdb < for((i=0;i<100000;i++)); do echo 'Hidden '; done; 

100000的價值顯然需要至少diskSizeInBytes/strlen('Hidden ')

由於我沒有測試這個給你帶來的後果,但它應該工作;)

+0

嗯......它似乎沒有采用括號,所以構建你的想法我做了這個: '((i = 0; i <100000; i ++));做回聲'隱藏'| dd =/dev/sdb;完成;' 它似乎只是在第一個字節中寫入「隱藏」100000次:) – Goodies

+0

你正在做的錯誤方式 - 你現在開始'dd'100000次而不是管道組合輸出100000迴響一次。將整個'dd'呼叫移出循環。 –

2

dcfldd,DD的一個分支,有一些額外的功能你可能會覺得有用。例如,您的問題將通過以下方式解決:

dcfldd textpattern="Hidden " of=/dev/sdb bs=1M