第五周作业

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容