rpm及yum的应用以及制定任务计划和sed的应用

简述rpm与yum命令的常见选项,并举例:

CentOS系统上rpm命令管理程序包:

         安装、升级、卸载、查询和校验、数据库维护

rpm命令:rpm  [OPTIONS]  [PACKAGE_FILE]

        安装:-i,--instal

        升级:-U,--update,-F,--freshen

        卸载:-e,--erase

        查询:-q,--query

        校验:-V,--verify

        数据库维护:--rebuildb,--initdb

安装:

        rpm  {-i | --install}  [install-options]  PACKAGE_FILE...

                rpm  -ivh  PACKAGE_FILE ...

                GENERAL OPTIONS:

                        -v:verbose,详细信息

                        -vv:更详细的输出

                [install-options]:

                        -h:hash marks 输出进度条:每个#表示2%的进度;

                        --test:测试安装,检查并报告依赖关系及冲突消息等;

                        --nodeps:忽略依赖关系; 不建议;

                        --replacepkgs:重新安装

                        注意:rpm可以自带脚本;

                                四类:--notscripts:不运行脚本

                                            preinstall:安装过程开始之前运行的脚本,%pre,--nopre

                                            postinstall:安装过程完成之后运行的脚本,%post,--nopost

                                            preuninstall:卸载过程真正开始执行之前运行的脚本,%preun,--nopreun

                                            postuninstall:卸载过程完成之后运行的脚本,%postun,--nopostun

                        --nosignature:不检查包签名信息,不检查来源合法性;

                        --nodigest:不检查包完整性信息

例1:安装

    升级:

        rpm  {-U|--upgrade}  [install-options]  PACKAGE_FILE ...

        rpm  {-F|--freshen}  [install--options]  PACKAGE_FILE ...

                -U:升级或安装;

                -F:升级

                rpm  -Uvh  PACKAGE_FILE ...

                rpm  -Fvh  PACKAGE_FILE ...

        [install-options]:

                --oldpackage:降级;

                --force:强制升级;

