(1)每十二小时备份并压缩/etc/目录至/backup/目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz**
创建backup目录:mkdir /backup
crontab -e ,然后再里面添加: * */12 * * * /usr/bin/tar -zcf /backup/etc-$(date +%F- %H-%M).tar.gz /etc
注意:这里的 % 需要加 \ 转义
查看任务:[root@like_student ~]#crontab -l
*/1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &
0 0 * * * /usr/local/qcloud/YunJing/YDCrontab.sh > /dev/null 2>&1 &
* */12 * * * /usr/bin/tar -zcf /backup/etc-$(date +\%F-\%H-\%M).tar.gz /etc
补充:下面是一些对crontab的简介
[root@like_student ~]#cat /etc/corntab
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) (周)
# | | | | |
# * * * * * command to be executed(要执行的命令)
注意:
1: 每行定义一个cron任务,共6个字段:
2:此处的环境变量不同于用户登录后获取的环境,因此建议命令使用绝对路径,或者自定义PATH环境变量
3:邮件发送给当前用户
时间表示法:
特定值:
1:给定时间点有效取值范围内的值
注意:(天)和(周) 一般不同时使用
2:*
给定时间点上有效取值范围内的所有值:表示 “ 每...”
列如:
(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分
3:离散取值
在时间点上使用逗号分隔的多个值:
#,#,#
列如:
(1)9 8 * * 3,7 :每周三和周日,8点9分执行一次
4:连续取值: -
在时间点上使用-连接开头和结束:
#-#
列如:0 8-17 * * 1-5 :每周一至周五的,8点至17点的每小时执行一次。
5:在指定时间点上,定义步长:
*/# : #即步长
列如:*/2 * * * * :每两分钟执行一次
注意:
(1):指定的时间点不能被步长整除时,其意义将不复存在,必须要能被给定的单位除尽
(2):最小时间单位为“分钟”想完成“秒”执行任务,的需要额外借助于其他的机制
定义每分钟任务,可利用脚本实现在每分钟之内,循环执行多次
crontab命令:
-e :编辑任务
-l :列出所有任务
-r :移除所有任务,即删除/var/spool/cron/username文件
-i :在使用-r删除所有任务是提示用户确认
-user :root用户可为指定用户编辑crontab任务
注意:运行结果以邮件通知给用户,如果想拒接收邮件
1:COMMAND > /dev/null :只把正确的命令重定向到/dev/null中,错误信息发送给用户
2: COMMAND &> /dev/null :正确和错误的信息都重定向到/dev/null,一般不建议使用,除非已经确定过任务正确性。
(2)rpm包管理功能总结
centos系统上rpm命令管理程序包:
安装,升级,卸载,查询,校验,数据库维护
rpm命令:rpm [option] [package_file]
-i :安装
-u :升级
-e :卸载
-v :显示执行过程
-h :输出进度条;每个#表示2%的进度
-q :查询
-V :校验
--initdb或--builddb :数据库维护
安装:rpm -ivh package_file
测试安装:rpm -ivh --test package_file
重新安装:rpm -ivh --replacepkgs package_file
忽略依赖关系:rpm -ivh --nodeps package_file
不检查签名信息:rpm -ivh --nosignature package_file
不检查包完整性:rpm -ivh --nodigest package_file
升级:rpm -Uvh package_file
-U :升级或安装
-F :没有老版本时不做安装,只用于升级
--oldpackage:降级
--force:强制升级
注意:(1):不要对内核做升级操作,可能会导致一些程序不兼容,linux支持多内核并存,因此可以直接安装新版本的内核。
(2):如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文化不会覆盖原有版本的配置文件。
而是把新版本的的配置文件重命名后保留为(FILE_NAME.rpmnew)
卸载: rpm -e package_name
--allmatches :卸载所有匹配指定名称的程序包的各版本
--nodeps :忽略依赖关系
--test:测试卸载
查询:rpm -q package_name
-a:查询所有已经安装过的包
-f FILE:查询指定的文件由那个程序包安装生成
用法:rpm -qf /etc/passwd
--whatprovides package_name :查询指定的package_name是有那个程序包提供
--whatrequlres package_name :查询指定package_name被那个包所依赖
用法:rpm -q --whatprovides httpd
-p package_FILE:用于实现对未安装的包执行查询操作
用法:rpm -qpi package_FILE
-l:程序安装生成的所有文件列表
-i:程序包相关的信息,版本号,大小,所属的包组等
-c:查看指定程序包提供的配置文件
-d:查看指定的程序包提供的帮助文档
-R: 查询指定的程序包依赖关系
--changelog:查询rpm包的修改日志
--scripts:查看程序包自带的脚本片段
校验:
rpm {-V|--verify} [select-options] [verify-options]
用法:[root@like_student ~]$rpm -V httpd
S.5....T. c /etc/httpd/conf/httpd.conf
S :文件大小发生改变
M :权限发生改变
5 :MD5码,文件内容改变
D :主、次设备号
L :路径不匹配
U :属主改变
G :属组改变
T :最近一次修改时间戳
P :开发内容
获取并导入信任的包制作者的GPG秘钥:
导入:对于centos7发行版:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验证:
(1)安装次组织签名的程序时,会自动执行验证
(2)手动验证:rpm -K package_FILE
数据库重建:
rpm管理器数据库路径:/var/lib/rpm/
查询操作:通过此处的数据库进行
获取帮助:
centos6:man rpm
centos7:man rpmdb
rpm:
--initdb :初始化数据库,当前无任何数据库可实现化创建一个新的,当前有时不执行任何操作
--rebullddb :重新构建,通过读取当前系统上所有已经安装过的程序包进行重新构建
用法:rpm --initdb --dbpath=/tmp/rpm
(3)yum的配置和使用总结以及yum私有仓库的创建
http://mirrors.aliyun.com/repo/Centos-7.repo :阿里云yum源
yum客户端:
配置文件:
/etc/yum.conf :为所有仓库提供公共配置
/etc/yum.repos.d/*.repo :为仓库的指向提供配置
仓库的定义:
[repolocal]
name=some name for this repostiory (仓库的完整描述)
baseurl=url://path/to/repostiooy (可以指定多个url)
enabled={1|0} (是否启用此仓库)
gpgcheck={1|0} (对此仓库的包安装前是否坚持其完整性)
gpgkey=URL (指定秘钥文件地址)
enablegroups={1|0} (是否支持此仓库使用组管理)
failovermethod= { roundrobin(随机)默认 | priority(优先级) }
cost=1000(开销数字):默认1000
显示仓库列表:
yum repolist :默认,显示启用
yum repolist all :显示所有
yum repolist disabled :显示禁用
显示程序包:
yum list : 显示所有程序包
yum list http* :显示指定程序包
安装程序包:
yum install [package1] [package2] ... :安装
yum reinstall [package1] [package2] ... :重新安装
升级程序包:
yum update [package1] [package2] ... :升级
yum downgrade [package1] [package2] ... :降级
检查可用升级:
yum check-update
卸载程序包:
yum remove [package1] [package2] ... :会把依赖同时卸载
查看程序包information:
yum info package
查看指定的特性(可以是文件)是有那个程序包所提供:
yum provides package
清理本地缓存:
yum clean [ package | metadata |expire-cache |rpmdb |plugins |all ]
生成缓存:
yum makecache
搜索:
yum search string(指定的关键字) :以指定的关键字搜索程序包名及概要信息
查看指定包依赖:
yum deplist [package1] [package2] ...
查看yum事务历史:
yum history
包组管理的相关命令:
yum groupinstall group1 group2 ... :安装指定包组
yum groupupdate group1 group2 ...:升级指定包组
yum grouplist :显示包组
yum groupremove group1 group2 ... :移除指定包组
yum groupinfo group1 group2 ... :查找包组相关信息
创建本地光盘yum源:
先把光盘挂载到/media/cdrom
在/etc/yum.repo.d/目录下创建一个,local.repod的文件添加以下内容:
[bash]
name=centos7 release test1.0.2(仓库名字)
baseurl=file:///media/cdrom (地址)
enable=1 (开启此仓库)
gpgcheck=0 (不检查来源性完整性)
查看可用仓库:yum repolist
yum的命令行选项:
--nogpgcheck :禁止gpgcheck ,检查包来源完整性
-y:自动安装
-q:静默模式
--disablerepo=repoidglob :临时禁用此处指定的repo
--enablerepo=repoidglob :临时启用此处指定repo
--noplugins :禁用所有插件
yum的repo配置文件可用的变量
$releasever :当前OS的发行版的主板本号
$arch :平台
$basearch : 基础平台
$YUM0-YUM9 :可以自定的变量
格式:hhtp://mirrors.test.com/centos/$releasever/$basearch
创建yum仓库:
(1)安装:createrepo
yum install createrepo
(2)创建一个目录放rpm包
mkdir /etc/repo
(3)把rpm下载在到本地/etc/repo目录
(4)创建yum仓库:createrepo /etc/repo
(5)创建/etc/yum.repo/local.repo 配置文件 ,添加以下内容
[local]
name=centos7 release repo.1.1
baseurl=file:///etc/repo
enabled=1
gpgcheck=0
(6)生成缓存:yum makecache
(7)查看:yum repolist
(4)sed命令用法总结实列演示
文本处理三剑客:
grep,egrep,fgrep:文本过滤器
sed:行编辑器,
awk:文本格式化工具,报告生成器
常用选项:
-n :不输出模式空间的内容至屏幕
-e :多重编辑,且命令顺序会影响结果
-f /path/to/sed_script_file :指定一个 sed 脚本文件到命令行执行
-r :支持使用扩展正则表达式
-i :直接编辑原文件
地址定界:
(1)空地址:对全文进行处理
(2)单地址:
# :指定行
/pattern/ :被模式所匹配到的每一行
(3)地址范围:
#,# :比如 1,100 :从第1行到第100行
#,+# :比如 10,+10 :从第10行开始加10行。
#,/pat1/ :比如 10,/pattern/ :从第10行开始到,第一次被模式匹配到的所有行。。
(4)步进:~
1~2:所有奇数行
2~2:所有偶数行
编辑命令:
d:删除指定行
sed '1,5d' /etc/passwd :删除第1行至第5行
sed '/^#/d' /etc/fstab :删除#开头的所有行
p:显示模式空间的内容,通常和-n 一起使用
sed '1,5p' /etc/fstab :1至5行显示两次
sed -n '1,5p' /etc/fstab :只显示被模式匹配的行
a\:在被模式匹配到的行后面追加文本,支持使用\n实现多行追加
sed '3 a\new line' /etc/fstab :在/etc/fstab文件的第三行后面追加“new line”
sed '3 a\new line\two nwe line' /etc/fstab :在/etc/fstab文件的第三行后面追加“new line”,然后在追加一行
sed '/^UUID/ a\add new line ' /etc/fstab :所有UUID开头的行,下面一行加上“add new line”
i\:在被模式匹配到的行前面插入文本,支持使用\n实现多行插入
sed '3 i\new line' /etc/fstab
sed '/^UUID/ i\add new device base on UUID' /etc/fstab
c\:把匹配的行替换为此处指定的文本
sed '/^#/ c\test' /etc/fstab
w /path/to/somefile:保存模式空间匹配到行到指定的文件中
sed '/^[^#]/w /tmp/fstab' /etc/fstab :把不是#开头的行保存到/tmp/fstab
r /path/from/somefile:读取指定文件内容至当前文件被模式匹配到的行后面:文件合并
sed '/^[^#]/r /etc/issue' /etc/fstab
sed '3r /etc/issue' /etc/fstab
= :为模式匹配到行加行号
sed '/^[^#]/= ' /etc/fstab :所有被模式匹配到行上面加上行号
!:条件取反
sed '/^#/!d' /etc/fstab :删除除#开头的所有行
s///:查找替换,其分隔符可自行指定,常用的s@@@,s###等
替换标记:
g:全局替换:默认只替换每一行中第一次出现
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中
p:显示替换成功的行
sed 's@^#@@' /etc/fstab:把所有开头的#号都替换为空白
练习:
(1)删除/etc/grub2.cfg文件中所有已空白字符开头的行的行首的所有空白字符
sed 's@^[[:space:]]\+@@' /etc/grub2.cfg
(2)删除/etc/fstab文件中所有以#开头的行的行首#号及后面的所有空白字符
sed 's@^#[[:space:]]*@@' /etc/fstab
(3)输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname
echo "/var/log/messages" |sed 's@[^/]\+/\?$@@'
echo "/var/log/messages" |sed -r 's@[^/]+/?$@@'
高级编辑命令:
h:把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g: 把保持空间中的内容覆盖至模式空间中
G:把保持空间中的内容追加至模式空间中
x:把模式空间中的内容与保持空间中的内容互换
n:覆盖读取匹配到的行的下一行至模式空间中
N:追加读取匹配到的行的下一行至模式空间中
d:删除模式空间中的行
D: 删除多行模式空间中的所有行
(烧脑系列)
sed -n 'n;p' FILE :只显示偶数行
sed 'n;d' FILE :只显示奇数行
sed '1!G;h;$!d' FILE :逆序显示
sed '$!d' FILE :取出最后一行
sed '$!N;$!D' FILE :取出最后两行
sed '/^$/d;G' FILE :删除原有的空白行,而后为所有的非空白行后添加一个空白行
sed 'G' FILE :在原有的每行后面添加一个空白行
(5)写一个脚本实现列出一下菜单给用户,提示用户给出自己的选择,而后显示对应其选项的相应系统信息
(1)disk:show disk info
(2)men:show memory info
(3)cpu:show cpu info
(4)quit
**实列** :
#!/bin/bash
#test,cpu,disk,memory
#
cat << EOF
disk:show disk info
mem:show memory info
cpu:show cpu info
quit...
EOF
read -p "Please enter a parameter:" var1
if [[ "$var1" == "disk" ]];then
fdisk -l /dev/[a-z]d[a-z]
elif [[ "$var1" == "cpu" ]];then
lscpu
elif [[ "$var1" == "mem" ]];then
free -m
else
echo "unknown option"
exit 1
fi
测试脚本功能是否正常:
(6)用bash实现统计访问日志文件中状态码大于等于400的ip数量并排序
sed -nr '/\<40[0-9]\>/p' /usr/local/apache/logs/access_log|cut -d" " -f1 |uniq -c |sort -n
(7)使用自制的yum源安装httpd,ftp,poenssh,wget,tcpdump等软件包
(1)第一步检测有没有createrepo命令:
(2)先挂载光盘,然后在创建一个目录放置rpm包:
挂载:mount -r /dev/cdrom /media/cdrom :如果要开机自动挂载需要写在/etc/fstab
创建目录:mkdir /etc/yum/repo
(3)创建仓库:
(4)/etc/yum.repos.d/目录下面,创建一个local.repo的文件
vim /etc/yum.repos.d/local.repo
(5)查看仓库:
(6)先把网络源的仓库禁用
(7)测试安装软件: