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

來源:互聯網
上載者:User

今天第一天寫,先說下寫shell指令碼的基本知識

1. shell指令碼以.sh 為副檔名,通常運行 ./${filename}.sh 或者 sh ${filename}.sh
2. shell 指令碼開頭以 #!/bin/bash #!讀作 “shebang”
3. 開啟調試  #!/bin/bash –xv
4. /dev/null 任何東西丟進去都會消失,linux黑洞。 /dev/zero 用於初始化,會產生0

今天先介紹 dd 命令

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

開篇例子:

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

  拷貝 infile.log內容 到 outfile.log. 一次讀寫位元數為1M , 每次讀寫一個塊(1M,由bs決定)

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

  主要示範cbs,每次轉換一個位元組, conv=unblock 是將cbs 大小的塊中尾部的空格替換為一個分行符號  2> 是錯誤資訊輸出資料流  /dev/null 開頭介紹了

解讀help:

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

用法:dd [運算元] ...
或:dd 選項
 複製檔案,依照運算元轉換並格式化。

  bs=位元數    一次讀寫的位元數
  cbs=位元數    一次轉換的位元數
  conv=CONVS    依照每個逗號分割的標誌列錶轉換檔案
  count=塊數    只將指定個塊數複製到塊
  ibs=位元數    一次讀取的位元數(預設:512)
   if=檔案    從指定檔案中讀取
  iflag=符號    按照以逗號分隔的符號列表指定的方式讀取
  obs=位元數    一次寫入指定位元數(預設:512)
   of=檔案    寫入到指定檔案
  oflag=符號    按照以逗號分隔的符號列表指定的方式寫入
  seek=塊數    在輸出開始處跳過指定的塊數
  skip=塊數    在輸入開始處跳過指定的塊數
  status=noxfer    禁止傳輸統計

塊和位元組數後可能帶有以下的一個或多個尾碼:
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 碼轉換至ASCII 碼
  ebcdic    由ASCII 碼轉換至EBCDIC 碼
  ibm        由ASCII 碼轉換至替換的EBCDIC 碼
  block        將結束字元塊裡的換行替換成等長的空格
  unblock    將cbs 大小的塊中尾部的空格替換為一個分行符號
  lcase        將大寫字元轉換為小寫
  ucase        將小寫字元轉換為大寫
  swab        交換每一對輸入資料位元組
  sync        將每個輸入資料區塊以NUL 字元填滿至ibs 的大小;當配合block
         或unblock 時,會以空格代替NUL 輸入鍵台
  excl        fail if the output file already exists
   nocreat    do not create the output file
   notrunc    不截斷輸出檔案
  noerror    讀取資料發生錯誤後仍然繼續
  fdatasync    結束前將輸出檔案資料寫入磁碟
  fsync    類似上面,但是中繼資料也一同寫入

FLAG 符號可以是:

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

 

解讀:

1. bs ibs obs  cbs

bs: 一次 讀寫 = ibs+obs
ibs: 一次讀
obs: 一次寫
cbs: 一次轉換

2. if of

if 是讀取的檔案
of 是輸出的檔案

3. seek skip

skip 在從if中讀取時  跳過多少位元
seek 在寫入of時, 跳過多少位元

實戰例子:

1. 批量產生隨機名稱的測試檔案

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

2. 備份和恢複

備份

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 

恢複方法如下:

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. 轉換大小寫

產生大寫: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.要把一張磁碟片的內容拷貝到另一張磁碟片上,利用/tmp作為臨時儲存區。把來源硬碟插入磁碟機中,輸入下述命令:

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

拷貝完成後,將來源硬碟從磁碟機中取出,把目標盤插入,輸入命令:

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

磁碟片拷貝完成後,應該將臨時檔案刪除:

$ rm /tmp/tmpfile  

6. 把net.i這個檔案寫入磁碟片中,並設定讀/寫緩衝區的數目。

(注意:磁碟片中的內容會被完全覆蓋掉)

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

7.將檔案sfile拷貝到檔案 dfile中。

$ dd if=sfile of=dfile

8.建立一個100M的空檔案

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

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

/dev/null,外號叫無底洞,你可以向它輸出任何資料,它通吃,並且不會撐著!
/dev/zero,是一個輸入裝置,你可你用它來初始設定檔案。

/dev/null------它是空裝置,也稱為位桶(bit bucket)。任何寫入它的輸出都會被拋棄。如果不想讓訊息以標準輸出顯示或寫入檔案,那麼可以將訊息重新導向到位桶。
/dev/zero------該裝置無窮盡地提供0,可以使用任何你需要的數目——裝置提供的要多的多。他可以用於向裝置或檔案寫入字串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


本文出自 “書生” 部落格

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.