Linux之dd命令
歡迎來到藍(lán)隊(duì)云技術(shù)小課堂,每天分享一個(gè)技術(shù)小知識(shí)。
Linux之dd命令
掌握dd命令:Linux 系統(tǒng)數(shù)據(jù)管理的終極工具
dd命令是一款功能強(qiáng)大的工具,用于在Linux系統(tǒng)上進(jìn)行底層數(shù)據(jù)復(fù)制和轉(zhuǎn)換。dd代表“數(shù)據(jù)復(fù)制器”(data duplicator),常被用來創(chuàng)建文件、分區(qū)或整個(gè)磁盤的精確副本,因此在創(chuàng)建備份、克隆硬盤或?qū)⒋疟P映像寫入物理介質(zhì)時(shí)非常有用。這個(gè)命令可以在文件或設(shè)備之間復(fù)制和轉(zhuǎn)換數(shù)據(jù),并提供了控制塊大小、跳過或查找數(shù)據(jù),甚至應(yīng)用壓縮或字節(jié)交換等過濾器的選項(xiàng)。由于它可以在如此基礎(chǔ)的層面上工作,使用dd時(shí)必須非常謹(jǐn)慎,因?yàn)殄e(cuò)誤的使用可能導(dǎo)致數(shù)據(jù)丟失或損壞。
接下來,我們將通過一些易于理解的例子來討論該工具的工作原理。這里提到的所有示例都在centos7上進(jìn)行了測試。
Linux dd命令簡介
簡而言之,dd命令允許你復(fù)制和轉(zhuǎn)換文件。這個(gè)工具提供了一些操作數(shù),你可以使用它們來指定你想要的格式。以下是man手冊(cè)中描述的命令通用語法:
dd [參數(shù)]...
dd [選項(xiàng)]
使用dd命令從ISO文件創(chuàng)建可啟動(dòng)的USB驅(qū)動(dòng)器
在Linux中,dd命令的一個(gè)常見用途是從ISO文件創(chuàng)建可啟動(dòng)的USB驅(qū)動(dòng)器。這通常在準(zhǔn)備安裝操作系統(tǒng)的USB盤時(shí)使用。命令如下所示:
sudo dd if=/path/to/your.iso of=/dev/sdX bs=4M status=progress && sync
在這個(gè)例子中:
if=/path/to/your.iso 指定了輸入文件,即ISO映像。
of=/dev/sdX 指定了輸出文件,即USB驅(qū)動(dòng)器(將X替換為你USB設(shè)備的對(duì)應(yīng)字母)。
bs=4M 設(shè)置塊大小為4兆字節(jié),優(yōu)化了復(fù)制過程。
status=progress 提供了復(fù)制過程的實(shí)時(shí)更新。
sync 確保在完成之前所有數(shù)據(jù)都寫入到USB驅(qū)動(dòng)器。
這個(gè)命令將創(chuàng)建一個(gè)可啟動(dòng)的USB驅(qū)動(dòng)器,可以用于安裝ISO文件中包含的操作系統(tǒng)。
常見問題解答:
以下是一些問答式的例子,可以幫助你更好地了解dd命令的使用方法。
Q1. 如何使用dd命令更改輸入文本的大小寫?
假設(shè)你有一些用小寫字母寫的文本行,現(xiàn)在需要快速將它們轉(zhuǎn)換為大寫字母。你可以使用conv命令行選項(xiàng)(其值為ucase)來實(shí)現(xiàn)。
例如:
dd conv=ucase
hello!www.tjdsmy.cn
以下是命令及輸入文本的截圖。按下組合鍵Ctrl+d后,dd命令識(shí)別到輸入結(jié)束,隨后生成以下輸出:
dd conv=ucase
hello!www.tjdsmy.cn
HELLO!WWW.LINUXMI.COM
0+1
HELLO!WWW.LINUXMI.COM
HELLO!WWW.LINUXMI . COM
0+1
記錄了+3 的讀入
記錄了0+1 的寫出
48字節(jié)已復(fù)制,278.511 s,0.0 kB/s
如你所見,輸入的文本已從小寫轉(zhuǎn)換為大寫。最后三行只是一些操作相關(guān)的統(tǒng)計(jì)信息。
注意:同樣地,你也可以使用lcase選項(xiàng)將大寫字母轉(zhuǎn)換為小寫。
Q2. 如何從文件讀取并寫入文件?
在上面的例子中,我們通過標(biāo)準(zhǔn)輸入(stdin)輸入了文本。不過,你也可以使用輸入和輸出文件。要指定輸入和輸出文件的名稱,可以使用if和of命令行選項(xiàng)。
例如,如果你想將file1中的文本大小寫轉(zhuǎn)換后寫入file2,可以這樣做:
dd if=file1 of=file2 conv=ucase
cat file1
hello!www.tjdsmy.cn
cat file2
dd if=file1 of=file2 conv=ucase
記錄了+1 的讀入
記錄了+1 的寫出
22字節(jié)已復(fù)制,0.00130236 S,16.9 kB/s
cat file2
HELLO!WWWLINUXMI . COM
Q3. 如何在讀取輸入時(shí)跳過文本?
如果你希望在讀取輸入文本時(shí)跳過一些初始字節(jié),可以使用skip選項(xiàng),該選項(xiàng)需要一個(gè)數(shù)值。如果這個(gè)值為’N’,dd會(huì)跳過輸入開頭的N個(gè)ibs大小的塊。這就引出了ibs選項(xiàng),它用來指定工具每次讀取的字節(jié)數(shù)(默認(rèn)是512)。
假設(shè)你想跳過輸入文件的前6個(gè)字節(jié),你需要先將ibs設(shè)為6,然后將skip值設(shè)為1,這樣工具在讀取輸入文件時(shí)就會(huì)跳過1個(gè)6字節(jié)的塊。
所以你可以看到,讀取file1時(shí)”hello!”被跳過了——這就是它沒有出現(xiàn)在file2中的原因。
dd if=file1 of=file2 conv=ucase ibs=6 skip=1
記錄了2+1 的讀入
記錄了0+1 的寫出
16字節(jié)已復(fù)制,0.000694868 S,23.0kB/s
cat file2
WWW . LINUXMI . COM
Q4. 如何在輸出中交換每對(duì)輸入字節(jié)?
如果你有這樣的需求,可以使用dd命令交換每對(duì)輸入字節(jié)。你可以通過為conv選項(xiàng)設(shè)置swab值來實(shí)現(xiàn)。以下截圖可以更清楚地說明這一點(diǎn):
dd if=file1 of=file2 conv=swab
記錄了+1 的讀入
記錄了+1 的寫出
22字節(jié)已復(fù)制,0.000543071 s,40.5 kB/s
cat file2
ehll!oww.wilunmx.ioc
Q5. 如何讓dd命令只在輸出文件不存在時(shí)才工作?
如果你希望dd命令在輸出文件已經(jīng)存在時(shí)不進(jìn)行任何操作,可以使用conv選項(xiàng)的excl值來實(shí)現(xiàn)這一條件。
下面的截圖展示了這一用法:
dd if=file1 of=file3 conv=excl
dd:打開‘file3'失敗:文件已存在
Q6. 如何確保在追加模式下更新輸出文件?
默認(rèn)情況下,dd會(huì)覆蓋已有的輸出文件。如果你希望dd命令將文本追加到輸出文件的末尾,可以使用oflag選項(xiàng)中的append值和conv選項(xiàng)中的notrunc值。
例如:
dd if=file1 of=file3 oflag=append conv=notrunc
以下是該命令的實(shí)際操作示例:
cat file3
hello!www.tjdsmy.cn
dd if=file1 of=file3 oflag=app end conv=notrunc
記錄了θ+1 的讀入
記錄了0+1 的寫出
22字節(jié)已復(fù)制,0.00106453 s,20.7 kB/s
cat file3
hello!www.tjdsmy.cn
hello!www.tjdsmy.cn
dd if=file1 of=file3 oflag=app end conv=notrunc
記錄了θ+1 的讀入
記錄了+1 的寫出
22字節(jié)已復(fù)制,0.000571509 s,38.5 kB/s
cat file3
hello!www.tjdsmy.cn
hello!www.tjdsmy.cn
hello!www.tjdsmy.cn
Q7. 如何讓dd命令不創(chuàng)建輸出文件?
如果你希望dd命令在輸出文件不存在時(shí)不創(chuàng)建該文件,可以使用conv選項(xiàng)的nocreat值。
例如:
cat file7
cat:file7:沒有那個(gè)文件或目錄
dd if=file1 of=file7 oflag=app end conv=notrunc
記錄了+1 的讀入
記錄了+1 的寫出
22字節(jié)已復(fù)制,0.00112261 s,19.6 kB/s
Q8. 如何控制stderr上的信息級(jí)別?
如果你想限制dd命令在stderr上輸出的信息量,可以使用status選項(xiàng)。例如,如果你只想顯示錯(cuò)誤信息,可以將該選項(xiàng)的值設(shè)置為none:
dd if=file1 of=file3 status=none
其他可用值包括noxfer和progress。以下是man手冊(cè)對(duì)status選項(xiàng)的說明:
status=LEVEL 打印到stderr的信息級(jí)別;
‘none’ 僅顯示錯(cuò)誤信息,’noxfer’ 抑制最終傳輸統(tǒng)計(jì)信息,’progress’ 顯示定期傳輸統(tǒng)計(jì)信息。
這里討論的這些示例只是dd命令功能的一部分。實(shí)際上,你可以使用dd命令創(chuàng)建虛擬文件系統(tǒng)以及對(duì)硬盤或系統(tǒng)分區(qū)進(jìn)行備份。想要了解更多關(guān)于dd命令的信息,可以查閱它的man手冊(cè)。
藍(lán)隊(duì)云官網(wǎng)上擁有完善的技術(shù)支持庫可供參考,大家可自行查閱,更多技術(shù)問題,可以直接咨詢。同時(shí),藍(lán)隊(duì)云整理了運(yùn)維必備的工具包免費(fèi)分享給大家使用,需要的朋友可以直接咨詢。
更多技術(shù)知識(shí),藍(lán)隊(duì)云期待與你一起探索。