1. 程式人生 > >第二十一章 創建任意大小的文件和分隔任意大小的文件:dd命令、split命令、csplit命令

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

改變 code 物理 records 其中 需要 提高 10.10 rec

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

dd命令

名詞解釋

dd命令用語復制文件,並對原文件的內容進行轉換和格式化處理。dd命令功能很強大對於一些比較底層的問題,使用dd命令往往可以得到出人意料的效果。用的比較多的還是用dd來備份裸設備。但是不推薦,如果需要備份oracle裸設備的,可以使用rman備份,或使用第三方軟件備份,使用dd的話,管理起來不太方便。

建議在有需要的時候使用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,其中參數解釋:

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

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

單元大小 代碼
字節(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命令可以將一個大文件分割成很多個小文件,有時需要將文件分割成更小的片段,比如:為提高可讀性,生成日誌等。

選項

-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的小文件:

[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來指定後綴的長度:

[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

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

[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 :指定分割後的文件名後綴的數字個數。如:01、02、03
  • -f :指定分割後的文件名前綴。
  • -b :指定後綴格式。如:%02d.log,類似於C語言中的printf參數格式。
  • rm -rf server00.log :是刪除第一個文件,因為分割後的第一個文件沒有內容,匹配的單詞就位於文件的第一行中。

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