1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz"
~]# mkdir /backup
~]# vim /root/backup.sh
tar zcf /backup/etc-`date +%F-%H-%M`.tar.gz /etc/*
~]# crontab -e
0 /12 * * * /usr/bin/bash /root/backup.sh
2、rpm包管理功能总结以及实例应用演示。
程序包管理器rpm --- >> redhat:redhat package manager 现更名为递归缩写:rpm is package manager
rpm把目标二进制格式(二进制程序、库文件、配置文件、帮助文件)组织成为一个或有限几个“包”文件来,从而更方便地实现程序包安装、升级、卸载、查询、校验。
每一个程序包都有程序包的组成清单,包括文件清单和安装卸载时所要执行的脚本。并且对这些信息记录放置在公共数据库中,数据库信息还包括程序包的名称和版本、依赖关系、功能说明、安装生成的各文件的文件路径及校验码信息等。数据库目录位于/var/lib/rpm/文件夹下。
CentOS系统和RedHat系统上rpm命令管理程序包的方式有以下这些内容
安装、升级、卸载、查询和校验、数据库维护
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安装:-i, --install
升级:-U, --update,有则升级,没有就安装 -F, --freshen 只升级
卸载:-e, --erase
查询:-q, --query
校验:-V, --verify
数据库维护:--builddb, --initdb 初始化
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh PACKAGE_FILE ...
[root@7df49b28e751 ~]# rpm -ivh --nodeps perl-Tk-804.030-6.el7.x86_64.rpm Preparing... ################################# [100%]Updating / installing... 1:perl-Tk-804.030-6.el7 ################################# [100%]
常规选项: -v:verbose,详细信息 -vv:更详细的输出
[install-options]:
-h:hash marks输出进度条;每个#表示2%的进度;
--test:测试安装,检查并报告依赖关系及冲突消息等,并不直接安装;
--nodeps:忽略依赖关系,不建议,能装但一定能使用。
--replacepkgs:重新安装
rpm可以自带脚本:共四类:--noscripts 不执行脚本
preinstall:安装过程开始之前运行的脚本,%pre , --nopre
postinstall:安装过程完成之后运行的脚本,%post , --nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun, --nopreun
postuninstall:卸载过程完成之后运行的脚本,%postun , --nopostun
--nosignature:不检查包签名信息,不检查来源合法性
--nodigest:不检查包完整性信息
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
[root@7df49b28e751 ~]# rpm -Uvh perl-Tk-804.030-6.el7.x86_64.rpm
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U:升级或安装
-F:升级
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级
--force:强制升级
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
[root@7df49b28e751 ~]# rpm -e perl-Tk
--allmatches:卸载所有匹配指定名称的程序包的各版本;
--nodeps:忽略依赖关系
--test:测试卸载,dry run干跑模式
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本
-a, --all:查询所有已经安装过的包
-f FILE:查询指定的文件由哪个程序包安装生成
-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作,需结合[query-options]使用。
[root@7df49b28e751 ~]# rpm -pqi perl-Tk-804.030-6.el7.x86_64.rpm
使用方法组合 -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, 等
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
[query-options]
--changelog:查询rpm包的changlog;
-l, --list:程序安装生成的所有文件列表;
-i, --info:程序包相关的信息,版本号、大小、所属的包组,等;
-c, --configfiles:查询指定的程序包提供的配置文件;
-d, --docfiles:查询指定的程序包提供的文档;
--provides:列出指定的程序包提供的所有的CAPABILITY;
-R, --requires:查询指定的程序包的依赖关系;
--scripts:查看程序包自带的脚本片断;
使用方法组合:-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
校验:
rpm {-V|--verify} [select-options] [verify-options]
~]# rpm -qf /etc/fstab
setup-2.8.71-9.el7.noarch
~]# rpm -V setup-2.8.71-9.el7.noarch
S.5....T. c /etc/bashrc
S.5....T. c /etc/profile
S.5....T. c /etc/securetty
c:只有文件是一个配置文件时才会有此标志,可以用这种方法快速定位rpm包的配置文件安装位置。
S:表示对应文件的大小(Size)不一致;
M:表示对于文件的mode不一致;
5:表示对应文件的MD5不一致;
D:表示文件的major和minor号不一致;
L:表示文件的符号连接内容不一致;
U:表示文件的owner不一致;
G:表示文件的group不一致;
T:表示文件的修改时间不一致;
P capabilities differ : 提供能力不一致
包来源合法性验正和完整性验正:
来源合法性验正:
完整性验正:
获取并导入信任的包制作者的密钥:
对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验正:
(1) 安装此组织签名的程序时,会自动执行验正;
(2) 手动验正:rpm -K PACKAGE_FILE
数据库重建:
获取帮助:CentOS 6:man rpm CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY]
[--dbpath DIRECTORY] :指明建立位置
--initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作;
--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;
3、yum的配置和使用总结以及yum私有仓库的创建。
yum客户端配置文件:/etc/yum.conf:为所有仓库提供公共配置/etc/yum.repos.d/*.repo:为仓库的指向提供配置
仓库指向的定义:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority} 默认为:roundrobin,意为随机挑选;
cost= 开销默认为1000
yum命令的用法: yum [options] [command] [package ...]
yum的命令行选项:[options]
--nogpgcheck:禁止进行gpg check;
-y: 自动回答为“yes”;
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;
显示仓库列表:
repolist [all|enabled|disabled]
显示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] [...]
# yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
install package1 [package2] [...]
reinstall package1 [package2] [...] (重新安装)
升级程序包:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降级)
检查可用升级:
check-update
卸载程序包:
remove | erase package1 [package2] [...]
查看程序包information:
info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
构建缓存:
makecache
搜索:
search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息;
查看指定包所依赖的capabilities:
deplist package1 [package2] [...]
查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
包组管理的相关命令:
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
4、写一个脚本实现列出以下菜单给用户:
(1)disk:show disk info信息
(2)mem: show memory info信息
(3)cpu: show cpu info信息
(*)quit
5、sed用法总结并结合实例演示
sed:Stream EDitor 流编辑器逐行对文件进行编辑,基本功能通过模式空间,高级功能需要配合保存空间完成。
sed [OPTION]... 'script' [input-file] ...
script:地址定界编辑命令
常用选项:
-n:不输出模式空间中的内容至屏幕;
-e script, --expression=script:多点编辑;
-f /PATH/TO/SED_SCRIPT_FILE 把多点编辑指令写在一个指定文件中
-r, --regexp-extended:支持使用扩展正则表达式;
-i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件不可撤销 ;
多点编辑把井号开头后面任意多个空格删除并删除以UUID开头的行
~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab
地址定界:
(1) 空地址:对全文进行处理;
(2) 单地址 #:指定行;
/pattern/:被此模式所匹配到的每一行;
(3) 地址范围
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/ 从匹配模式1到匹配模式2之间
$:最后一行;
(4) 步进:~
1~2:所有奇数行
2~2:所有偶数行
编辑命令:
d:删除;
p:显示模式空间中的内容;
a \text:在行后面追加文本“text”,支持使用\n实现多行追加;
i \text:在行前面插入文本“text”,支持使用\n实现多行插入;
c \text:把匹配到的行替换为此处指定的文本“text”;
w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;
r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;
=:为模式匹配到的行打印行号;
!:条件取反;
地址定界!编辑命令;
s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;
替换标记:
g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;
练习1:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;
~]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg
练习2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
~]# sed 's@^#[[:space:]]*@@' /etc/fstab
练习3:输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname;
~]# echo "/var/log/messages" | sed -r 's@[^/]+/?$@@'
6、 用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序
~]# grep -o '[4|5][0-9][0-9]' /var/log/nginx/access.log |sort | uniq -c
7、 使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包
在根目录下新建目录/repo/packages。
从光盘中复制相应的rpm包到acakges目录。
执行命令createrepo -u /repo/rackages /repo
编辑文件/etc/yum.repos.d/myrepo.repo
[repo]
name=newrepo
baseurl=file:///repo
enabled=1
gpgcheck=0