Q1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz"
在crontab -e中:* */12 * * * tar czf /back/etc-`date +"%F-%H-%M"`.tar.gz /etc
Q2、rpm包管理功能总结以及实例应用演示
RPM,原名Red-hat Package Manager,成为行业标准后改名为RPM Package Manager。
RPM包的命名格式为:{package}-{version}-{release}.{arch}.rpm。
比较大的包可以分成主包和多个子包,主包包含主要功能,子包包含扩展功能。主包命名格式:{masterpackage}-{version}-{release}.{arch}.rpm,子包命名格式:{masterpackage}-{subpackage}-{version}-{release}.{arch}.rpm。
CentOS系统上rpm命令管理程序包:
安装、升级、卸载、查询和校验、数据库维护
rpm命令:rpm【OPTIONS】【Package FIle】
安装:-i,--install
升级:-U,--update,-F,--freshen
卸载:-e,--erase
查询:-q,--query
校验:-V,--verify
数据库维护:--builddb,--initdb
1、rmp安装:
rpm{-i|--install}[install-options]PACKAGE_FILE….
安装rpm命令:rpm -ivh Package_FILE
General Options:
-v:verbose 详细信息
-vv:更详细的信息
[install-options]:
-h:hash marks输出进度条,每个#表示2%的进度
--test:测试安装,检查并报告依赖关系和冲突消息等
--nodeps:忽略依赖关系,不建议
--replacepkgs:重新安装
备注:rpm可以自带脚本,
四类:
preinstall:安装过程开始之前运行的脚本,%pre
Postinstall:安装过程完成之后运行的脚本,%post
preuninstall:卸载过程真正开始执行之前运行的脚本,%prun
postuninstall:卸载过程完成之后运行的脚本
--nosignature:不检查包签名信息,不检查来源合法性
--nodigest:不检查包完整性信息
2、rpm 升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U:升级或安装
-F:升级
rpm -Uvh Package_FILE……
rpm -Fvh Package_FILE……
--oldpackage:降级
--force:强制升级;
注意:
(1)不要对内核做升级操作,linux支持多内核版本并存,因此,直接安装新版本内核
(2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(filename.rpmnew)后提供;
3、rpm 卸载:
rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
--allmatches:卸载所有匹配指定名称的程序包的各版本
--nodeps:忽略依赖关系
--test:测试卸载,dry run 模式
4、rpm 查询:
rpm {-q|--query} [select-options] [query-options]
【select-options】
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本
-a,-all;查询所有已经安装过的包;
-f FILE:查询指定的文件由那个程序包安装生成;
-p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供
--whatrequires CAPABILITY:查询指定的CAPABILTY被哪个包所依赖
【query-options】
--changelog:查询rpm包的changlog;
-l,--list:程序安装生成的所有文件列表;
-i,--info:程序包相关的信息,版本号,大小,所属的包组
-c,--configuretion:查询指定的程序提供的配置文件
-d,--docfiles:查询指定的程序包提供的文档
-provides:列出指定的程序包提供的所有的CAPABILITY
-R,--requires:查询指定的程序包的依赖关系
--scipts:查看程序包自带的脚本片段
用法:
-qi PACKAGE,-qf FILE,-qc PACKAGE,
-ql PACKAGE,-qd PACKAGE
5、rpm校验:
rpm {-V|--verify} [select-options] [verify-options]
6、验证包来源合法性和完整性:
来源合法性:
数字签名
完整性验证
获取并导入信任的包制作者的密钥;
对于centos发行版来说,rpm-import /etc/pki/rpm-gpg/PM-GPG-KEY-CentOS-7
验证:
(1)安装此组织签名的程序时,会自动执行验证
(2)手动验证:rpm -K PACKAGE_FILE
7、数据库重建:
Rpm 管理器数据库路径:/var/lib/rpm
查询操作:通过此处的数据库进行;
Rpm {--initdb|--rebuilddb}
Initdb:初始化
如果事先不存在数据库,则新建之,否则,不执行任何操作
rebuilddb:重建
无论当前存在与否,直接重新创建数据库
Q3、yum的配置和使用总结以及yum私有仓库的创建。
yum用法:yum [options] [command] [package ...]
yum子命令:
install:安装指定的(多个)包或包组。
update:更新。如果不指定任何包,会升级所有已经安装的包。
update-to:类似update命令,但是升级到指定的版本。
update-minimal:类似update命令,但只升级到比当前版本高的最低版本。
check-update:检查是否有更新。命令状态码返回100表明有更新,0没有更新,1表示出错。
upgrade:同update --obsoletes,会删除被淘汰的包。
upgrade-to:类似upgrade,但只升级到指定版本。
remove/erase:卸载指定包及依赖此包的其他包。有一些配置可以想必卸载的行为。
remove_leaf_only:只卸载不被依赖的包。
clean_requirements_on_remove:卸载的同时,卸载只依赖此包的其他包。
autoremove:清除非显式安装的,不再被其他包依赖的包。
list OPTIONS:列出指定类型的包。
all:所有,默认。
available:仓库中有,可以安装。
updates:可以升级。
installed:已经安装。
extras:已安装,但仓库中没有。
obsoletes:已经安装且被淘汰的。
recent:最近添加到仓库中的。
provides/whatprovides:查询指定的文件或特性是由哪个包生成的。
search:根据包名和描述查找相关的包。
info:查看指定包的描述信息,可用的opion同list命令。
clean:清除yum缓存目录下的文件。
expire-cache:过期的元数据和镜像列表。
packages:rpm包。
headers:头文件。
metadata:元数据文件。
dbcache:本地元数据库。
rpmdb:rpm缓存。
plugins:扩展插件缓存。
all:以上所有。
makecache:构建元数据的缓存。
localinstall:安装指定的本地rpm文件包,自动解决依赖问题。
localupdate:用指定的rpm文件包升级,自动解决依赖问题。
reinstall:重新安装。
downgrade:降级。
swap foo bar:卸载foo,安装bar。
deplist:显示包的依赖,和提供这些依赖的包。
repolist:列出仓库信息。
enabled:列出启用的仓库,默认。
disabled:列出禁用的仓库。
all:列出所有仓库。
history:列出历史事务。
groupinstall:安装指定组。
groupupdate:更新指定组。
grouplist:查看所有组。
groupremove:卸载组。
groupninfo:查看组信息。
yum选项:
-y:对所有互动回答为yes。
-c:指定yum配置文件位置。
-q:静默模式。
-v:显示调试信息。
--disablerepo:临时禁用repo。
--enablerepo:临时启用repo。
--nogpgcheck:不检查来源合法性。
创建yum仓库:createrepo [options] DIRECTORY
-u URL:指定baseurl,访问仓库的url。
--basedir:指向rpm文件目录的路径,默认是当前目录
-x:排除的文件,可用glob指定。
仓库元数据:在仓库的repodate目录中
primary.xml.gz:指明了仓库中所有rpm包,依赖关系,每个包安装后会生成的文件。
filelists.xml.gz:当前仓库中所有rpm包的所有文件列表。
other.xml.gz:额外信息,比如修改日志。
repomd.xml:上述三个文件的时间戳和检验和。
comps*.xml:分组信息。
yum相关配置
配置文件:/etc/yum.conf,为所有仓库提供公共配置。
特性配置文件:/etc/yum.repos.d/*.repo,为指定的仓库提供配置。
配置文件中的变量:
$releaseserver:当前发行版的主版本号
$arch:CPU平台体系
$basearch:基础CPU平台体系。
$YUM0-$YUM9:自定义变量。
配置文件格式:
[repoid] # 仓库的唯一标识
name=NAME # 仓库的名称
baseurl=URL # 访问仓库的路径,可用ftp://、http://、file:/// 协议指定,可指定多个,一行一个
mirrorlist=URL # 指向一个包含多个baseurl的文件的url
enabled=[1|0] # 启用/禁用仓库
gpgcheck=[1|0] # 是/否验证文件来源的合法性。
gpgkey=URL # 指向gpg key文件的url
enabledgroups=[1|0] # 是否支持组
failovermethod=[roundrobin|priority] # 访问baseurl失败时,查找下一个baseurl的策略,roundrobin:随机选择,priority:顺序选择下一个。
keepalive=[1|0] # 使用HTTP/1.1时,是否支持keepalive
cost=num # 仓库开销,用来衡量仓库的性能,默认1000,越小说明性能越好。
Q4、写一个脚本实现列出以下菜单给用户:
(1)disk:show disk info信息
(2)mem: show memory info信息
(3)cpu: show cpu info信息
(*)quit
#!/bin/bash
#
cat << EOF
disk) show disks info
mem) show memory info
cpu) show cpu info
*) QUIT
EOF
read -p "your choice:" option
if [ "$option" == 'disk' ];then
fdisk -l /dev/[sh]d[a-z]
elif [ "$option" == 'mem' ];then
free -m
elif [ "$option" == 'cpu' ];then
lscpu
else
echo "Unkown option"
exit 3
fi
Q5、sed用法总结并结合实例演示
sed [OPTION]... {script-only-if-no-other-script} [input-file]…
script:
地址定界编辑命令;
常用选项:
-n:不输出模式空间中的内容至屏幕
-e script, --expression=script:多点编辑
-f /path/to/sed_script_file
每行一个编辑命令:
-r, --regexp-extended:支持使用扩展正则表达式;
-i:SUFFIX], --in-place[=SUFFIX]: 直接编辑源文件
地址定界:
(1)空地址:表示对全文进行处理;
(2)单地址:
#:指定行;
/pattern/:被此模式所匹配到的每一行;
(3)地址范围:
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/
$:表示最后一行;
(4)步进:~
1~2::所有奇数行
2~2:所有偶数行
编辑命令:
d:删除
]# sed -n '1,5d' fstab
-n 不输出
显示偶数行:
]# sed '1~2d' fstab
-p:显示模式空间中的内容
]# sed -n '1~2p' fstab
显示奇数行
a \test:在行后面追加文本“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:显示替换成功的行;
Q6、用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序
sed -n -r '/\<40[0-9]\>/p' /var/log/httpd/access_log|cut -d" " -f1 |sort|uniq -c
Q7、使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包
1、root目录下,新建目录myrepo/Packages。
2、 从光盘中复制相应的rpm包到Pacakges目录。
3、 执行命令createrepo -u /root/myrepo/Packages /root/myrepo
4、 编辑文件/etc/yum.repos.d/myrepo.repo,添加如下内容:
[myrepo]
name=my custom repo
baseurl=file:///root/myrepo
enabled=1
gpgcheck=0
5、yum install XXX