1. 程式人生 > >壓縮、解壓縮工具及週期性任務計劃

壓縮、解壓縮工具及週期性任務計劃

1、壓縮、解壓縮工具

壓縮比:壓縮前體積大小/壓縮後體積大小
壓縮是一種用時間換空間的操作,用壓縮時CPU的時間換取磁碟的儲存空間。
壓縮、解壓縮工具:
(1)compress/uncompress,.Z
(2)gzip/gunzip,.gz
(3)bzip2/bunzip2,.bz2
(4)xz/unxz,.xz
(5)lzma/unlzma,.lzma
(6)zip/unzip,.zip
(7)tar,.tar
(8)cpio,.cpio

(1)gzip/gunzip/zcat
1)gzip [OPTION]... FILE...
壓縮命令。該命令只能壓縮檔案,不能壓縮目錄。
-d:解壓縮,相當於gunzip;
-#:指定壓縮比,預設是6,數字越大壓縮比越大(1-9),所需CPU時鐘週期越長,所佔空間越小;
-c:將壓縮結果輸出至標準輸出,原檔案和壓縮檔案全部保留;
gzip -c FILE > /PATH/TO/SOMEFILE.gz


2)gunzip,解壓縮命令。
3)zcat檢視壓縮檔案命令。將壓縮檔案放在一個臨時位置,生成臨時檔案檢視,而cat看到的壓縮檔案只是亂碼。只適用於檢視小檔案。
(2)bzip2/bunzip2/bzcat
1)bzip2 [OPTION]... FILE...
壓縮命令。該命令只能壓縮檔案,不能壓縮目錄。
-d:解壓縮
-#:指定壓縮比;預設是6;數字越大壓縮比越大(1-9);
-k:keep,保留原檔案;
2)bunzip2,解壓縮命令。
3)bzcat,檢視壓縮檔案命令。
(3)xz/unxz/xzcat,lzma/unlzma/lzcat
1)xz [OPTION]… FILE…
壓縮檔案命令。只能壓縮檔案,不能壓縮目錄。
-d:解壓縮;
-#:指定壓縮比;預設是6;數字越大壓縮比越大(1-9);
-k:保留原檔案。
2)unxz,解壓縮命令。
3)xzcat,檢視壓縮檔案命令。
(4)歸檔命令:tar, cpio
1)tar [OPTION]... FILE...

  1. 建立歸檔
    -c -f /PATH/TO/SOMEFILE.tar FILE...
    -cf /PATH/TO/SOMEFILE.tar FILE...:順序前後不能顛倒;
    [[email protected] exercise]# tar -cf ./mylog.tar *.log
  2. 展開歸檔
    -xf /PATH/FROM/SOMEFILE.tar
    -xf /PATH/FROM/SOMEFILE.tar -C /PATH/TO/SOMEDIR:展開至某處
    [[email protected] exercise]# mkdir newtest
    [[email protected] exercise]# tar -xf mylog.tar -C newtest/
  3. 檢視歸檔檔案的檔案列表
    -tf /PATH/TO/SOMEFILE.tar
    歸檔完成後通常需要壓縮,結合此前的壓縮工具,就能實現壓縮多個檔案了。
  4. 歸檔壓縮
    -z:gzip2
    -zcf /PATH/TO/SOMEFILE.tar.gz FILE...
    解壓縮並展開歸檔:-zxf /PATH/TO/SOMEFILE.tar.gz
    -j:壓縮成bzip2格式,常用選項:-jcf,-jxf;
    -J:壓縮成xz格式,常用選項:-Jcf,-Jxf。

(5)zip/unzip
[[email protected] exercise]# zip test.zip test
adding: test/ (stored 0%)

2、週期性任務計劃

