溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

linux中dd命令有什么用

發(fā)布時(shí)間:2021-08-26 14:54:04 來源:億速云 閱讀:510 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“l(fā)inux中dd命令有什么用”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“l(fā)inux中dd命令有什么用”這篇文章吧。

dd 命令

由來(全稱):本來應(yīng)根據(jù)其功能描述“Convert an copy”命名為“cc”,但“cc”已經(jīng)被用以代表“CComplier”,所以命名為“dd”

開篇例子:

1.  dd if=infile.log  of=outfile.log bs=1M count=1

  拷貝 infile.log內(nèi)容 到 outfile.log. 一次讀寫比特?cái)?shù)為1M , 每次讀寫一個(gè)塊(1M,由bs決定)

2.  echo -n "hello world" | dd cbs=1 conv=unblock 2>/dev/null

  主要演示cbs,每次轉(zhuǎn)換一個(gè)字節(jié), conv=unblock 是將cbs 大小的塊中尾部的空格替換為一個(gè)換行符  2> 是錯(cuò)誤信息輸出流  /dev/null 開頭介紹了

解讀help:

(不愿意看這么一大段,嘗試先跳過,看解讀)

用法:dd [操作數(shù)] ...
或:dd 選項(xiàng)
 復(fù)制文件,依照操作數(shù)轉(zhuǎn)換并格式化。

  bs=比特?cái)?shù)    一次讀寫的比特?cái)?shù)
  cbs=比特?cái)?shù)    一次轉(zhuǎn)換的比特?cái)?shù)
  conv=CONVS    依照每個(gè)逗號(hào)分割的標(biāo)志列表轉(zhuǎn)換文件
  count=塊數(shù)    只將指定個(gè)塊數(shù)復(fù)制到塊
  ibs=比特?cái)?shù)    一次讀取的比特?cái)?shù)(默認(rèn):512)
   if=文件    從指定文件中讀取
  iflag=符號(hào)    按照以逗號(hào)分隔的符號(hào)列表指定的方式讀取
  obs=比特?cái)?shù)    一次寫入指定比特?cái)?shù)(默認(rèn):512)
   of=文件    寫入到指定文件
  oflag=符號(hào)    按照以逗號(hào)分隔的符號(hào)列表指定的方式寫入
  seek=塊數(shù)    在輸出開始處跳過指定的塊數(shù)
  skip=塊數(shù)    在輸入開始處跳過指定的塊數(shù)
  status=noxfer    禁止傳輸統(tǒng)計(jì)

塊和字節(jié)數(shù)后可能帶有以下的一個(gè)或多個(gè)后綴:
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.

每個(gè) CONV 符號(hào)可能為:

  ascii        由EBCDIC 碼轉(zhuǎn)換至ASCII 碼
  ebcdic    由ASCII 碼轉(zhuǎn)換至EBCDIC 碼
  ibm        由ASCII 碼轉(zhuǎn)換至替換的EBCDIC 碼
  block        將結(jié)束字符塊里的換行替換成等長的空格
  unblock    將cbs 大小的塊中尾部的空格替換為一個(gè)換行符
  lcase        將大寫字符轉(zhuǎn)換為小寫
  ucase        將小寫字符轉(zhuǎn)換為大寫
  swab        交換每一對輸入數(shù)據(jù)字節(jié)
  sync        將每個(gè)輸入數(shù)據(jù)塊以NUL 字符填滿至ibs 的大?。划?dāng)配合block
         或unblock 時(shí),會(huì)以空格代替NUL 字符填充
  excl        fail if the output file already exists
   nocreat    do not create the output file
   notrunc    不截?cái)噍敵鑫募?
  noerror    讀取數(shù)據(jù)發(fā)生錯(cuò)誤后仍然繼續(xù)
  fdatasync    結(jié)束前將輸出文件數(shù)據(jù)寫入磁盤
  fsync    類似上面,但是元數(shù)據(jù)也一同寫入

