Can you summarize the following document?
        
  codice_1的命令列語句與其他的Unix程式不同,因為它的命令列選項格式為codice_7,而不是更標準的codice_8或codice_9。codice_1預設從標準輸入中讀取,並寫入到標準輸出中,但可以用選項codice_11(input file,輸入檔案)和codice_12(output file,輸出檔案)改變。  由於作業系統的不同,用法會有出入。另外,codice_1的一些特定功能取決於計算機系統的能力,例如直接訪問記憶體。向執行中的codice_1程序傳送SIGINFO訊號(Linux上為USR1)可以使它將I/O統計資訊列印到標準錯誤一次,然後繼續複製(注意在OS X上,訊號可能導致程序終止)。codice_1可以從鍵盤中讀取標準輸入。到達檔案結尾時,codice_1將會退出。訊號和EOF是由軟體決定。例如,移植到Windows的Unix工具使用不同的EOF:Cygwin使用<ctrl-d> (通常的Unix EOF),而MKS工具箱使用<ctrl-z>(通常的Windows EOF)。  正如Unix哲學一樣,codice_1只做好一件事(並被認為做得“好”)。與複雜的和高度抽象的實用程式不同,除了為不同的選項做底層決定,codice_1沒有其它的演算法。一般在每一次執行時,會改變codice_1的選項以分步處理一個計算機問題。

  Linux上GNU coreutils提供的變種沒有描述執行結束時,codice_1輸出到標準輸出訊息的格式。然而,其他的實現描述了它,例如BSD上的。  “記錄讀入”和“記錄寫出”行顯示了已完整傳輸的塊數+不完整的塊數,例如物理介質以不完整的塊結尾,或是一個物理錯誤使得一個完整的塊無法被讀取。

  塊是衡量一次讀取、寫入和轉換位元組的單位。命令列選項可以為輸入/讀取(codice_21)和輸出/寫入(codice_22)指定一個不同的塊大小,儘管塊大小(codice_23)選項會覆蓋codice_21和codice_22選項。輸入和輸出的預設塊大小為512位元組(傳統的磁碟塊及POSIX規定的“塊”大小)複製的codice_26選項、讀取的codice_27選項和寫入的codice_28選項都是以塊為單位。轉換操作也受“轉換塊大小”(codice_29)影響。  在codice_1的一些用途中,塊大小可能會影響表現。例如,當轉換硬碟中資料時,較小的塊大小通常會導致更多的位元組被轉換。發出許多小塊的讀取是一種開銷的浪費,且可能會對執行效能有負面影響。較大的塊大小可能會提高複製速度。但是,由於要複製的位元組量是由bs×count給出的,因此不可能在一次codice_1命令中複製素數個位元組,除非使用兩個糟糕選項之一:codice_32(消耗記憶體)或codice_33(大量讀請求開銷)。替代程式(見下文)允許指定位元組,而不是塊。在用作網路傳輸時,根據使用的網路協議,塊大小可能會與包大小衝突。  提供給塊大小的值會被解釋成十進位制整數,也可以加入字尾指定倍數。字尾codice_34表示2倍,codice_35表示512倍,codice_36表示1024倍,codice_37表示1024 × 1024倍,codice_38表示1024 × 1024 × 1024倍,等等。另外,在塊大小和計數引數中,一些實現也可以使用codice_39表示乘運算。  例如,塊大小codice_40表示2 × 80 × 18 × 512 = 1474560位元組,也就是一張1440 KiB軟盤的確切大小。

  codice_1命令可用於各種用途。

  codice_1可以在檔案、裝置、分割槽和卷之間複製資料。資料可以從其中任何地方輸入或輸出;但輸出到分割槽時有重要差異。此外在傳輸過程中,資料可以用codice_43選項修改以適應介質。  如果最後一個塊有意外長度,試圖使用codice_44複製整個磁碟可能會忽略掉它;然而codice_1卻可能成功。源和目標磁碟應該具有相同的大小。  codice_46選項意味著如果發生錯誤,程式也將繼續執行。codice_47選項表示填充每個塊到指定位元組。

  可以修復主開機記錄。主開機記錄可以轉移到檔案,或從中轉移出來。  要複製軟盤的前兩個扇區:  要建立整個x86主開機記錄的映象(包括MS-DOS分割槽表和MBR魔法位元組):  要建立僅含主開機記錄引導程式碼的映象(不包括分割槽表和開機所需的魔法位元組):

  codice_1可以原地修改資料。  用空位元組覆蓋檔案的前512個位元組:  轉換選項codice_49意味著不縮減輸出檔案,也就是說,如果輸出檔案已經存在,只改變指定的位元組,然後退出,並保留輸出檔案的剩餘部分。沒有這個選項,codice_1將建立一個512位元組長的檔案。  在不同的分割槽中複製磁碟分割槽到磁碟映像檔案中:

  出於安全方面的考慮,有時需要擦除丟棄的磁碟。  檢查驅動器上是否有資料,並將其輸出到標準輸出:  用零擦除磁碟:  相較於上面資料修改的例子,不需要使用轉換選項codice_49,因為當dd的輸出檔案為塊裝置時,它沒有效果。  codice_52選項使codice_1一次讀取或寫入4千位元組。在現代系統中,由於傳輸容量(如RAID系統),一個更大的塊大小可能更有利。注意用隨機資料填充磁碟總是比用零慢的多,因為隨機資料必須先由CPU和/或HWRNG生成,且不同的設計有不同的效能特點。(後面PRNG的/dev/urandom可能比libc中的要慢。)在大多數較現代的磁碟中,用零擦除會使其中的資料永久丟失。  用零擦除磁碟會使它的資料無法被軟體恢復。然而資料仍可能用特殊的實驗室技術恢復。  shred程式提供了完成相同任務的替代方法,最後,目前許多Linux發行版還提供了一個精心製作的工具wipe(做得“好”,如上面的Unix哲學),提供了更多方法擦除。

  1984年,GNU codice_1開啟了開源軟體(OSS)恢復資料、檔案、驅動器和分割槽的歷史。codice_1程序一次處理一個塊,它的演算法只是在使用者介面顯示執行狀態。1999年10月,一個C語言的程式codice_56釋出了。它的演算法一次能處理兩個塊。但改進codice_57的資料恢復演算法、2003年的shell指令碼codice_58作者現在推薦codice_59。它是一個釋出於2004年的C++程式,與大多數的Linux發行版一起發行。在開源軟體中,GNU codice_60有最先進的塊大小變換演算法。(codice_60和codice_57儘管名字相近,但卻是不同的程式。因為如此,區分更為明確的備用名稱也有使用;使用的名稱有“addrescue”(freecode.com),“gddrescue”(Debian包名)和“gnu_ddrescue”(openSUSE包名)。)  GNU codice_60既穩定又安全。  另一個開源程式codice_64使用更復雜的演算法,但它需要安裝自己的語言直譯器。

  對驅動器進行基準測試(通常是單執行緒),使用1024位元組塊分析連續系統讀取和寫入的效能:

  使用核心隨機數驅動,用100個隨機位元組生成檔案:

  將檔案轉換為大寫:

  建立1GiB的稀疏檔案,或增加現有檔案的大小: (更先進的工具是GNU coreutils中的"fallocate"或"truncate"。)

  希捷的文件警告說,“一些依賴底層硬碟訪問的硬碟工具(如DD)可能不支援48位邏輯區塊地址(LBA),除非進行升級”。使用超過128 GiB的ATA硬碟時需要48位LBA。然而在Linux中,codice_1使用核心讀取或寫入原始裝置檔案。2003年釋出的2.4.23版本核心已經實現了對48位LBA的支援。  有人開玩笑說,codice_1意為“destroy disk”(破壞硬碟)或“delete data”(刪除資料),因為在對硬碟進行底層操作時,類似顛倒輸入和輸出檔案的一個小錯誤都可能造成部分或全部硬碟資料的丟失。

  "codice_67"是codice_1的一個分支,由前美國國防部計算機取證實驗室僱員尼克·哈勃(Nick Harbour)開發的增強版本。與codice_1相比,codice_67允許一個以上的輸出檔案,同時支援多種校驗計算方法,還提供了驗證模式以匹配檔案,並能顯示操作進度百分比。
dd是一個Unix和類Unix系統上的命令,主要功能為轉換和複製檔案。