9、壓縮/解壓縮及任務計劃介紹

1、壓縮比:

    壓縮前和壓縮後的大小體積比例

2、壓縮目的:

    時間換空間,用cpu的時間換磁盤的空間;如何選擇壓縮,要衡量是節省cpu時間還是節省硬盤空間。


3、linux壓縮、解壓縮工具,及歸檔工具:

序號壓縮工具解壓縮工具不解壓查看內容後綴備註
1compressuncompress
.z
2gzip
gunzipzcat.gz只能壓縮文件
3bzip2bunzip2
.bz2只能壓縮文件
4xz
unxz
.xz只能壓縮文件
5lzmaunlzmalzcat.lzma
6zip
unzipzcat.zip壓縮比比較小







歸檔工具



1tar




2cpio





3.1、gzip、 gunzip、 zcat:

  gzip [ options ]  [ name ...  ]   //壓縮單個文件,後綴爲.gz,同時刪除原文件

[ options ]:

    -d:直接解壓縮,相當於gunzip,

    -#:制定壓縮比,默認是6,數字越大,壓縮比越大(範圍1-9),不建議修改

    -c:將壓縮結果輸出至標準輸出。

        格式: gzip -c FILE >/PATH/TO/SOMEFILE.GZ

 如:

[root@localhost tmp]# ls

fstab  issue

[root@localhost tmp]# gzip -c issue > ./issue1.gz

[root@localhost tmp]# ll

total 12

-rw-r--r--. 1 root root 540 Nov 20 19:38 fstab

-rw-r--r--. 1 root root  23 Nov 20 19:38 issue

-rw-r--r--. 1 root root  49 Nov 20 19:53 issue1.gz

[root@localhost tmp]# zcat issue1.gz 

\S

Kernel \r on an \m


[root@localhost tmp]# 

    

  gunzip [ optios ]  [ name ...  ]  //解壓縮,同時會刪除原壓縮文件

  zcat [ -fhLV ] [ name ...  ]   //直接查看壓縮中的文件內容,用cat查看會出現亂碼

如:

[root@localhost tmp]# ls

fstab  issue

[root@localhost tmp]# gzip fstab issue 

[root@localhost tmp]# ll

total 8

-rw-r--r--. 1 root root 295 Nov 20 19:38 fstab.gz

-rw-r--r--. 1 root root  49 Nov 20 19:38 issue.gz

[root@localhost tmp]#


[root@localhost tmp]# gunzip fstab.gz issue.gz 

[root@localhost tmp]# ll

total 8

-rw-r--r--. 1 root root 540 Nov 20 19:38 fstab

-rw-r--r--. 1 root root  23 Nov 20 19:38 issue

[root@localhost tmp]# 

 

[root@localhost tmp]# zcat issue.gz 

\S

Kernel \r on an \m


[root@localhost tmp]# 


3.2、 bzip2, bunzip2 、bzcat

  bzip2 [ options ] [ filenames ...  ]  //壓縮單個文件,後綴爲.bz2,同時刪除原文件

[ options ]:

    -d:直接解壓縮,相當於bunzip,

    -#:制定壓縮比,默認是6,數字越大,壓縮比越大(範圍1-9),不建議修改

    -k:保留原文件


   bunzip2 [ options ] [ filenames ...  ]

   bzcat [ -s ] [ filenames ...  ]

如:

[root@localhost tmp]# gzip ./*

[root@localhost tmp]# ll

total 8

-rw-r--r--. 1 root root 295 Nov 20 19:38 fstab.gz

-rw-r--r--. 1 root root  49 Nov 20 19:38 issue.gz

[root@localhost tmp]# gzip -d fstab.gz issue.gz

[root@localhost tmp]# ll

total 8

-rw-r--r--. 1 root root 540 Nov 20 19:38 fstab

-rw-r--r--. 1 root root  23 Nov 20 19:38 issue



3.3、 xz,  unxz,  xzcat,

  xz [ options ] [ filenames ...  ]  //壓縮單個文件,後綴爲.xz,同時刪除原文件

