其實很簡單用dd命令就可以搞定。
[guo@guo ~]$ dd if=/home/guo/me.sh of=/home/guo/win.sh
記錄了0+1 的讀入
記錄了0+1 的寫出
159位元組(159 B)已複製,0.000139826 秒,1.1 MB/秒
上面就是把/home/guo/me.sh 檔案產生為win.iso檔案並儲存在/home/guo/檔案夾下。
附redhat中的dd協助文檔
[guo@guo ~]$ dd --help
用法:dd [運算元] ...
或:dd 選項
複製檔案,依照運算元轉換並格式化。
bs=位元數 一次讀寫的位元數(參見ibs=,obs=)
cbs=位元數 一次轉換的位元數
conv=CONVS 依照每個逗號分割的標誌列錶轉換檔案
count=塊數 只將指定個塊數複製到塊
ibs=位元數 一次讀取的位元數(預設:512)
if=檔案 從指定檔案中讀取
iflag=符號 按照以逗號分隔的符號列表指定的方式讀取
obs=位元數 一次寫入指定位元數(預設:512)
of=檔案 寫入到指定檔案
oflag=符號 按照以逗號分隔的符號列表指定的方式寫入
seek=塊數 在輸出開始處跳過指定的塊數
skip=塊數 在輸入開始處跳過指定的塊數
status=noxfer 禁止傳輸統計
塊和位元組數後可能帶有以下的一個或多個尾碼:
c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M
GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.
每個CONV 符號可能為:
ascii 由EBCDIC 碼轉換至ASCII 碼
ebcdic 由ASCII 碼轉換至EBCDIC 碼
ibm 由ASCII 碼轉換至替換的EBCDIC 碼
block 將結束字元塊裡的換行替換成等長的空格
unblock 將cbs 大小的塊中尾部的空格替換為一個分行符號
lcase 將大寫字元轉換為小寫
notrunc 不截斷輸出檔案
ucase 將小寫字元轉換為大寫
swab 交換每一對輸入資料位元組
noerror 讀取資料發生錯誤後仍然繼續
sync 將每個輸入資料區塊以NUL 字元填滿至ibs 的大小;當配合block
或unblock 時,會以空格代替NUL 輸入鍵台
noerror 讀取資料發生錯誤後仍然繼續
sync 把每個輸入的塊以NUL 填充至ibs 的大小
如果配合block 或unblock 使用, 則以空格代替NUL 填充
fdatasync 結束前將輸出檔案資料寫入磁碟
fsync 類似上面,但是中繼資料也一同寫入
FLAG 符號可以是:
append 追加模式(僅對輸出有意義;隱含了conv=notrunc)
direct 使用直接I/O 存模數式
directory 除非是目錄,否則directory 失敗
dsync 使用同步I/O 存模數式
sync 與上者類似,但同時也對中繼資料生效
fullblock 為輸入積累完整塊(僅iflag)
nonblock 使用無阻塞I/O 存模數式
noatime 不更新存取時間
noctty 不根據檔案指派控制終端
nofollow 不跟隨連結檔案
對運行中的"dd"進程發送一個USR1 訊號會使得
I/O 的統計資訊被列印到標準錯誤裝置然後恢複復制操作。
$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid; sleep 1; kill $pid
18335302+0 records in
18335302+0 records out
9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s
作者 junjieguo