dd - 資料處理的好工具
簡介
dd全名叫做data duplicator,這個工具最主要的功能是對資料作複製、修改、備份,是一個很方便的小工具。通常Linux中預設都會有,不需要額外安裝。
使用教學
基本
- 輸入輸出參數
- if=FILE:輸入名稱
- of=FILE:輸出名稱
1 | dd if=[input_file] of=[output_file] |
轉換
- 做相對應的轉換
conv=CONVS
- lcase:大寫字母換小寫
- ucase:小寫字母換大寫
- nocreat:不要建立輸出檔案
- notrunc:input小於output時,仍維持output大小
- fdatasync:讓資料同步寫入硬碟
1 | # 轉為小寫 |
區塊
- bs=[bytes]:等同於同時設定ibs和obs,一次讀或寫的block size。
- ibs=[bytes]:指定每次讀取的block size(default 512 bytes)
- obs=[bytes]:指定每次寫入的block size(default 512 bytes)
- count=[number]:只處理前[number]輸入區塊,block size要參考ibs。
- seek=[number]:輸出檔案跳過前[number]個區塊,block size要參考obs。
- skip=[number]:輸入檔案跳過前[number]個區塊,block size要參考ibs。
常用指令
大小寫轉換
1
2
3
4# 換大寫
dd if=[input] of=[output] conv=ucase
# 換小寫
dd if=[input] of=[output] conv=lcase產生一個特定大小的檔案
1
2
3
4# 內容為空的1KB檔案
dd if=/dev/zero of=[output] bs=1024 count=1
# 內容為亂數的1MB檔案
dd if=/dev/urandom of=[output] bs=1m count=1把特定檔案的開頭512 byte清空
1
dd if=/dev/zero of=[output] bs=512 count=1 conv=notrunc
備份硬碟
1
2
3dd if=[來源] of=[目標]
# 例如從/dev/sda備份到/dev/sdb
dd if=/dev/sda of=/dev/sdb備份光碟,可參考Create an ISO Image from a source CD or DVD under Linux
先觀察/dev/cdrom
1
isoinfo -d -i /dev/cdrom | grep -i -E 'block size|volume size'
然後應該會出現類似如下內容
1
2Logical block size is: 2048
Volume size is: 327867接著參考上面的數字使用dd指令(bs大部分都是2048,而count其實有加沒加都沒差)
1
2
3dd if=/dev/cdrom of=test.iso bs=<block size from above> count=<volume size from above>
# 以上述例子
dd if=/dev/cdrom of=outputCD.iso bs=2048 count=327867
拆分&合併檔案,可參考Splitting and Merging files using dd
- 拆分檔案,例如把檔案切成好幾個1G
1
2
3dd if=[大檔案] of=[part1] bs=1m count=1024
dd if=[大檔案] of=[part2] bs=1m count=1024
....- 合併檔案,例如好幾個1G合併起來
1
2
3dd if=[part1] of=大檔案 bs=1m count=1024
dd if=[part2] of=大檔案 bs=1m count=1024 seek=1024
....