[ options ]:

    -d:直接解壓縮,相當於unxz,

    -#:制定壓縮比,默認是6,數字越大,壓縮比越大(範圍1-9),不建議修改

    -k:保留原文件



注意:gzip、bzip、xz只能壓縮文件不能是目錄,而且三者壓縮和解壓縮都會刪除原文件,三者壓縮比依次增大



3.4、歸檔工具:tar、cpio

由於gzip、bzip2、xz壓縮軟件只能壓縮單個文件,不能壓縮目錄。這種情況下,

如果要壓縮一個目錄,則先要進行歸檔操作,歸檔操作就是將多個文件打包成一個。

歸檔一般會增大文件體積,因爲歸檔也要有一些文件參與,因此可以將目錄歸檔後在壓縮。


3.4.1、tar命令格式:

  tar [OPTION...] [FILE]...

注意:tar命令的options可以不帶“-”,而且創建、展開、查看必須帶-f選項。

options:

    -c:創建歸檔

      tar -cf /PATH/TO/SOMEFILE.tar FILE....

    -x:展開歸檔;-C:和-x一起使用表示展開到何處目錄,也可以不跟,表示當前目錄

      tar -xf /PATH/FROM/SOMEFILE.tar [-C /TO/SOME/PATH]

    -t:不展開歸檔查看歸檔文件

      tar -tf /PATH/TO/SOMEFILE.tar

歸檔後在進行壓縮,也可以歸檔的同時進行壓縮(結合gzip、bzip2、xz)。

    歸檔並壓縮:

    -z:調用gzip

    -j:調用bzip2

    -J:調用xz

    tar {z|j|J}cf /PATH/TO/SOMEFILE.tar.{gz|bz2|xz} FILE...  //歸檔並壓縮

    tar {z|j|J}xf /PATH/TO/SOMEFILE.tar.{gz|bz2|xz} FILE...  //展開歸檔並解壓縮

如:  

[root@localhost tmp]# ls

test

[root@localhost tmp]# tar -zcf test.tar.gz test/

[root@localhost tmp]# ll

total 8

drwxr-xr-x. 2 root root   49 Nov 20 20:55 test

-rw-r--r--. 1 root root 5139 Nov 20 21:08 test.tar.gz

[root@localhost tmp]# 


如:

[root@localhost tmp]# ll

total 0

drwxr-xr-x. 2 root root 49 Nov 20 20:55 test

[root@localhost tmp]# gzip test/

gzip: test/ is a directory -- ignored

[root@localhost tmp]# tar -cf test/    //必須指明歸檔後的文件名,否則不通過,如這裏所示

tar: Cowardly refusing to create an empty archive

Try `tar --help' or `tar --usage' for more information.

[root@localhost tmp]# tar -cf test.tar test/

[root@localhost tmp]# ls

test  test.tar

[root@localhost tmp]# tar -tf test.tar //查看歸檔中的文件有哪些

test/

test/fstab

test/functions

test/issue

[root@localhost tmp]# 

[root@localhost tmp]# gzip test.tar 

[root@localhost tmp]# ll

total 8

drwxr-xr-x. 2 root root   49 Nov 20 20:55 test

-rw-r--r--. 1 root root 5148 Nov 20 20:56 test.tar.gz

[root@localhost tmp]# 


3.5、zip:既能歸檔又能壓縮,因此可以壓縮目錄,但是壓縮比有限。

zip、unzip

命令格式:

   zip /PATH/TO/SOMEFILE.zip FILE....

如:

[root@localhost tmp]# ls

test

[root@localhost tmp]# zip test

zip error: Nothing to do! (test.zip)

[root@localhost tmp]# zip test.zip 

zip error: Nothing to do! (test.zip)

[root@localhost tmp]# zip test.zip test/

  adding: test/ (stored 0%)

[root@localhost tmp]# ls

test  test.zip

[root@localhost tmp]#   




4、任務計劃

4.1、任務計劃:未來的某一時間執行一次某任務,或者重複執行某任務。


4.2、任務計劃分類:

    單次任務計劃:未來某一時間執行一次某任務

    重複任務計劃:某任務在一個時間點,重複執行,如每天執行、每週執行、每月執行等等,


