dd [OPERAND]
dd 選項
復制一個文件,根據[OPERAND]進行轉換和格式化
(1). OPERAND參數
說明1:dd的選項只有’--help’和’--version’,也就是幫助與版本信息。而下列都是[操作數],而非選項。
說明2:讀取是輸入,寫入是輸出
說明3:不指定if,默認從標准輸入讀取。如果不指定of,默認寫入到標准輸出
bs=BYTES 同時設置讀取和寫入(輸入ibs輸出obs)的塊大小為BYTES個字節,具體看本章(4).塊大小可以使用的計量單位
cbs=BYTES 一次轉換BYTES個字節,即指定轉換緩沖區大小
conv=CONVERSION[,CONVERSION] 用指定參數轉換文件
count=N 僅拷貝N個塊,塊大小等於ibs指定的字節數
ibs=BYTES 一次讀取BYTES個字節,即指定一個塊大小為BYTES個字節(默認512)
if=FILE 從文件讀取代替標准輸入,即指定源文件
iflag=FLAG[,FLAG] 使用FLAG參數指定的輸入方式
obs=BYTES 一次寫入BYTES個字節,即指定一個快大小為BYTES個字節(默認512)
of=FILE 寫入到文件代替標准輸出,即指定目的文件
oflag=FLAG[,FLAG] 使用FLAG參數指定的輸出方式
seek=BLOCKS 從輸出文件開頭跳過BLOCKS個輸出塊再開始復制(小心ibs和obs不一樣)
skip=BLOCKS 從輸入文件開頭跳過BLOCKS個輸入塊再開始復制(小心ibs和obs不一樣)
status=WHICH 用來控制dd程序的輸出信息。分別為noxfer,none和progress,默認為progress。none不輸出任何相關信息,錯誤信息正常輸出。noxfer不輸出最后的統計信息。progress輸出所有信息。
(2).CONVERSION參數
ascii 由ebcdic碼轉換至ascii碼
ebcdic 由ascii碼轉換至ebcdic碼
ibm 由ascii碼轉換至替換的ebcdic碼
block 對於輸入中的每一行輸出cbs個字節,用空格替換輸入換行符,必要時用空格填充
unblock 刪除cbs大小的塊的尾部空格,並添加一個換行符
lcase 將大寫字符轉換為小寫字符
nocreat 不創建輸出文件,輸出文件必須已經存在
excl 輸出文件已經存在則失敗;dd命令必須創建文件本身
notrunc 不要截斷輸出文件(不將文件長度縮短為0)
ucase 將小寫字符轉換為大寫字符
sparse 嘗試查找而不是編寫空(NUL)輸出塊。在支持稀疏文件的文件系統中,當擴展輸出文件時,這會創建稀疏輸出。
swab 交換每對字節,奇數時最后一個字節只復制
noerror 讀取數據發生錯誤后仍然繼續
sync 把每個輸入塊以空(NUL)填充至ibs大小,如果配合日block或unblock使用,則以空格代替空(NUL)填充
fdatasync 結束前將輸出文件數據寫入磁盤
fsync 類似上面,但元數據也一同寫入
(3).FLAG參數
append 追加模式。將數據拷貝到目標文件末尾,同時應該設置conv=notrunc。否則文件將在被拷貝之前清空。
cio 使用並發I/O存取模式,此模式使用直接I/O。並刪除POSIX要求,將所有I/O串行化到同一個文件。在cio模式下無法打開該文件,同時打開一個標准文件(這句話可能有錯,原文:A file cannot be opened at cio mode,and with a standard open in the same time.)。
direct 使用直接I/O存取模式,避免緩沖區高速緩存(不在內存中對文件數據進行緩存)
directory 僅拷貝文件夾,因為很多系統不支持對文件夾進行I/O操作,所以不太實用。
dsync 使用同步I/O模式讀寫數據。每次寫的時候,都強制進行一次物理寫入(寫入/保存到磁盤)
sync 數據和元數據都使用同步I/O模式。
fullblock 直到填充萬一個塊后才返回
nonblack 使用非阻塞I/O
noatime 不改變文件的訪問時間
noctty 不對dd使用指定的文件作為控制終端
nofollow 不跟隨符號鏈接
nolinks 如果有多個硬鏈接則失敗(硬鏈接和軟鏈接也就是符號鏈接,自己查一下吧,有點復雜)
binary 使用二進制I/O
text使用text I/0
count_bytes 將count的單位設置為字節,而不是塊
(4).塊大小可以使用的計量單位
單位大小 |
代碼 |
字節(1B) |
c |
字節(2B) |
w |
塊(512B) |
b |
千字節(1024B) |
k |
兆字節(1024KB) |
M |
吉字節(1024MB) |
G |
(5).實例
根據/dev/zero空文件創建一個50M的空文件
[xf@xuexi ~]$ dd if=/dev/zero of=1.txt bs=M count=50 記錄了50+0 的讀入 記錄了50+0 的寫出 52428800字節(52 MB)已復制,0.0508383 秒,1.0 GB/秒 [xf@xuexi ~]$ ll -h 1.txt -rw-rw-r--. 1 xf xf 50M 2月 26 10:17 1.txt [xf@xuexi ~]$ cat 1.txt [xf@xuexi ~]$
注意:還可以用於完整備份。dd if=/dev/sda of=/dev/sdb(包括超級塊等)