Dd

為什麼ddswab功能

  • October 18, 2020

dd註釋選項的聯機幫助頁swab

swab   swap every pair of input bytes

為什麼?


不要問我想做什麼——我沒有特別做任何事情,我只是在摸摸頭。如果要提供交換,為什麼不對所有字長都這樣做?不是我需要那個,但如果我們只是交換 2 個相鄰字節,它必須與特定的硬體場景相關聯。為什麼不在手冊中記錄info呢?

因為那是它最初的目的。用創建 Unix 的團隊負責人Douglas McIlroy在A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986 中的話來說:

DD(v5 第 74 頁)

最初用於在 DEC 電腦的 ASCII、小端、字節流世界和 IBM 的 EBCDIC、大端、阻塞世界之間轉換文件,dd 被賦予了適當的混蛋語法(Thompson,v5)。派克注意到了一個文化怪癖。就像家庭使孩子們的古樸諺語永久化一樣,使用者習慣於使用 JCL-ish 公式呼叫dddd if=input of=output,或者可能使用dd cat input | dd of=output,但很少使用基本話語dd <input >output

“v5 page 74”指的是Unix v5 手冊(本 PDF 的第 51 頁)。對應的源碼也在網上。

EBCDIC是 IBM 機器上使用的字元編碼¹。它在當時與ASCII一樣重要。ASCII 和 EBCDIC 都將字元編碼為 8 位字節。IBM 和 DEC 機器都有 16 位字。(實際上還有其他字長,尤其是 18 和 36,但dd在編寫時考慮到了 16 位字。)這個目的的現代類比是使用iconv

dd很快就不再重要的最初目的是:它成為一種逐塊複製二進制數據的方法,尤其是與無法逐字節訪問的磁帶驅動器之間。就此而言,dd今天幾乎無關緊要:dd在舊的 unices 上很有用,其中諸如 , 之類的工具cathead適用tail於文本文件(它們逐行處理數據,因此一行必須適合少量記憶體,而它們沒有t 支持空字節),但在現代 unice 上,這些工具通常支持二進製文件。

dd在任何情況下,沒有人發現擴展到其他字節順序更改場景很有用。部分原因是隨著電腦變得越來越普遍,以獨立於機器的方式定義數據格式變得越來越普遍。雖然字節序轉換現在有時仍然是必要的,但它很少用於整個文件:通常只有部分數據是面向字的,而其他部分是面向字節的,需要保持原樣。

¹或者更確切地說是一系列編碼,但這與這裡無關。

引用自:https://unix.stackexchange.com/questions/614741