4.3、任務計劃涉及的命令:

    單次任務計劃:at命令、batch命令

    重複任務計劃:crontab命令


4.4、任務計劃的結果反饋

 任務的計劃執行結果:①會通過郵件服務器中的郵件返送給用戶;②此郵件位於本地主機上,目錄在/var/spool/mail/用戶

 要實現每個用戶登錄服務器看到郵件,需滿足的條件:

    啓動本地郵件服務器,此服務僅是本地的

    在/var/spool/mail/目錄下有相應的用戶目錄,如:/var/spool/mail/user123

 查看本地郵件服務是否啓動?

    查看進程是否有tcp25端口開啓,若開啓,說明郵件服務器已啓用

方法一:netstat

[root@localhost ~]# netstat -tnl

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State         

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     

tcp6       0      0 ::1:25                  :::*                    LISTEN     

[root@localhost ~]# 


方法二:     

[root@localhost ~]# ss -tnl

State       Recv-Q Send-Q Local Address:Port               Peer Address:Port                           

LISTEN      0      100     127.0.0.1:25                          *:*                          

LISTEN      0      100           ::1:25                         :::*                  

[root@localhost ~]# 


本地電子郵件服務器介紹:

發送端:使用的協議:smtp;simple mail transmisson protocol。只用來發送郵件,不能接收,類型郵遞員的角色

接收端:使用的協議有兩種:

    pop3:post office protocol

    imap4:internet mail access protocol


linux上實現收發:發送和接收internet郵件

    centos7:mailx

    cenos6:mail

mua:mail user agent:用戶接收郵件的工具程序


發送郵件格式:

    mail [-s 'SUBJECT'] username[@hostname]     //mail [-s '郵件主題'] 用戶名@[主機名]

    郵件正文的內容有三種方式生成:

        ①通過交互式輸入,按ctrl+d提交

        ②通過輸入重定向生成

        ③通過管道生成

查看郵件:

    #mail    //不帶參數,表示查看郵件


如:示例一:

[root@localhost ~]# mail -s "a new mail" root     //寫一封郵件,回車進入正文,寫完後,按ctrl+d退出正文。

this is a new message

EOT

[root@localhost ~]# mail        //查看郵件

Heirloom Mail version 12.5 7/5/10.  Type ? for help.

"/var/spool/mail/root": 1 message 1 new

>N  1 root                  Sat Dec  2 05:33  19/625   "a new mail"

& 1       //輸入要查看郵件的序列號

Message  1:

From [email protected]  Sat Dec  2 05:33:41 2017

Return-Path: <[email protected]>

X-Original-To: root

Delivered-To: [email protected]

Date: Sat, 02 Dec 2017 05:33:41 +0800

To: [email protected]

Subject: a new mail

User-Agent: Heirloom mailx 12.5 7/5/10

Content-Type: text/plain; charset=us-ascii

From: [email protected] (root)

Status: R


this is a new message



& q    //輸入q,退出查看

Held 1 message in /var/spool/mail/root

[root@localhost ~]# 


示例二:重定向郵件正文內容:

[root@localhost ~]# mail -s "a new mail" root < /etc/is        //重定向郵件正文內容

iscsi/     issue      issue.net  

[root@localhost ~]# mail -s "a new mail" root < /etc/issue

You have mail in /var/spool/mail/root

[root@localhost ~]# mail

Heirloom Mail version 12.5 7/5/10.  Type ? for help.

"/var/spool/mail/root": 2 messages 1 new

    1 root                  Sat Dec  2 05:33  20/636   "a new mail"

>N  2 root                  Sat Dec  2 05:38  20/625   "a new mail"


示例三:通過管道生成郵件正文內容

[root@localhost ~]# cat /etc/fstab | mail -s 'another message' root

[root@localhost ~]# mail

Heirloom Mail version 12.5 7/5/10.  Type ? for help.

"/var/spool/mail/root": 3 messages 1 new

    1 root                  Sat Dec  2 05:33  20/636   "a new mail"

    2 root                  Sat Dec  2 05:38  21/636   "a new mail"

>N  3 root                  Sat Dec  2 05:41  29/1147  "another message"


