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 root@localhost.localdomain  Sat Dec  2 05:33:41 2017

Return-Path: <root@localhost.localdomain>

X-Original-To: root

Delivered-To: root@localhost.localdomain

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

To: root@localhost.localdomain

Subject: a new mail

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

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

From: root@localhost.localdomain (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