未來的某時間點執行一次某任務:at, batch,週期性執行某任務:crontab,執行結果會通過郵件傳送給使用者。
通過以下兩條命令檢視已開啟的埠號:
~ ]# netstat -tnlp
~ ]# ss -tnl
本地電子郵件服務:smtp、pop3、imap4。
(1)mail命令
MUA:Mail User Agent,使用者收發郵件的工具程式。
mailx [-s ‘SUBJECT’] username[@hostname]
該命令用於傳送和接收電子郵件。
郵件正文的生成:
1)互動式輸入,. 單獨成行可以表示正文結束,Ctrl+d提交亦可;
2)通過輸入重定向傳送檔案;
3)將命令的輸出結果通過管道傳送郵件;
將/etc/fstab檔案作為郵件正文:
mail -s 'fstab file' root < /etc/fstab
cat /etc/fstab | mail -s 'to you' centos
(2)at命令
該命令用於在未來某時間點一次執行某任務。
at [OPTION]… TIME
TIME格式如下:
HH:MM [YYYY-mm-dd],noon,midnight,teatime,tomorrow,now+#
單位:minutes, hours, days, OR weeks
at的作業有佇列,用單個字母表示,預設都使用a佇列;
常用選項:
-l:檢視作業佇列,相當於atq;
-f /PATH/FROM/SOMEFILE:從指定檔案中讀取作業任務,而不用再互動式輸入;
-d:刪除指定的作業,相當於atrm;
-c:檢視指定作業的具體內容;
-q QUEUE:指明佇列;
注意:作業執行結果是以郵件傳送給提交作業的使用者;

vim at.tasks
at -f at.tasks now+5min
at -d 3                     刪除第3號任務

(3)batch命令
batch會讓系統自行選擇在系統資源較空閒的時間去執行指定的任務。
(4)週期性任務計劃:cron
服務程式:cronie:主程式包,提供了crond守護程序及相關輔助工具。
確保crond守護程序(daemon)處於執行狀態:
CentOS 7:

systemctl  status  crond.service
Active: active (running) ... ...

CentOS 6:

service  crond  status
... is running.

此命令CentOS7也可以使用。
向crond提交作業的方式不同於at,它需要使用專用的配置檔案,此檔案有固定格式,不建議使用文字編輯器直接編輯此檔案,要使用crontab命令;
cron任務分為兩類:
1)系統cron任務:主要用於實現系統自身的維護,需要手動編輯:/etc/crontab檔案;
2)使用者cron任務:操作命令:crontab命令。

系統cron的配置格式:/etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

注意:
1)每一行定義一個週期性任務,共7個欄位:
 * * * * * : 定義週期性時間
user-name : 執行任務的使用者身份
command to be executed:任務
2)此處的環境變數不同於使用者登入後獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變數;
3)執行結果郵件傳送給MAILTO指定的使用者;

使用者cron的配置格式:/var/spool/cron/USERNAME

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  *   command to be executed	

注意:
1)每行定義一個cron任務,共6個欄位;
2)此處的環境變數不同於使用者登入後獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變數;
3)郵件傳送給當前使用者;

時間表示法:
1)特定值。給定時間點有效取值範圍內的值。day of week和day of month一般不同時使用。
2)* 給定時間點上有效取值範圍內的所有值,表示“每…”。
3)離散取值:在時間點上使用逗號分隔的多個值,#,#,#。
4)連續取值:在時間點上使用-連線開頭和結束,#-#。
5)在指定時間點上定義步長,/#:#即步長;
注意:
1)指定的時間點不能被步長整除時,其意義將不復存在;
2)最小時間單位為“分鐘”,想完成“秒”級任務,得需要額外借助於其它機制;定義成每分鐘任務:而在利用指令碼實現在每分鐘之內,迴圈執行多次,如每3秒執行一次指令碼;

示例:
(1) 3 * * * *:每小時執行一次;每小時的第3分鐘;
(2) 3 4 * * 5:每週執行一次;每週5的4點3分;
(3) 5 6 7 * *:每月執行一次;每月的7號的6點5分;
(4) 7 8 9 10 *:每年執行一次;每年的10月9號8點7分;
(5) 9 8 * * 3,7:每週三和週日的8點9分;
(6) 0 8,20 * * 3,7:每週三和週日的8點和20點各執行一次;
(7) 0 9-18 * * 1-5:在工作時間內的每小時執行一次;
(8) */5 * * * *:每5分鐘執行一次某任務;
(9) */7

crontab命令:crontab [-u user] [-l | -r | -e] [-i]
-e:編輯任務;
-l:列出所有任務;
-r:移除所有任務;即刪除/var/spool/cron/USERNAME檔案;
-i:在使用-r選項移除所有任務時提示使用者確認;
-u user:root使用者可為指定使用者管理cron任務;
注意:執行結果以郵件通知給當前使用者;如果拒絕接收郵件:
1)COMMAND > /dev/null:命令結果正確不傳送郵件,命令結果錯誤傳送郵件;
2)COMMAND &> /dev/null:命令結果正確錯誤都不傳送郵件;
注意:定義COMMAND時,如果命令需要用到%,需要對其轉義,但放置於單引號中的%不用轉義亦可。