4.5、at命令:單次任務

   命令格式:

    at [options...] TIME   //time是未來某一時間

   TIME表示格式:

    ①、HH:MM[YYYY-mm-dd]

    ②、noon:正午

       midnight:午夜

      teatime:下午四點

      tomorrow:明天

    ③、now+#:#表示單位(unit)

        unit可以是:minutes、hours、days、 weeks

    [options]:

    -l:查看作業隊列,相當於atq,作業運行後會消失

    -f /PATH/FROM/SCRIPT.SH  :從指定的文件中讀取作業,不用交互式輸入作業,文件中可以是命令的堆積。

        [root@localhost ~]# at -f  /root/idsum.sh 06:17  

        job 5 at Sat Dec  2 06:17:00 2017

        [root@localhost ~]# 

    -d # :刪除任務,#表示作業號 相當於atrm

    -c :查看執行任務的作業內容,注意前部分輸出的是環境變量

    -q :指明隊列

  注意:作業執行的結果是以郵件發送給提交作業的用戶,因此,想要查看執行結果,需要查看郵件。


示例:

[root@localhost ~]# at 05:55    //在5點55分執行一次任務

at> echo pwd            //任務內容可以是命令,也可以是腳本   

at> ls   

at> <EOT>             //ctrl+d提交任務並退出

job 1 at Sat Dec  2 05:55:00 2017

[root@localhost ~]# at -l        //查看任務,時間未過期可以看到任務,若過了指定時間則看不到任務

1Sat Dec  2 05:55:00 2017 a root

[root@localhost ~]# at -l        //時間過期,看不到任務

[root@localhost ~]# date

Sat Dec  2 05:57:36 CST 2017

[root@localhost ~]# 

[root@localhost ~]# mail        //查看任務執行結果

Heirloom Mail version 12.5 7/5/10.  Type ? for help.

"/var/spool/mail/root": 4 messages 1 new 2 unread

    1 root                  Sat Dec  2 05:33  20/636   "a new mail"

    2 root                  Sat Dec  2 05:38  21/636   "a new mail"

 U  3 root                  Sat Dec  2 05:41  30/1157  "another message"

>N  4 root                  Sat Dec  2 05:55  37/715   "Output from your job    


4.6、batch命令:

   類似at命令,batch會讓系統自行選擇在系統資源比較空閒的時間去執行執行的任務


4.7、cron命令或crontab命令:週期性任務執行計劃

    他需要服務程序來監視是否有週期性任務計劃需要執行。  

cron的主程序包:cronie;提供crond守護進程及相關輔助工具


要想週期性執行任務,需要確保crond守護進程處於運行狀態,查看crond是否處於運行狀態:

    centos7: [root@localhost ~]# systemctl status crond.service

    centos6: [root@localhost ~]# service crond status


cron作業提交方式:

    向crond提交作業的方式不同於at命令,他需要使用專用的配置文件,此文件有固定的格式,不建議使用文本編輯器對其直接進行編輯,建議使用crontab命令。


cron任務分類:

    ①系統cron任務:主要用於維護系統自身的維護;通過手動編輯:/etc/crontab文件來實現

    ②用戶cron任務:用戶自己定義的;通過命令crontab來實現,用戶cron配置文件:/var/spool/cron/USERNAME下,username爲相應的用戶

系統cron任務格式:

[root@localhost ~]# cat /etc/crontab 

SHELL=/bin/bash                //定義shell

PATH=/sbin:/bin:/usr/sbin:/usr/bin       //定義環境變量,此處的環境變量不同於用戶的登陸後的環境變量,因此建議命令使用絕對路徑,或者自定義PATH變量

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    //user—name表示運行時的身份,command to be executed表示要執行的任務


[root@localhost ~]# 

注意:系統corn任務中每一行定義一個週期性任務,共七個字段,用空格分開;第一個*表示分鐘,第二個*表示小時,第三個*表示月中的哪一天,第四個*表示一年中的哪個月,第五個*表示一週的星期幾,第六user—name表示運行時的身份,第七command to be executed表示要執行的任務。如果時間表示爲*則表示單位裏的任一單位,如分鐘用*表示,則表示每一分鐘。執行結果通過郵件發送給mailto指定的用戶。


