dd是linux上的乙個常用的命令。 例如:
dd if=/1.txt of=/tmp/2.txt
(其中, if代表input file;of代表output file, 命令的結果就是將根目錄下的1.txt的內容拷貝到/tmp目錄的的2.txt。)
當然,如果只是用dd做這樣的事情顯然大材小用了,因為cp可以幹同樣的事情,而且更簡單。
下面就介紹一下dd的「高階」應用:
(一)直接讀寫快閃儲存器
在嵌入式系統中,經常需要測試系統檔案讀寫的效能,如果想繞過檔案系統(檔案系統一般都有自己的cache),直接測試快閃儲存器驅動的效能,最簡單的方法就是dd。
一般,快閃儲存器(nand)會有幾個分割槽,每個分割槽對應/dev/mtd*的乙個結點:
寫操作
dd if=/dev/urandom of=/dev/mtd1 bs=4096 count=1000
(上面這個命令就是從/dev/urandom中拷貝檔案到mtd1這個分割槽上,每次讀寫的資料量是4096個位元組,拷貝1000次,因此總的資料量就4m.)
讀操作
dd if=/dev/mtd1 of=/dev/null bs=4096 count=1000
(上面這個命令就是從分割槽mtd1中拷貝檔案到空裝置/dev/null上,每次讀寫的資料量是4096個位元組,拷貝1000次,因此總的資料量就4m.)
dd執行完畢後會輸出的吞吐率。
(二)directio
在有些系統上,沒有mtd節點或者不能直接操作儲存設別,如果想測試檔案讀寫效能,如何消除檔案系統的影響呢?
dd命令有一組引數oflag和iflag, 控制原始檔和目標檔案的讀寫方式為direct io,即讀或寫檔案時越過作業系統的讀寫buffer。如果指定oflag=direct,nonblock,寫檔案時忽略cache的影響;而如果指定iflag=direct,nonblock,讀檔案時忽略cache的影響
下面就是一組實測資料,從中可以看出cache對最終效能的影響。
flag 中除了可以指定direct和nonblock,還可以指定其他的值,具體參見:
需要注意的是有些的平台可能只支援一部分flag.
(三) 拷貝螢幕
利用dd可以實現截圖,假設螢幕對應的裝置節點/dev/fb0,螢幕大小是600×800,螢幕畫素的格式是rgb565(每個畫素對應兩個位元組),則命令如下:
dd if=/dev/fb0 of=/tmp/1.dat bs=600 count=1600
反之,也可以利用dd,直接寫螢幕,例如下面的命令將隨機渲染螢幕:
dd if=/dev/urandom of=/dev/fb0 bs=600 count=1600
(四) 串列埠讀寫
dd還可以寫串列埠,假設串列埠節點為/dev/ttys0, 下面的命令將檔案寫入串列埠中:
dd if=1.txt of=/dev/ttys0
下面是dd命令的呼叫流程:
上圖中的f_op資料結構是在open乙個檔案或裝置時賦值的,其中的read, write等指向真正的操作該檔案的函式。通過這個流程圖,我們可以看出該裝置或檔案的驅動實現了標準的讀寫函式,就可以利用dd進行讀寫。
dd命令的高階應用
dd是linux上的乙個常用的命令。例如 dd if 1.txt of tmp 2.txt 其中,if代表input file of代表output file,命令的結果就是將根目錄下的1.txt的內容拷貝到 tmp目錄的的2.txt。當然,如果只是用dd做這樣的事情顯然大材小用了,因為cp可以幹同...
dd命令的高階應用
dd是linux上的乙個常用的命令。例如 dd if 1.txt of tmp 2.txt 其中,if代表input file of代表output file,命令的結果就是將根目錄下的1.txt的內容拷貝到 tmp目錄的的2.txt。當然,如果只是用dd做這樣的事情顯然大材小用了,因為cp可以幹同...
Linux命令 dd的語法及應用
linux用於建立檔案的命令 dd 把指定的輸入檔案拷貝到指定的輸出檔案中,並且在拷貝的過程中可以進行格式轉換。if 輸入檔案 或裝置名稱 of 輸出檔案 或裝置名稱 ibs bytes 一次讀取bytes位元組,即讀入緩衝區的位元組數。skip blocks 跳過讀入緩衝區開頭的ibs block...