压缩工具和计划任务
压缩和解压缩工具
压缩等于: 时间 换 空间
CPU的时间 >>> 磁盘空间
压缩工具
compress 后缀 .Z
gzip 后缀 .gz
bzip2 后缀 .bz2
xz 后缀 .xz
归档工具
tar 后缀 .tar
归档加压缩
zip 后缀 .zip
第一组工具 gzip / gunzip / zcat
压缩
gzip [OPTION]... FILE...
常用选项
-d :解压缩 相当于gunzip
-* :指定压缩比 默认是6 数字越大压缩比越大;除非特殊要求一般不变
-c :将压缩结果输出至标准输出
gzip -c FILE > NEWfile.gz
解压和查看压缩包 命令后面直接跟文件没什么重要选项
gunzip file.gz
zcat file.gz
第二组工具 bzip2 / bunzip2 / bzcat
压缩
bzip2 [OPTION]... FILE...
常用选项
-d :解压缩 相当于bunzip2
-* :指定压缩比 默认是6 数字越大压缩比越大;除非特殊要求一般不变
-k : keep , 保留原文件
bzip2 -k file (不用输出重定向他会自动保留源文件)
查看
bzcat file.bz2
第三组工具 xz / unxz / xzcat
压缩
xz [OPTION]... FILE...
常用选项
-d :解压缩 相当于unxz
-* :指定压缩比 默认是6 数字越大压缩比越大;除非特殊要求一般不变
-k : keep , 保留原文件
以上三种压缩工具无法对目录进行打包 需要使用归档工具打包后才能压缩
归档工具
tar [OPTION]... FILE | DIR ...
常用选项
-c 创建归档
tar cf NEWfile.tar FILE...
-x 展开归档
tar xf file.tar -C DIR
-t 查看归档文件中的文件列表
tar tf file.tar
-z 归档并调用gzip工具将文件压缩
tar zcf NEWfile.tar.gz FILE...
-j 归档并调用bzip2工具将文件压缩
tar jcf NEWfile.tar.bz2 FILE...
-J 归档并调用xz工具将文件压缩
tar Jcf NEWfile.tar.bz2 FILE...
-v 显示详细信息
解压缩并展开归档
tar可以自动识别压缩文件的格式不必指定调用的工具
不加-C 指定目录会解压到当前工作目录
tar xf NEWfile.tar.gz -C DIR
zip工具可以归档并压缩
压缩
zip NEWfile.zip FILE
解压
unzip file.zip
linux计划任务、周期性执行任务
未来某时间执行一次任务 at
周期性允许任务 croutab
邮件
默认周期任务执行结果会通过邮件发送给用户 默认在/var/spool/mail/USERNAME 下
mailx命令可以收发互联网邮件
mailx [-s 邮件的标题] username[@域名或主机名]
如果是给本主机用户发送邮件的话@域名或主机名可省
邮件正文的生成
1 交互式输入,编写完正文后单独一行 . 退出
2 通过输入重定向
3 通过管道
查看邮件
mail 即可
q 退出
默认邮件端口为25
OK现在回头说计划任务
单次执行计划任务 at
at命令
首先确保atd服务 正常允许 不然定义了也不会生效
如果没有开启 他会返回你一段话
Can't open /var/run/atd.pid to signal atd. No atd running? 看到后开启服务即可
at [OPTION]... TIME
TIME
HH:MM [YYYY-mm-dd]
now+*min 几分钟后
常用选项
-l 查看计划任务
-f 从文件中读取作业任务,而不用交互式提交
-d * 删除第几条计划任务
-c * 查看作业的具体内容
-q 指明队列
at命令有队列 用单个字母表示 默认都使用a队列
注意 作业执行结果都是以邮件发送给提交作业的用户
周期性执行任务 cron
服务程序
cronle:主程序包 主要提供了crond守护进程及相关辅助工具
首先确保crond守护进程处于运行状态
向crond提交作业不同at命令,他需要使用专用的配置文件,此文件有固定格式不建议使用编辑器直接编辑,应使用crontab命令编写
cron任务分为两类
系统cron任务:主要用于实现系统自身维护
系统cron任务 只能通过手动编辑 /etc/crontab 来实现
用户cron任务:用户定义的cron任务
一般使用crontab命令来编写
编写格式
系统cron任务格式 /etc/crontab 共7个字段: 分 时 日 月 周 用户 任务
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 每一行定义一个周期性任务
* * * * * :定义周期性时间
user-name :运行任务的用户角色
command to be executed : 任务
2 此处的环境变量不同于用户交互式登录环境变量,因此建议使用绝对路径或者自定义PATH环境变量
3 执行结果通过邮件发送给指定的用户
用户cron任务 /var/spool/cron/USERNAME 共六个字段 分 时 日 月 周 任务
注意条件和系统用户一样 只有第三点不同 执行结果会发送邮件到当前用户
时间表示法:
1 使用特定值 分钟(0 - 59)小时(0 - 23) 日期(1 - 31) 月份(1 - 12) 周(0 - 6 或 1 - 7 因为周日表示0或7)
一般来说 日期 和 周 不同时使用
2 * 表示给定时间点上有效取值范围内的所有值
3 离散取值 , 在时间点上使用逗号分隔多个值
4 连续取值 - 在时间点上使用-连接开头和结束
5 在指定时间点上,定义步长 */2 = 每两分钟
注意:
1 指定的时间点的特定值不能被步长整除时 其意义不复存在
2 当编写任务时用到 % 需要转义或单引号
3 最小时间单位为分钟 ,想完成秒级任务 需要使用其他机制
比如定义为每分钟执行任务,而利用脚本实现分钟之内,循环多次
crontab 命令
crontab -e 编写任务
crontab -l 列出任务列表
crontab -r 移除所有任务,想要单个删除时使用-e 编辑
crontab -u user [ e l r ] 使用别人的身份运行cron
当可以确保任务可以执行成功时 使用输出重定向到/dev/null 不建议使用 &>/dev/null
练习
1 每12小时备份一次/etc目录至/backups目录中,保存文件名为 "etc-yyyy-mm-dd-hh.tar.xz"
0 */12 * * * /usr/bin/tar JcfP /backups/etc-`/usr/bin/date +\%Y-\%m-\%d-\%H-\%M`.tar.xz /etc/ >/dev/null
2 每周2、4、7 备份/var/log/secure文件至/log目录中,文件名为 "secure-yyyymmdd"
0 0 * * 2,4,7 /usr/bin/cp /var/log/secure /log/secure-`/usr/bin/date +\%Y\%m\%d\%H\%M` >/dev/null
3 每两小时取出当前系统/proc/meminfo 文件中以S或M开头的行信息追加至/tmp/meminfo.txt文件中
0 */2 * * * /usr/bin/grep -Ei "^(s|m)" /proc/meminfo > /tmp/meminfo.txt