用戶cron任務格式:

    用戶cron任務和系統cron任務的區別是:自定義任務時,用戶cron任務不需要指定用戶,系統cron需要指定。如下:

系統cron任務:共七個字段;* * * * * user-name command to be executed

用戶cron任務:共六個字段;* * * * *  command to be executed


用戶cron配置文件中,每一行定義一個cron任務,共六個字段;此處的環境變量不同於用戶登錄後環境,因此建議命令使用絕對路徑,或者自定義PATH環境變量;郵件發送給當前用戶。

cron任務中的時間表示方式:

①、特定值:

    給定的時間點有效取值範圍內的值

    注意:周幾和哪一天一般不同時使用

②、*:通配符

    給定的時間點上有效取值範圍內的所有值,表示“每什麼”意思

如:

    3 * * * * :每小時3分,每小時任務

    3 4 * * 5:每週五4點三分,每週任務

    5 6 7 * *:每月7號6點5分,每月任務

    7 8 9 10 *:每年10月9號8點7分,每年任務

③、指定時間點上離散取值:

    在時間點上使用“逗號”分號的多個值

        #,#,#

如:

    9 8 * * 3,7:每週3和7的8點9分

    0 8,20 * * 3,7: 每週3和7的8點和20點執行的任務

④、連續取值:

    在時間點上,使用“-”連接的開頭和結束

        #-#

如:

    0 9-18 * * 1-5:每週1到5的9點到18點

⑤、在指定時間點上,定義步長,用“/”表示

    */# :#表示步長

如:

    */2 * * * *:表示每2分鐘

    */5 * * * *:表示每5分鐘

 注意:指定的時間點不能步長整除時,其意義不復存在;最小時間單位爲“分鐘”想完成“秒級”任務,得需要額外藉助於其他機制,定義成每分鐘任務,然後再利用腳本實現每分鐘之內,執行循環多次。


cron命令:

  使用格式:

    crontab [-u USER] [-l|-r|-e] [-i] [-s]

    -e:編輯任務,直接打開命令正文,輸入並保存即可

    -l:列出所有任務(自己的)

    -r:移除所有任務;即刪除/var/spool/cron/USERNAME文件,如要刪除某一行任務,則需要使用“-e”打開,去刪除或註釋掉。

    -i:交互式操作(在使用“-r”)移除任務時需要確認

    -u USER:root用戶可指定其他用戶的cron任務,並管理它們。

注意1:運行結果以郵件方式通知給當前用戶;如果拒絕接受郵件,可進行如下操作:①、command >/dev/null或者②、command &>/dev/null。同時,定義“command”時,如果需要用到“%”,需要對其進行轉義,但放置於“單引號”中的“%”不用轉義也可以。


注意2、某任務在指定時間因關機未能執行,下次開機不會自動執行,如果需要實現此功能,在下次開機時無論時間到沒到,都執行一次,則需要使用anacron命令時間  


示例1:

    每12小時備份一次/etc/目錄至指定/backups目錄中,保存文件名格式爲“etc-YYYY-mm-dd-hh.tar.xz"

[root@localhost ~]# mkdir /backups/

[root@localhost ~]# crontab -e

0 */12 * * * /usr/bin/tar -cvJf /backups/etc-$(date +%Y-%m-%d-%H).tar.xz /etc     //如果不成功,則應對“%”進行轉義處理,即"\%"

[root@localhost ~]# 


示例2:

    每週247備份/var/log/secure文件至/logs目錄中,文件名格式爲”secure-yyyymmdd

[root@localhost ~]# crontab -e

0 0 0 0 2,4,7  /usr/bin/cp /var/log/secure /logs/secure-`date +%Y%m%d`


示例3:每兩小時取出當前系統/proc/meminfo文件中以s或m開頭的行信息追加至/tmp/meminfo.txt文件中。

[root@localhost ~]# crontab -e

 0 */2 * * *  /usr/bin/cat /proc/meminfo | /usr/bin/grep "^[SM]"  >> /tmp/meminfo.txt





























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章