為什么寫本文

最近使用dd命令比較多,它是linux下功能強大的數據復制工具! 這篇博文對它的使用做個小結,一來加深記憶,二來方便自己以后查閱。

dd命令的功能

dd的主要功能是拷貝文件(默認從標准輸入拷貝到標准輸出,這意味dd可以在管道中使用)。不過在拷貝文件的過程中,它給用戶提供了很多靈活的選項來控制拷貝的過程。提供的選項我歸納有如下三點:

(1)可以自由控制讀取源文件和寫目的文件的塊大小(block size)。

(2)可以自由控制從源文件的什么位置開始讀以及從什么位置往目的文件寫。

(3)在源文件讀取數據后,在往目的文件寫之前,提供了很多靈活有用的轉換規則(conversion rules)。

(4)其他賦值功能。例如status用來控制信息輸出。

常用選項說明

if=FILE 從FILE中讀取數據,而不是默認的標准輸入。

of=FILE 往FILE中寫入數據,而不是默認的標准輸出。

ibs=BYTES 讀取數據時,一次性讀出BYTES大小的塊,如果不指定,默認512字節。

obs=BYTES 寫入數據時,一次性寫入BYTES大小的塊,如果不指定,默認512字節。

bs=BYTES 統一ibs和obs的值(如果指定了ibs或者obs,則會覆蓋)。

cbs=BYTES 沒搞懂。

skip=N 跳過N*ibs字節數再開始讀取數據。

seek=N 跳過N*obs字節數再開始寫入數據。

count=N 總共讀取N*ibs字節數的數據,當然寫入的數據也是這個大小。

status=LEVEL LEVEL用來控制dd程序的輸出信息的。分別有三個,“none”,“noxfer”和“progress”,默認是“progress”。“none”的意思是不輸出任何相關信息,除非出錯信息。“noxfer”不會輸出最后的統計信息,而“progress”會輸出所有信息。

補充:在上面所有選項的BYTES和N中,我們都可以使用特殊的字符來表示數據大小,常用的有b=512,K=1024,M=1024*1024,G=1024*1024*1024。

iflag=FLAG[,FLAG]...

使用iflag來控制讀取數據時的行為特征。

常用的iflags有“count_bytes”,當指定了“count_bytes”后,count=N表示的不再是讀取N*ibs大小的數據了,而只是代表N字節的數據。

指定“skip_bytes”后,skip=N后表示的是跳過的字節數不再是N*ibs大小的數據了,而只是代表跳過N字節的數據。

oflag=FLAG[,FLAG]...

使用oflag來控制寫入數據時的行為特征。

“append”以追加方式寫入數據,一般配合conv=notrunc來使用。

“seek_bytes”的意識和“skip_bytes”一樣。

conv=CONVERSION[,CONVERSION]...

conv用來在將數據寫入文件時的轉換規則。一下列出常用的:

lcase 用來將大寫字母轉換成小寫字母。

ucase 用來將小寫字母轉換成大寫字母。

notrunc 如果目的文件已經存在,那么不要截斷文件內容。默認是會截斷成0字節大小的。一般配合oflag=append使用,不截斷並且以追加方式寫入數據。

noerror 盡管發生錯誤,也不要停止整個拷貝過程。

dd使用案列

好了,接下來展現幾個dd常用的案列

(1)備份MBR內容

dd if=/dev/sda of=mbr bs=512 count=1

(2)獲取MBR中的分區表

dd if=mbr of=dpt bs=1 skip=446 count=64

(3)往已經格式化過的軟盤中寫入BootLoader

dd if=boot.bin of=floopy.flp status=noxfer conv=notrunc

(4)將文件中所有小寫字母轉換成大寫字母,並輸出的標准輸出

dd if=file.txt status=none conv=ucase

參考鏈接:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