注意:(1)不要对内核做升级操作;linux支持多内核版本并存,因此,直接安装新版本内核;

              (2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

例2:因上一图中已安装,所以此处提示已经安装

卸载:

        rpm  {-e|--erase}  [--allmatches]  [--nodeps]  [--noscripts]  [--test]  PACKAGE_NAME ...

                --allmatches:卸载所有匹配指定名称的程序包的各版本;

                --nodeps:忽略依赖关系

                --test:测试卸载,dry run模式(干跑)

例3:卸载

查询:

        rpm  {-q|--query}  [select-options]  [query-options]

        [select-options]

                PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;

                -a,--all:查询所有已经安装过的包;

                -f  FILE:查询指定的文件由哪个程序包安装生成;

                -p,--package  PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;

                --whatprovides CAPABTLITY:查询指定的CAPABILITY由哪个程序包提供;

                --whatrequires CAPABILITY:查询指定的CAPAGILITY被哪个包所依赖;

        [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

                -qpi  PACKAGE_FILE,-qpl  PACKAGE_FILE,-qpc  PACKAGE_FILE,...

例4:检查已安装包的内容

例5:检查未安装包的一些内容


检验:

        rpm  {-V|--verify}  [select-options]  [verify-options]

        S file Size differs

        M Mode differs (includes permissions and file type)

        5 digest (formerly MD5 sum) differs

        D Device major/minor number mismatch

        L readLink(2) path mismatch

        U User ownership differs

        G Group ownership differs

        T mTime differs

        P caPabilities differ

获取并导入信任的包制作者的密钥:

        对于CentOS发行版来说:rpm  --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

        验证:

                (1)安装此组织签名的程序时,会自动执行验证;

                (2)手动验证:rpm  -K  PACKAGE_FILE

数据库重建:

        rpm管理器数据库路径:/var/lib/rpm/

                查询操作:通过此处的数据库进行:

        获取帮助:

                CentOS  6:man  rpm

                CentOS  7:man  rpmdb

                rpm  {--initdb|--rebuilddb}  [--dbpath  DIRECTORY]  [--root  DIRECTORY]

                        -initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当前有时不执行任何操作;

                        --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建

例6:重建数据库

yum repository:yum  repo(yum仓库)

        存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodate);

        文件服务器:

                ftp://

                http://

                fpt://

                file:///

yum客户端:

        配置文件:

                /etc/yum.conf :为所有仓库提供公共配置

                /etc/yum.repos.d/*.repo :为仓库的指向提供配置

        仓库指向的定义:

         [repositoryID]

        name=Some name for this repository                    (描述)

        baseurl=url://path/to/repository/                      (路径,可指明多个URL)

        enabled={1|0}                                                            (默认启用为1)

        gpgcheck={1|0}                                                        (检查签名)

        gpgkey=URL                                                             (密钥文件)

        enbalegroups={1|0}                                               (是否支持在组织上管理批量的程序包)

        failovermethod={roundrobin|prioryity}        (多个baseurl的选择方式)

                默认为:roundrobin,意为随机挑选;

        cost=

                默认为1000

yum命令的用法:

        yum  [options]  [command]  [package ...]

        command is of :

            * install package1 [package2] [...]

            * update [package1] [package2] [...]

            * update-to [package1] [package2] [...]

            * check-update

            * upgrade [package1] [package2] [...]

            * upgrade-to [package1] [package2] [...]

            * distribution-synchronization [package1] [package2] [...]

            * remove | erase package1 [package2] [...]

            * list [...]

            * info [...]

            * provides | whatprovides feature1 [feature2] [...]

            * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

            * makecache

            * groupinstall group1 [group2] [...]

            * groupupdate group1 [group2] [...]

            * grouplist [hidden] [groupwildcard] [...]

            * groupremove group1 [group2] [...]

            * groupinfo group1 [...]

            * search string1 [string2] [...]

            * shell [filename]

            * resolvedep dep1 [dep2] [...]

            * localinstall rpmfile1 [rpmfile2] [...]  

                    (maintained for legacy reasons only - use install)

            * localupdate rpmfile1 [rpmfile2] [...]

                    (maintained for legacy reasons only - use update)

            * reinstall package1 [package2] [...]

            * downgrade package1 [package2] [...]

            * deplist package1 [package2] [...]

            * repolist [all|enabled|disabled]

            * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]

            * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

            * check

            * help [command]

显示仓库列表:

        repolist  [all|enabled|disabled]

显示程序包:

        list

                # yum list [all | glob_exp1] [glob_exp2] [...]

                # yum list {available|installed}updates} [glob_exp2] [...]

安装程序包:

        install package1 [package2] [...]

        reinstall package1 [package2] [...] (重新安装)

升级程序包:

        update [package1] [package2] [...]

        downgrade package1 [package2] [...] (降级)

检查可用升级:

        check-update

卸载程序包:

        remove | erase package1 [package2] [...]

查看程序包infomation:

        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]

安装及升级本地程序包:

        * localinstall rpmfile1 [rpmfile2] [...]

                (maintained for legacy reasons only - use install)

        * localupdate rpmfile1 [rpmfile2] [...]

                (maintained for legacy reasons only - use update)

包组管理的相关命令:

        * groupinstall group1 [group2] [...]

        * groupupdate group1 [group2] [...]

        * grouplist [hidden] [groupwildcard] [...]

        * groupremove group1 [group2] [...]

        * groupinfo group1 [...]

yum的命令行选项:

        --nogpgcheck:禁止进行gpg check;

        -y:自动回答为“yes”;

        -q:静默模式;

        --disbalerepo=repoidglob:临时禁用此处指定的repo;

        --enablerepo=repoidglog:临时启用此处指定的repo;

        --noplugins:禁用所有插件;

yum的repo配置文件中可用的变量:

        $releasever: 当前OS的发行版的主版本号;

        $arch: 平台;

        $basearch:基础平台;

        $YUM0-$YUM9

        http://mirrors.magedu.com/centos/$releasever/$basearch/os

自建yum仓库,分别为网络源和本地源

创建本地源yum仓库:

         createrepo  [options]  

如何使用光盘当作本地yum仓库:

        (1)挂载光盘至某目录,例如:/media/cdrom 

                 #mount -r -t iso9660 /dev/cdrom /media/cdrom 

        (2)创建配置文件 

                [CentOS7] 

                name=

                baseurl=

                gpgcheck=若启用则需要gpgkey

                gpgkey=不启用gpgcheck则无需写

                enabled=默认为1 ,可不写  

例:

1、创建挂载光盘的目录,并找到/etc/yum.repos.d下以.repo结尾的文件

2、编辑文件键入以下内容,gpgcheck为1时需要写入gpgkey并指明gpgkey的URL

3、makecache构建缓存并用repolist验证yum源是否配置成功

创建网络源

    1、创建网络源之前建议备份/etc/yum.repo.d/CentOS-Base.repo

    2下载新对应的CentOS-Base.repo 到/etc/yum.repos.d/要根据自己的版本来下载,高版本的linux不能使用低版本的yum源,可从阿里源或网易源等网站下载

        wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、运行yum makecachesg生成缓存,成功则配置成功

简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00

at命令:单次执行一个任务,不能周期性的自动执行

        at  [OPTION]... TIME

                TIME:

                        HH:MM  [YYYY-mm-dd]

                        noon,midnight,teatime,tomorrow

                        now+#:从现在起+多少时间

                                UNIT:minutes,hours,days,weeks

                at的作业有队列,用单个字母表示,默认都使用a队列;

                常用选项:

                        -l:查看作业队列,相当于atq

                        -f:/PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入;

                        -d:删除指定的作业,相当于atrm;

                        -c:查看指定作业的具体内容;

                        -q  QUEUE:指明队列;

                注意:作业执行结果是以邮件发送给提交作业的用户

例:制定在16:00执行一次ls,以及-l查看任务队列

cron命令:周期性任务计划       

        确保crond守护进程(daemon)处于运行状态:               

                CentOS 7:                       

                        systemctl  status  crond.service               

                CentOS  6:                       

                        service  crond  status

向crond提交作业的方式不同于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件;要使用crontab命令;       

        cron任务分为两类:               

                系统cron任务:主要用于实现系统自身的维护;                       

                        手动编辑:/etc/crontab文件 

                用户cron任务:

                        命令crontab命令

        系统cron的配置格式 :/etc/crontab

                SHELL=/bin/bash

                PATH=/sbin:/bin:/usr/sbin:/usr/bin

                MAILTO=root

        

注意:

        (1)每一行定义一个周期性任务,共7个字段;

                * * * * * : 定义周期性时间

                user-name : 运行任务的用户身份

                command to be executed:任务

        (2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;

    (3) 执行结果邮件发送给MAILTO指定的用户

用户的cron的配置格式:/var/spool/cron/USERNAME

        SHELL=/bin/bash

        PATH=/sbin:/bin:/usr/sbin:/usr/bin

        MAILTO=root


注意:

        (1) 每行定义一个cron任务,共6个字段;

        (2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;

        (3) 邮件发送给当前用户;

时间表示法:

        (1)特定值;

                给定时间点有效取值范围内的值;

                        注意:day of week和day of month一般不同时使用;

        (2)*

                给定时间点上有效取值范围内的所有值;表“每..”

        (3)离散取值:,

                在时间点上使用逗号分隔的多个值;

                        #,#,#

        (4)连续取值:-

                在时间点上使用-连接开关和结束

                        #-#

        (5)在指定时间点上,定义步长:

                /#:#即步长;

                注意:

                        (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分;

(5) 9 8 * * 3,7:每周三和周日的8点9分执行一次;

(6) 0 8,20 * * 3,7:每周三和周日的8点和20点执行一次

(7) 0 9-18 * * 1-5:每周一至周五的9点至18点之间一直执行

(8) */5 * * * *:每5分钟执行一次某任务;

crontab命令:

        crontab [-u user] [-l | -r | -e] [-i]

                -e:编辑任务;

                -l:列出所有任务;

                -r:移除所有任务;即删除/var/spool/cron/USERNAME文件;

                -i:在使用-r选项移除所有任务时提示用户确认;

                -u user:root用户可为指定用户管理cron任务;

        注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件;

                (1)COMMAND  >  /dev/null  只收错误信息

                (2)COMMAND  &>  /dev/null  任何信息都不通知

        注意:定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可;

1、设置脚本:

        

2、编辑crontab任务:

        

3、查看任务列表:

        

简述sed常用操作命令,并举例

sed命令:

        sed [OPTION]... 'script' [input-file] ...

                script:地址定界编辑命令

                常用选项:

                        -n:不输出模式空间中的内容至屏幕;

                        -e script,--expression=script:多点编辑(多命令);

                            例:~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab

                        -f  /PATH/TO/SED_SCRIPT_FILE:每行一个编辑命令;

                        -r,--regexp-extended:支持使用扩展正则表达式;

                        -i[SUFFIX],--in-place[=SUFFIX]:直接编辑原文件;

        地址定界:

                (1)空地址:对全文进行处理;      

                (2)单地址:

                        #:指定行

                        /pattern/:被此模式所匹配到的每一地;

                (3)地址范围

                        #1,#2:#1到#2行之间

                        #1,+#2:#1到#1+#2之间

                        #,/pat1/:#到模式1之间

                        /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:显示替换成功的行;

        高级编辑命令:

                h:把模式空间中的内容覆盖至保持空间中;

                H:把模式空间中的内容追加至保持空间中;

                g:把保持空间中的内容覆盖至模式空间中;

                G:把保持空间中的内容追加至模式空间中;

                x:把模式空间中的内容与保持空间中的内容互换;

                n:覆盖读取匹配到的行的下一行至模式空间中;

                N:追加读取匹配到的行的下一行至模式空间中;

                d:删除模式空间中的行;

                D:删除多行模式空间中的所有行;

例1:删除/etc/fstab所有以UUID号开头的行

例2:删除/etc/grub2.cf所有以空白符开头的行的行首的所有空白字符

你可能感兴趣的:(rpm及yum的应用以及制定任务计划和sed的应用)