FLAG 符號(hào)可以是:

  append    追加模式(僅對輸出有意義;隱含了conv=notrunc)
   direct    使用直接I/O 存取模式
  directory    除非是目錄,否則 directory 失敗
  dsync        使用同步I/O 存取模式
  sync        與上者類似,但同時(shí)也對元數(shù)據(jù)生效
  fullblock    為輸入積累完整塊(僅iflag)
   nonblock    使用無阻塞I/O 存取模式
  noatime    不更新存取時(shí)間
  nocache    丟棄緩存數(shù)據(jù)
  noctty    不根據(jù)文件指派控制終端
  nofollow    不跟隨鏈接文件

解讀:

1. bs ibs obs  cbs

bs: 一次 讀寫 = ibs+obs
ibs: 一次讀
obs: 一次寫
cbs: 一次轉(zhuǎn)換

2. if of

if 是讀取的文件
of 是輸出的文件

3. seek skip

skip 在從if中讀取時(shí)  跳過多少比特
seek 在寫入of時(shí), 跳過多少比特

實(shí)戰(zhàn)例子:

1. 批量生成隨機(jī)名稱的測試文件

for i in {10..10}  
do  
dd if=/dev/zero of=junk.test$i bs="$RANDOM"K count=20  
done

2. 備份和恢復(fù)

備份

dd if=abc.gz of=abc.gz.bak1 bs=1k count=10000  
dd if=abc.gz of=abc.gz.bak2 bs=1k skip=10000 count=70000  
dd if=abc.gz of=abc.gz.bak3 bs=1k skip=80000

恢復(fù)方法如下:

dd if=abc.gz.bak1 of=abc.gz  
dd if=abc.gz.bak2 of=abc.gz bs=1k seek=10000  
dd if=abc.gz.bak3 of=abc.gz bs=1k seek=80000

3. 轉(zhuǎn)換大小寫

生成大寫:dd if=dd.txt of=my.log bs=1M count=1 conv=ucase

生成小寫:為了不懶惰,留給讀者試試

4. 拷貝自己 

代碼如下:


file_subscript=copy  
dd if=$0 of=$0.$file_subscript 2>/dev/null

5.要把一張軟盤的內(nèi)容拷貝到另一張軟盤上,利用/tmp作為臨時(shí)存儲(chǔ)區(qū)。把源盤插入驅(qū)動(dòng)器中,輸入下述命令:

$ dd if =/dev/fd0 of = /tmp/tmpfile

拷貝完成后,將源盤從驅(qū)動(dòng)器中取出,把目標(biāo)盤插入,輸入命令:

$ dd if = /tmp/tmpfile of =/dev/fd0

軟盤拷貝完成后,應(yīng)該將臨時(shí)文件刪除:

$ rm /tmp/tmpfile  

6. 把net.i這個(gè)文件寫入軟盤中,并設(shè)定讀/寫緩沖區(qū)的數(shù)目。

(注意:軟盤中的內(nèi)容會(huì)被完全覆蓋掉)

$ dd if = net.i of = /dev/fd0 bs = 16384  

7.將文件sfile拷貝到文件 dfile中。

$ dd if=sfile of=dfile

8.創(chuàng)建一個(gè)100M的空文件

dd if=/dev/zero of=hello.txt bs=100M count=1

=============================================

/dev/null,外號(hào)叫無底洞,你可以向它輸出任何數(shù)據(jù),它通吃,并且不會(huì)撐著!
/dev/zero,是一個(gè)輸入設(shè)備,你可你用它來初始化文件。

/dev/null------它是空設(shè)備,也稱為位桶(bit bucket)。任何寫入它的輸出都會(huì)被拋棄。如果不想讓消息以標(biāo)準(zhǔn)輸出顯示或?qū)懭胛募?,那么可以將消息重定向到位桶?br/>/dev/zero------該設(shè)備無窮盡地提供0,可以使用任何你需要的數(shù)目——設(shè)備提供的要多的多。他可以用于向設(shè)備或文件寫入字符串0。
$ dd if=/dev/zero of=./test.txt bs=1k count=1
$ ls -l
total 4
-rw-r--r--     1 oracle    dba           1024 Jul 15 16:56 test.txt

eg:

$ find / -name access_log   2>/dev/null

以上是“l(fā)inux中dd命令有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI