第二十一章 建立任意大小的文件和分隔任意大小的文件:dd命令、split命令、csplit命令

第二十一章 建立任意大小的文件和分隔任意大小的文件:dd命令、split命令、csplit命令

dd命令

名詞解釋

dd命令用語複製文件,並對原文件的內容進行轉換和格式化處理。dd命令功能很強大對於一些比較底層的問題,使用dd命令每每能夠獲得出人意料的效果。用的比較多的仍是用dd來備份裸設備。可是不推薦,若是須要備份oracle裸設備的,可使用rman備份,或使用第三方軟件備份,使用dd的話,管理起來不太方便。git

建議在有須要的時候使用dd對物理磁盤操做,若是是文件系統的話,仍是使用tar backup cpio等其餘命令更加方便。另外,使用dd對磁盤操做時,最好使用塊設備文件。正則表達式

語法

dd(選項)

選項

bs=<字節數> :將ibs(輸入)與歐巴桑(輸出)設成指定的字節數。
cbs=<字節數> :轉換時,每次只轉換指定的字節數。
conv=<字節數>:指定文件轉換的方式。
count=<區塊數>:僅讀取指定的區塊數。
ibs=<字節數>:每次讀取的字節數。
obs=<字節數>:每次輸出的字節數。
of=<文件>:輸出到文件。
seek=<區塊數>:一開始輸出時,跳過指定的區塊數。
skip=<區塊數>:一開始讀取時,跳過指定的區塊數。
--help:幫助
--version:顯示版本信息

實例

[root@ceshi dd]# dd if=/dev/zero of=sun.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00395019 s, 265 MB/s

[root@ceshi dd]# du -sh sun.txt 
1.0M    sun.txt

該命令建立了一個1M大小的文件sun.txt,其中參數解釋:oracle

  • if 表明輸入文件。若是不指定if,默認就會從stdin中讀取輸入。
  • of 表明輸出文件。若是不指定of,默認就會將stdout做爲默認輸出。
  • bs 表明字節爲單位的塊大小。
  • count 表明被賦值的塊數。
  • /dev/zero 是一個字符設備,會不斷返回0值字節(\0)。

塊大小可使用的計量單位表ide

單元大小 代碼
字節(1B) c
字節(2B) w
塊(512B) b
千字節(1024B) k
兆字節(1024KB) M
吉字節(1024MB) G

以上命令能夠看出,可使用dd命令來測試內存操做速度:測試

1048576 bytes (1.0 MB) copied, 0.00395019 s, 265 MB/s

split命令

名詞解釋

split命令能夠將一個大文件分割成不少個小文件,有時須要將文件分割成更小的片斷,好比:爲提升可讀性,生成日誌等。ui

選項

-b:值爲每一輸出檔案的大小,單位爲byte 。
-C:每一輸出當中,單行的最大byte數。
-d:使用數字做爲後綴。
-l:值爲每一輸出檔的列數大小。
-a length:設定length指定輸出文件的後綴的長度
-a length split_file:設定split_file指定輸出文件名的前綴

實例

生成一個大小爲100KB的測試文件日誌

[root@ceshi split]# dd if=/dev/zero bs=100k count=1 of=date.file
1+0 records in
1+0 records out
102400 bytes (102 kB) copied, 0.000913943 s, 112 MB/s

使用split命令將上面建立的date.file文件分割成大小爲10KB的小文件:code

[root@ceshi split]# split -b 10k date.file 
[root@ceshi split]# ls
date.file  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

文件被分割成多個帶有字母的後綴文件,若是想用數字後綴使用-d;同時可使用-a length來指定後綴的長度:orm

[root@ceshi split]# split -b 10k date.file -d -a 3
[root@ceshi split]# ls
date.file  x000  x001  x002  x003  x004  x005  x006  x007  x008  x009  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

爲分割後的文件指定文件名的前綴:server

[root@ceshi split]# split -b 10k date.file -d -a 3 split_file
[root@ceshi split]# ls
date.file      split_file002  split_file005  split_file008  x001  x004  x007  xaa  xad  xag  xaj
split_file000  split_file003  split_file006  split_file009  x002  x005  x008  xab  xae  xah
split_file001  split_file004  split_file007  x000           x003  x006  x009  xac  xaf  xai

使用-l選項根據文件的行數來分割文件,例如把文件分割成每一個文件包含10行的小文件:

split -l 10 date.file

csplit命令

名詞解釋

csplit命令 用於將一個大文件分割成小的碎片,而且將分割後的每一個碎片保存成一個文件。碎片文件的命令相似「xx00、xx01」。csplit命令 是split的一個變體,split只可以根據文件大小或行數來分割,但csplit可以根據文件自己特色來分割文件。

語法

csplit(選項)(參數)

選項

  • -b<輸出格式> 或 --suffix-format=<輸出格式> :預設的輸出 格式其文件名稱爲xx00、xx01等,用戶能夠經過改變<輸出格式>來改變輸出的文件名;
  • -f<輸出字首字符串> 或 --prefix=<輸出字首字符串> :預設的輸出字首字符串其文件名爲xx00、xx01等;若是指定輸出字首字符串爲hello,則輸出文件名爲hello00、hello01等。
  • -k 或 --keep-files :保留文件,就算髮生錯誤或中斷執行,也不能刪除已經輸出保存的文件。
  • -n<輸出文件名位數> 或 --digits=<輸出文件名位數> :預設的輸出文件名位數,其文件名稱爲xx00、xx01等;若是用戶指定輸出文件名位數爲3,則輸出文件名爲xx000、xx001等。
  • -q 或 --quiet 或 --silent :不顯示指令執行過程。
  • -z 或 --elide-empty-files :刪除長度爲0 byte文件。

參數

文件:指定要分割的原文件。

模式:指定要分割文件時的匹配模式。

實例

測試文件內容server.log

[root@ceshi csplit]# cat server.log 
SERVER-1
[con] 10.10.10.1 suc
[con] 10.10.10.2 fai
[dis] 10.10.10.3 pen
[con] 10.10.10.4 suc
SERVER-2
[con] 10.10.10.5 suc
[con] 10.10.10.6 fai
[dis] 10.10.10.7 pen
[con] 10.10.10.8 suc
SERVER-3
[con] 10.10.10.9 suc
[con] 10.10.10.10 fai
[dis] 10.10.10.11 pen
[con] 10.10.10.12 suc

須要將server.log分割成server1.log、server2.log、server3.log,這些文件的內容分別取自原文件中不一樣的SERVER部分:

[root@ceshi csplit]# csplit server.log /SERVER/ -n2 -s {*} -f server -b "%02d.log"; rm -rf server00.log
[root@ceshi csplit]# ls
server01.log  server02.log  server03.log  server.log

命令詳細說明:

  • /正則表達式/ :匹配文本樣式,如:/server/ ,從第一行到包含server的匹配行。
  • {*} :表示根據匹配重複執行分割,知道文件末尾中止,使用{整數}表明分割執行的次數。
  • -s :靜默模式,不打印其餘信息。
  • -n :指定分割後的文件名後綴的數字個數。如:0一、0二、03
  • -f :指定分割後的文件名前綴。
  • -b :指定後綴格式。如:%02d.log,相似於C語言中的printf參數格式。
  • rm -rf server00.log :是刪除第一個文件,由於分割後的第一個文件沒有內容,匹配的單詞就位於文件的第一行中。
相關文章
相關標籤/搜索