標籤:tar strong 使用 檔案 資料 類
十二. 行的排序命令sort:
1. sort命令列選項:
選項 |
描述 |
-t |
欄位之間的分隔字元 |
-f |
基於字元排序時忽略大小寫 |
-k |
定義排序的域欄位,或者是基於域欄位的部分資料進行排序 |
-m |
將已排序的輸入檔案,合并為一個排序後的輸出資料流 |
-n |
以整數類型比較欄位 |
-o outfile |
將輸出寫到指定的檔案 |
-r |
倒置排序的順序為由大到小,正常排序為由小到大 |
-u |
只有唯一的記錄,丟棄所有具有相同索引值的記錄 |
-b |
忽略前面的空格 |
2. sort使用執行個體:
提示:在下面的輸出結果中紅色標註的為第一排序欄位,後面的依次為紫、綠。
/> sed -n ‘1,5p‘ /etc/passwd > users
/> cat users
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#-t定義了冒號為域欄位之間的分隔字元,-k 2指定基於第二個欄位正向排序(欄位順序從1開始)。
/> sort -t‘:‘ -k 1 users
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
#還是以冒號為分隔字元,這次是基於第三個域欄位進行倒置排序。
/> sort -t‘:‘ -k 3r users
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
#先以第六個域的第2個字元到第4個字元進行正向排序,在基於第一個域進行反向排序。
/> sort -t‘:‘ -k 6.2,6.4 -k 1r users
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
#先以第六個域的第2個字元到第4個字元進行正向排序,在基於第一個域進行正向排序。和上一個例子比,第4和第5行交換了位置。
/> sort -t‘:‘ -k 6.2,6.4 -k 1 users
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#基於第一個域的第2個字元排序
/> sort -t‘:‘ -k 1.2,1.2 users
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#基於第六個域的第2個字元到第4個字元進行正向排序,-u命令要求在排序時刪除索引值重複的行。
/> sort -t‘:‘ -k 6.2,6.4 -u users
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
/> cat /etc/passwd | wc -l #計算該檔案中文本的行數。
39
/> sed -n ‘35,$p‘ /etc/passwd > users2 #取最後5行並輸出到users2中。
/> cat users2
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
stephen:x:500:500:stephen:/home/stephen:/bin/bash
#基於第3個域欄位以文本的形式排序
/> sort -t‘:‘ -k 3 users2
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
stephen:x:500:500:stephen:/home/stephen:/bin/bash
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
#基於第3個域欄位以數字的形式排序
/> sort -t‘:‘ -k 3n users2
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
stephen:x:500:500:stephen:/home/stephen:/bin/bash
#基於當前系統執行進程的owner名排序,並將排序的結果寫入到result檔案中
/> ps -ef | sort -k 1 -o result
十三. 重複資料刪除行的命令uniq:
uniq有3個最為常用的選項,見如下列表:
選項 |
命令描述 |
-c |
可在每個輸出行之前加上該行重複的次數 |
-d |
僅顯示重複的行 |
-u |
顯示為重複的行 |
/> cat testfile
hello
world
friend
hello
world
hello
#直接刪除未經排序的檔案,將會發現沒有任何行被刪除
/> uniq testfile
hello
world
friend
hello
world
hello
#排序之後刪除了重複行,同時在行首位置輸出該行重複的次數
/> sort testfile | uniq -c
1 friend
3 hello
2 world
#僅顯示存在重複的行,並在行首顯示該行重複的次數
/> sort testfile | uniq -dc
3 hello
2 world
#僅顯示沒有重複的行
/> sort testfile | uniq -u
friend
十四. 檔案壓縮解壓命令tar:
1. tar命令列選項
選項 |
命令描述 |
-c |
建立壓縮檔案 |
-x |
解壓 |
--delete |
從壓縮包中刪除已有檔案,如果該檔案在包中出現多次,該操作其將全部刪除。 |
-t |
查看壓縮包中的檔案清單 |
-r |
向壓縮歸檔檔案末尾追加檔案 |
-u |
更新原壓縮包中的檔案 |
-z |
壓縮為gzip格式,或以gzip格式解壓 |
-j |
壓縮為bzip2格式,或以bzip2格式解壓 |
-v |
顯示壓縮或解壓的過程,該選項一般不適於後台操作 |
-f |
使用檔案名字,這個參數是最後一個參數,後面只能接檔案名。 |
2. tar使用執行個體:
#將目前的目錄下所有檔案壓縮打包,需要說明的是很多人都習慣將tar工具壓縮的檔案的副檔名命名為.tar
/> tar -cvf test.tar *
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
/> cp ../*.log . #從上一層目錄新copy一個.log檔案到目前的目錄。
/> tar -rvf test.tar *.log #將副檔名為.log的檔案追加到test.tar包裡。
/> tar -tvf test.tar
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
-rw-r--r-- root/root 48217 2011-11-11 22:16 install.log
/> touch install.log #使原有的檔案更新一下最新修改時間
/> tar -uvf test.tar *.log #重新將更新後的log檔案更新到test.tar中
/> tar -tvf test.tar #從輸出結果可以看出tar包中多出一個更新後install.log檔案。
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
-rw-r--r-- root/root 48217 2011-11-11 22:16 install.log
-rw-r--r-- root/root 48217 2011-11-11 22:20 install.log
/> tar --delete install.log -f test.tar #基於上面的結果,從壓縮包中刪除install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f users users2 #從目前的目錄將tar中的兩個檔案刪除
/> tar -xvf test.tar #解壓
/> ls -l users* #僅列出users和users2的詳細列表資訊
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
#以gzip的格式壓縮並打包,解壓時也應該以同樣的格式解壓,需要說明的是以該格式壓縮的包習慣在副檔名後加.gz
/> tar -cvzf test.tar.gz *
/> tar -tzvf test.tar.gz #查看壓縮包中檔案清單時也要加z選項(gzip格式)
-rw-r--r-- root/root 48217 2011-11-11 22:50 install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f users users2 install.log
/> tar -xzvf test.tar.gz #以gzip的格式解壓
/> ls -l *.log users*
-rw-r--r-- root/root 48217 2011-11-11 22:50 install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f test.* #刪除目前的目錄下原有的壓縮包檔案
#以bzip2的格式壓縮並打包,解壓時也應該以同樣的格式解壓,需要說明的是以該格式壓縮的包習慣在副檔名後加.bz2
/> tar -cvjf test.tar.bz2 *
/> tar -tjvf test.tar.bz2 #查看壓縮包中檔案清單時也要加j選項(bzip2格式)
-rw-r--r-- root/root 48217 2011-11-11 22:50 install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f *.log user*
/> tar -xjvf test.tar.bz2 #以bzip2的格式解壓
/> ls -l
-rw-r--r--. 1 root root 48217 Nov 11 22:50 install.log
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
十五. 大檔案拆分命令split:
下面的列表中給出了該命令最為常用的幾個命令列選項:
選項 |
描述 |
-l |
指定行數,每多少分隔成一個檔案,預設值為1000行。 |
-b |
指定位元組數,支援的單位為:k和m |
-C |
與-b參數類似,但切割時盡量維持每行的完整性 |
-d |
組建檔案的尾碼為數字,如果不指定該選項,預設為字母 |
/> ls -l
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
/> split -b 5k test.tar.bz2 #以每檔案5k的大小切割test.tar.bz2
/> ls -l #查看切割後的結果,預設情況下拆分後的檔案名稱為以下形式。
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 5120 Nov 11 23:34 xaa
-rw-r--r--. 1 root root 5120 Nov 11 23:34 xab
-rw-r--r--. 1 root root 290 Nov 11 23:34 xac
/> rm -f x* #刪除拆分後的小檔案
/> split -d -b 5k test.tar.bz2 #-d選項以尾碼為數位形式命名拆分後的小檔案
/> ls -l
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 5120 Nov 11 23:36 x00
-rw-r--r--. 1 root root 5120 Nov 11 23:36 x01
-rw-r--r--. 1 root root 290 Nov 11 23:36 x02
/> wc install.log -l #計算該檔案的行數
/> split -l 300 install.log #每300行拆分成一個小檔案
/> ls -l x*
-rw-r--r--. 1 root root 11184 Nov 11 23:42 xaa
-rw-r--r--. 1 root root 10805 Nov 11 23:42 xab
-rw-r--r--. 1 root root 12340 Nov 11 23:42 xac
-rw-r--r--. 1 root root 11783 Nov 11 23:42 xad
-rw-r--r--. 1 root root 2105 Nov 11 23:42 xae