主頁 > 知識庫 > 一天一個shell命令 文本操作系列-linux dd使用教程

一天一個shell命令 文本操作系列-linux dd使用教程

熱門標(biāo)簽:外呼電話系統(tǒng)怎么操作 測繪地圖標(biāo)注名稱 天津電話外呼系統(tǒng)排名 商機地圖標(biāo)注 智能電銷機器人有用嗎 百度地圖標(biāo)注直線距離 怎么在百度地圖標(biāo)注公司的位置 鶴崗400電話申請 德陽400電話申請

今天第一天寫,先說下寫shell腳本的基本知識

1. shell腳本以.sh 為擴展名,通常運行 ./${filename}.sh 或者 sh ${filename}.sh
2. shell 腳本開頭以 #!/bin/bash #!讀作 “shebang”
3. 開啟調(diào)試  #!/bin/bash –xv
4. /dev/null 任何東西丟進去都會消失,linux黑洞。 /dev/zero 用于初始化,會產(chǎn)生0

今天先介紹 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. 一次讀寫比特數(shù)為1M , 每次讀寫一個塊(1M,由bs決定)

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

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

解讀help:

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

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

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

塊和字節(jié)數(shù)后可能帶有以下的一個或多個后綴:
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 碼轉(zhuǎn)換至ASCII 碼
  ebcdic    由ASCII 碼轉(zhuǎn)換至EBCDIC 碼
  ibm        由ASCII 碼轉(zhuǎn)換至替換的EBCDIC 碼
  block        將結(jié)束字符塊里的換行替換成等長的空格
  unblock    將cbs 大小的塊中尾部的空格替換為一個換行符
  lcase        將大寫字符轉(zhuǎn)換為小寫
  ucase        將小寫字符轉(zhuǎn)換為大寫
  swab        交換每一對輸入數(shù)據(jù)字節(jié)
  sync        將每個輸入數(shù)據(jù)塊以NUL 字符填滿至ibs 的大?。划?dāng)配合block
         或unblock 時,會以空格代替NUL 字符填充
  excl        fail if the output file already exists
   nocreat    do not create the output file
   notrunc    不截斷輸出文件
  noerror    讀取數(shù)據(jù)發(fā)生錯誤后仍然繼續(xù)
  fdatasync    結(jié)束前將輸出文件數(shù)據(jù)寫入磁盤
  fsync    類似上面,但是元數(shù)據(jù)也一同寫入

FLAG 符號可以是:

  append    追加模式(僅對輸出有意義;隱含了conv=notrunc)
   direct    使用直接I/O 存取模式
  directory    除非是目錄,否則 directory 失敗
  dsync        使用同步I/O 存取模式
  sync        與上者類似,但同時也對元數(shù)據(jù)生效
  fullblock    為輸入積累完整塊(僅iflag)
   nonblock    使用無阻塞I/O 存取模式
  noatime    不更新存取時間
  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中讀取時  跳過多少比特
seek 在寫入of時, 跳過多少比特

實戰(zhàn)例子:

1. 批量生成隨機名稱的測試文件

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. 拷貝自己 

復(fù)制代碼 代碼如下:

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

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

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

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

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

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

$ rm /tmp/tmpfile  

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

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

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

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

$ dd if=sfile of=dfile

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

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

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

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

/dev/null------它是空設(shè)備,也稱為位桶(bit bucket)。任何寫入它的輸出都會被拋棄。如果不想讓消息以標(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


本文出自 “書生” 博客

您可能感興趣的文章:
  • 一天一個shell命令 linux文本內(nèi)容操作系列-awk命令詳解
  • 一天一個shell命令 linux文本內(nèi)容操作系列-cut命令詳解
  • 使用Linux正則表達式靈活搜索文件中的文本
  • 一天一個shell命令 linux文本操作系列-touch命令用法
  • 一天一個shell命令 linux文本操作系列-head,tail命令詳解
  • 一天一個shell命令 linux文本操作系列-diff命令詳解
  • 一天一個shell命令 linux文本內(nèi)容操作系列-grep命令詳解
  • 一天一個shell命令 linux文本操作系列-wc命令詳解
  • 詳解Linux文本文件與WIN文本文件換行格式轉(zhuǎn)換命令
  • 教你一招實現(xiàn)Linux中的文本比對

標(biāo)簽:優(yōu)質(zhì)小號 武漢 六盤水 百色 滁州 丹東 自貢 鎮(zhèn)江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一天一個shell命令 文本操作系列-linux dd使用教程》,本文關(guān)鍵詞  一天,一個,shell,命令,文本,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《一天一個shell命令 文本操作系列-linux dd使用教程》相關(guān)的同類信息!
  • 本頁收集關(guān)于一天一個shell命令 文本操作系列-linux dd使用教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章