今天第一天寫,先說下寫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中的文本比對