1、压缩比:
压缩前和压缩后的大小体积比例
2、压缩目的:
时间换空间,用cpu的时间换磁盘的空间;如何选择压缩,要衡量是节省cpu时间还是节省硬盘空间。
3、linux压缩、解压缩工具,及归档工具:
序号 | 压缩工具 | 解压缩工具 | 不解压查看内容 | 后缀 | 备注 |
1 | compress | uncompress | .z | ||
2 | gzip |
gunzip | zcat | .gz | 只能压缩文件 |
3 | bzip2 | bunzip2 | .bz2 | 只能压缩文件 | |
4 | xz |
unxz | .xz | 只能压缩文件 | |
5 | lzma | unlzma | lzcat | .lzma | |
6 | zip |
unzip | zcat | .zip | 压缩比比较小 |
归档工具 | |||||
1 | tar |
||||
2 | cpio |
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: X-Original-To: root Delivered-To: [email protected] Date: Sat, 02 Dec 2017 05:33:41 +0800 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>
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