第六周

1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz"

  * /12 * * * root /etc -cvjf /backup -$(etc+%Y-%m-%d-%H-%M).tar.gz

2、rpm包管理功能总结以及实例应用演示。

  RPM包管理与YUM的使用总结

一、rpm包管理

简介:

在GNU/Linux操作系统中,RPM和DPKG为最常见的两类软件包管理工具,他们分别应用于基于RPM软件包的Linux发行版本和DEB软件包的Linux发行版本。软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询。

    RPM (The RPM PackageManager),是由Red Hat公司开发的一个Linux软件包安装与管理程序,是以一种数据库记录的方式来将所需要的软件安装到你的Linux系统的一套管理机制。用户可以方便地在Linux系统中安装、升级和删除软件,以及在一个统一的界面中对所有的RPM软件包进行管理。

RPM软件包分为二进制包(Binary)、源代码包(Source)和Delta包三种。二进制包(.rpm)可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。

特点:

将你要安装的软件先编译过,并且打包成为RPM机制的包装档案,透过包装好的软件里头默认的数据库记录,记录这个软件要安装的时候必须具备的相依属性软件,当安装在你的Linux主机时,RPM会先依照软件里面的数据查询Linux主机的相依属性软件是否满足,若满足则予以安装,若不满足产则不予安装。那么安装的时候就将该软件的信息整个写入RPM的数据库中,以便未来的查询、验证与反安装。

rpm包的命令格式

              Name-Version-Relase.Arch.rpm

                    eg:bash-4.1.2-15.el6_4.x86_64

Name:软件的名称,bash

Version: 版本信息。同源代码(4.1.2) 

源代码的version:major.minor.release

Release: rpm自身释放的发行号(次数),通常是编译的次数。与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS

Arch:硬件平台,

      x86: i386, i486, i586, i686等;

      x86_64: 针对64位的CPU进行优化编译设定

      powerpc: ppc

      noarch: 依赖于虚拟机,没有任何硬件等级上的限制。

例如:bash-4.2.3-3.centos5.x86_64.rpm

获取rpm包的途径:

      1、发行的光盘或站点服务器

          镜像:

            http://mirrors.163.com

            http://mirrors.sohu.com

            http://centos.ustc.edu.cn/centos/

      2、项目的官网

            源代码

            rpm包

      3、很多第三方机构或个人制作并公开发布许多rpm包

            http://rpmfind.net

            http://rpm.pbone.net

      4、可靠的途径:EPEL

        EPEL是Extra Packages forEnterprise Linux的缩写,企业版 Linux 附加软件包。https://fedoraproject.org/wiki/EPEL/zh-cn

rpm包的合法性验证:

包制作者制作完成之后会附加数字签名于包上;

来源合法性

包的完整性

包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。

验证过程:

前提:必须有可靠机制获取到包制作者的公钥;

1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;

2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;

rpm命令使用方法:

RPM软件包的安装、删除、升级、查看和验证等所有的操作都由rpm这一命令来进行的。rpm命令有12种模式,不同模式有不同的命令模式,能完成不同的管理功能。常用的模式的有:

安装模式:rpm  {-i |--install}  [install-options]  PACKAGE_File …

升级模式:rpm  {-U|--upgrade}  [install-options]  PACKAGE_File …

卸载(删除)模式:rpm {-e|--erase} [erase-options]PACKAGE_Name …

查询模式:rpm  {-q |--query }  [select-options]  [query-options]

验证模式:rpm  {-V |--verify}  [select-options]  [verify-options]

一般选项:可以用于rpm命令的所有模式。

      -h :用#显示完成的进度。

      --version:显示当前使用的RPM版本。

选择选项:select-options,用于查询和验证模式。

      -a:查询所安装的软件包。

      -f,--file FILE :查询拥有<文件>的软件包,即是哪一个软件包安装的<解文件>。

查询选项:query-options,可用于查询和验证模式。

      -i,--info:显示软件包的信息,包括名称、版本、描述信息。

      -l,--list:列出这个软件包内所包含的文件。

      --provides:显示这个软件包所提供的功能。

      -R,--requires:查询安装该软件包所需要的其他软件包。

      -s,--state:列出软件包中所有文件的状态。

验证选项:verify-options,只能用于验证模式。

      --nodeps:不验证依赖的软件包。

      --nofiles:不验证软件包文件的属性。

安装选项:install-options,用于安装模式和升级模式。

      --force:同--replacepkgs,--replacefiles一样,就算要安装的软件版本已经安装在系统上,或者是系统上现在的版本比要安装的版本高,依然强制覆盖安装。

      --nodeps:使用RPM安装前,RPM会检查该软件包的依赖关系,即正确运行该软件包所需的其他软件是否已经安装。使用该选项将忽略软件包所依赖的其他软件强制安装。但不推荐这种做法,因为这样安装的软件大部是不能运行的。

      --test:模拟安装,软件包并不会实际安装到系统中,只是检查并显示可能存在的冲突。

删除选项:erase-options,只能用于删除模式。

      --nodeps:忽略其他依赖该软件包的软件,强制删除该软件包。正常情况下不建议这样做,因为删除软件包后,其他相关的软件就不能运行了。

      --test:不真正删除,只是模拟。

rpm包管理器的常见使用场景

安装软件包:-i ,--install

软件包的安装分为两个阶段,首先是安装准备阶段,在准备阶段会检查磁盘空间、软件是否已安装、依赖软件包是否已安装等,准备阶段完成后才会进行软件包的安装。

      -i,--install 安装新软件包。可用于内核的升级和安装,可以同时保留老内核版本和新版本两个内核。

-h,--hash 用#(hash)符显示rpm安装过程

-v,--verbose详述安装过程

-vv ,显示调试信息

常用组合选项:-ivh

--test:安装准备阶段,模拟安装,检查为了检查一个软件包的安装是否会有冲突,可以事先使用--test选项进行模拟安装,例如

[root@stu19 Packages]# rpm-ivh --test zsh-4.3.10-7.el6.x86_64.rpm

Preparing...                ###########################################[100%]

[root@stu19 Packages]# rpm-ivh zsh-4.3.10-7.el6.x86_64.rpm

warning:zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de:NOKEY

Preparing...                ###########################################[100%]

  1:zsh                  ###########################################[100%]

RPM软件包有可能会依赖于其他软件包,也就是说在安装了特定的软件包之后才可以安装该软件包。如果软件依赖于其它包则:

1、解决依赖关系

如果多个包之间相互依赖,可以同时使用rpm命令安装多个包,或者使用yum进行安装。

有依赖关系包的会报错,error: Faileddependencies:。根据提示安装所依赖包,其中一些>=、<=符号。

>=:表示必须要大于或等于某个版本。

<=:表示要小于或等于某个版本。

2、忽略依赖关系

--nodeps,强制安装软件包,但有可能无法运行;一般不建议。

[root@stu19Packages]# rpm -ivh --test libgnomecanvas-devel-2.26.0-4.el6.x86_64.rpm

error: Faileddependencies:

        gtk-doc is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64

        gtk2-devel >= 2.1.2 is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64

        libart_lgpl-devel >= 2.3.8 is neededby libgnomecanvas-devel-2.26.0-4.el6.x86_64

        libglade2-devel >= 2.6.3-2 is neededby libgnomecanvas-devel-2.26.0-4.el6.x86_64

        pkgconfig(gail) is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64

        pkgconfig(gtk+-2.0) is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64

[root@stu19Packages]# rpm -ivh --nodeps libgnomecanvas-devel-2.26.0-4.el6.x86_64.rpm

Preparing...              ########################################### [100%]

  1:libgnomecanvas-devel  ###########################################[100%]


--force:同 --replacepkgs,--replacefiles一样,就算要安装的软件版本已经安装在系统上,或者是系统上现在的版本比要安装的版本高,依然强制覆盖安装。


卸载程序包:-e,-- erase

rpm [option] package_name

-e: erase 删除软件包

--test模拟删除,可以先检查被删除软件包是否有依赖软件包

--nodeps,强制删除,忽略依赖关系,但依赖于此包程序包可能会运行不正常;同安装的选项类似。   

注意:在卸载时,如果原有配置文件作了修改,系统提示警告信息,并将安装生成的配置文件重命名为以 .rpmsave结尾。

[root@stu19 Packages]# rpm -e --test libgnome

error: Failed dependencies:

        libgnome-2.so.0()(64bit)is needed by (installed) libbonoboui-2.24.2-3.el6.x86_64

        libgnome-2.so.0()(64bit)is needed by (installed) gnome-power-manager-2.28.3-7.el6_4.x86_64

        libgnome-2.so.0()(64bit)is needed by (installed) gnote-0.6.3-3.el6.x86_64

        libgnome-2.so.0()(64bit)is needed by (installed) mousetweaks-2.28.2-1.el6.x86_64

        libgnome >= 2.8.0 isneeded by (installed) gnome-python2-gnome-2.28.0-3.el6.x86_64

        libgnome is needed by(installed) gnome-terminal-2.31.3-8.el6.x86_64

[root@stu19 Packages]# rpm -e --nodeps libgnome

查询软件包:-q,--query

    使用rpm命令可以查看指定软件包的详细信息、安装的文件清单、依赖的软件包清单、某个软件包是否已经安装、系统中所有已安装软件包的清单等信息。

    常用组合选项:

    -q,--query查询某软件包是否安装,如果有则表示软件全名。

    格式:rpm -qpackage_name...

    # rpm -q bash

    bash-4.1.2-15.el6_4.x86_64

    -aq      ,--all查询系统中所有已经安装的软件包列表

    按条件过滤:rpm -qa | grep 'PATTERN'等同于选项-qi


    -iq,--info查询软件包的详细描述信息。输出中包括软件名称(name)、版本(Version)、修正版(Release)、软件包的安装时间(Install Date)、安装软件包的文件名称(Source RPM)、程序的占用空间(Size) 


[root@stu19 Packages]# rpm -qi bash

    Name        : bash                        Relocations: (not relocatable)

    Version    : 4.1.2                            Vendor: CentOS

    Release    : 15.el6_4            Build Date: Thu 18 Jul 201309:21:24 PM CST

    Install Date: Mon 30 Jun 2014 12:27:55 PM CST      Build Host: c6b10.bsys.dev.centos.org

    Group      : SystemEnvironment/Shells    Source RPM:bash-4.1.2-15.el6_4.src.rpm

    Size        : 3139291                          License: GPLv3+

    Signature  : RSA/SHA1, Thu 18Jul 2013 09:46:10 PM CST, Key ID 0946fca2c105b9de

    Packager    : CentOS BuildSystem<http://bugs.centos.org>

    URL        :http://www.gnu.org/software/bash

    Summary    : The GNU BourneAgain shell

    Description :

    The GNU Bourne Again shell (Bash) is a shell or command language

    interpreter that is compatible with the Bourne shell (sh). Bash

    incorporates useful features from the Korn shell (ksh) and the C shell

    (csh). Most sh scripts can be run by bash without modification.


    -lq,--list  查询系统中已安装软件包生成的文件列表。

          rpm -ql package_name

    [root@stu19 ~]# rpm -ql bash

    /bin/bash

    /bin/sh

    /etc/skel/.bash_logout

    /etc/skel/.bash_profile

    /etc/skel/.bashrc

    /usr/bin/bashbug-64

    /usr/share/doc/bash-4.1.2/COPYING

    … … … ….

    -cq,--configfiles查询某包安装生成了哪些配置文件

    #rpm -qc bash

          /etc/skel/.bash_logout

    /etc/skel/.bash_profile

    /etc/skel/.bashrc

    -dq,--docfiles查询某包安装生成了哪些帮助文件

    #rpm -qd bash

    --scripts查询程序包的相关脚本

    #rpm -q --scripts bash

    显示的脚本有四类:

            preinstall:在安装之前运行脚本

        postinstall: 在安装之后脚本

              preuninstall: 在卸载之前脚本

              postuninstall: 在卸载之后脚本


    -fq,--queryformat QUERYFMT查询某文件是由哪个软件包安装生成的。

        格式:  rpm -qf /path/to/some_file

    # rpm -qf/bin/cat

    coreutils-8.4-31.el6.x86_64


    -p,--package PACKAGE_FILE:对尚未安装的软件执行相关查询

        格式:    rpm [option] /path/to/package_file

    可以结合选项-qpi、-qpl、-qpc、-qpd使用,查看未安装软件包的相关信息。

    [root@stu19 Packages]# rpm -q zsh

    package zsh is not installed

    [root@stu19 Packages]# rpm -qpc zsh-4.3.10-7.el6.x86_64.rpm

    /etc/skel/.zshrc

    /etc/zlogin

    /etc/zlogout

    /etc/zprofile

    /etc/zshenv

    /etc/zshrc

    -Rq,--requires查看已安装的某个软件包所依赖的软件包清单。格式:rpm –qR 软件包名称

[root@stu19 Packages]# rpm -qR vim-common

/bin/sh 

config(vim-common) = 2:7.2.411-1.8.el6

libc.so.6()(64bit) 

libc.so.6(GLIBC_2.2.5)(64bit) 

libc.so.6(GLIBC_2.3)(64bit) 

libc.so.6(GLIBC_2.3.4)(64bit) 

libc.so.6(GLIBC_2.4)(64bit) 

rpmlib(CompressedFileNames) <= 3.0.4-1

rpmlib(FileDigests) <= 4.6.0-1

rpmlib(PayloadFilesHavePrefix) <= 4.0-1

rtld(GNU_HASH) 

rpmlib(PayloadIsXz) <= 5.2-1



升级程序包:

格式:rpm [option]/path/to/package_file

-U,--upgrade升级或安装。如果有老版本,则升级为新版本,否则安装。

由于版本过低,希望升级到更高的版本。新版的软件包安装文件覆盖旧版本的文件。

用户要注意的是:rpm会自动反安装相应软件包的老版本。如果老版本软件的配置文件通新版本的不兼容,rpm会自动将其保存为另外一个文件,用户会看到下面的信息:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

这样用户就可以自己手工去更改相应的配置文件。

另外如果用户要安装老版本的软件,用户就会看到下面的出错信息:

-Uvh,如果有老版本,则升级为新版本,否则安装。

-F,--freshen纯升级,如果没有老版本,则不升级。

组合选项:-Uvh 、-Fvh

      升级后的版本可能会有依赖关系的冲突等;

      --force: 强制升级

注意:内核升级一般使用安装-ivh,而不是升级-Uvh(直接升级),系统允许多内核并存。

软件包校验:-V,--verify

    -V,--verify用于检查包安装生成的文件属性是否发生变化。

    格式:rpm -V package_name

    检验项目共九项,结果以下面8个字母来和一个可能的属性标记:

    S : 表示文件大小;

    M : 表示权限;

    5 : 表示MD5检查和;

    D : 表示主从设备号;

    L : 表示符号连接;

    U : 表示属主;

    G : 表示属组;

    T : 表示最后修改时间根据文件类型的不同检验的项目也不同

    P:caPabilities differ

    c %config  configuration file.

    d %doc  documentation file.

    l %license  license file.

    r %readme  readme file.

    某属性无变化,显示为.

    示例:

    [root@stu19 Packages]# vi /etc/zshrc

    [root@stu19 Packages]# rpm -V zsh

    S.5....T.  c /etc/zshrc

    表示zsh包的配置文件/etc/zshrc文件大小、MD5、修改时间发生改变。

rpm包来源合法性及完整性检验:

    在安装软件的时候,会warning提示  NOKEY相关信息,说明rpm包对来源合法性验证有警示信息。需要在当前系统上导入包的制作者的公钥

    [root@stu19 Packages]# rpm -vhizsh-4.3.10-7.el6.x86_64.rpm

    warning: zsh-4.3.10-7.el6.x86_64.rpm:Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

    Preparing...                ###########################################[100%]

      1:zsh                  ###########################################[100%]


    导入格式:#rpm --import/path/to/key_file

    导入光盘镜像软件包公钥:

    #rpm --import/media/cdrom/RPM-GPG-KEY-CentOS-6

    # rpm -qa gpg-pubkey*    显示所有已经导入的gpg格式的公钥

    # rpm -qi gpg-pubkey-NAME  #显示密钥的详细信息

    示例:

    [root@stu19 Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm

    zsh-4.3.10-7.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSINGKEYS: (MD5) PGP#c105b9de)

    [root@stu19 Packages]# rpm --checksig zsh-4.3.10-7.el6.x86_64.rpm

    zsh-4.3.10-7.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSINGKEYS: (MD5) PGP#c105b9de)

    [root@stu19 Packages]# rpm --import ../RPM-GPG-KEY-CentOS-6

    [root@stu19 Packages]# rpm --checksig zsh-4.3.10-7.el6.x86_64.rpm

    zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

    [root@stu19 Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm

    zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK


    手动检查:

    #rpm -K/path/to/package_file

    #rpm --checksig/path/to/package_file


    不检查包完整性:

    #rpm -K --nodigest

    不检查来源合法性:

    #rpm -K --nosignature

数据库重建:

        通过rpm 命令查询一个rpm 包是否安装了,也是要通过rpm 数据库来完成的;有时rpm 系统出了问题,不能安装和查询,可能会是数据库出现问题,可以使用下面命令重建;

    rpm包数据库目录:/var/lib/rpm

    #rpm --initdb:初始化数据库

        ##如果事先没有库,会新建一个;如果有,则不新建;

    #rpm --rebuilddb: 重建数据库

        ##直接重建,覆盖原有的数据库

3、yum的配置和使用总结以及yum私有仓库的创建。

  yum (Yellowdog Update Modifier)  程序包管理器的前端工具

    是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包.

yum客户端安装软件等操作实现原理:

            1、配置文件:指定各可用的yum仓库;

            2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地;

            3、分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息;

            4、执行具体操作:

客户端配置文件指定对应服务器访问方式如下几种:

            ftp  ftp://server/path/to/repo

            http  http://server/path/to/repo

            nfs  nfs://server/nfs_path

            file  file:///path/to/repository

要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中:

  主配置 /etc/yum.conf

  仓库配置 /etc/yum.repos.d/*.repo

配置文件格式:由两段组成,类似windows的ini配置文件

        [main] :主配置段

        [repo] :仓库配置段

配置文件格式,文件 存放于/etc/yum.repos.d/ 并以repo结尾的文件

    [repo_id]

    name=repo_name  显示的名称,可以是任意的字符串

    baseurl=url            软件路径可以是网络上的,也可以是本地的

    gpgcheck={0|1}      是否启用包来源合法性验证

    enabled={0|1}          是否启用仓库

    gpgkey=公钥文件(可以在本地,也可是服务器端路径)

    cost=1000 仓库开销,用来做优先级,默认不指定就是1000 数值越小,优先级越大

yum 命令使用:

格式:


yum的各命令:

    安装

        install package_name ...: 安装指定的程序包

        reinstall package_name ...: 重新安装指定的程序包   

        groupinstall "group_name":安装指定的包组

                # yum install httpd

  查找

        repolist [all|enabled|disabled]: 列出所有可用yum repo

        list [all|installed|available]: 列出rpm包

        info package_name: 列出包的描述信息

        grouplist: 列出所有包组

        groupinfo "package_group_name":显示包组信息       

    升级

            check-update: 检查可升级的包

            update package_name ...: 升级指定的程序包

                如现在的版本:x-1.2.1, x-1.2.2, x-1.2.3

                    要升级到指定版本需指定版本号:yum update x-1.2.2 

    降级  downgrade package_name:

    删除

            erase|remove  package_name ...:  删除己安装的包,会连依赖的包一起删除 

            groupremove "group_name": 卸载指定的包组

    查询

            whatprovides|provides /path/to/somefile: 查询某文件是由哪个包安装生成的 

  #  yum provides */ifcofnig  # 这样可以查询ifconfig这个命令由哪个包提供的

    清除元仓库数据

            clean [all|packages|metadata|expire-cache|rpmdb|plugins]: 清理缓存

    安装本地包:(yum 安装本地的rpm包依旧会检查软件来源合法性的,无法通过的不予安装。需要安装则要禁止检查。)

        install /path/to/package_file

            手动禁止检查来源及完整性:--nogpgcheck

                yum install /tmp/zsh-2.3.1-2.el6.x86_64.rpm --nogpgcheck

以光盘为rpm源配置仓库

mkdir /mnt/cdrom

mount /dev/cdrom /mnt/cdrom

vim /etc/yum.repos.d/cdrom.repo

[base-cdrom]

name=cdrom_repo

baseurl=file:///mnt/cdrom/                      # 一般为repodata所在的目录,这里面有rpm包的元数据

gpgcheck=1

enabled=1

gpgkey=file://mnt/cdrom/RPM-GPG-KEY-CentOS-6

保存退出,yum repolist 可以查看是否配置成功

搭建本地离线yum仓库

把rpm包及其相关依赖全部都下载到本地,保存好。

(yum install  --downloadonly --downloaddir=/aspack/ \

mysql-community-server

上述命令即可把mysql-community-server对应的所有rpm包及其依赖下载到/aspack/目录里,也就是说yum本地安装mysql需要的所有文件我们都准备好了;如果需要其他包,则把mysql替换为其他包名字。

手动在/etc/yum.repos.d/目录下配置本地仓库信息。

# vim /etc/yum.repos.d/as4k.repo

[as4k]

name=as4k(仓库名,随便起,下面注意对应,注意拼写)

baseurl=file:///仓库路径或网址

gpgcheck=0

enabled=1

可以看到.repo配置文件,也是如此简单:

as4k是本地仓库名,可任意起名,但是注意不能与已有的仓库名重复。

name后面是注释信息,随意书写。

baseurl这后面就是填写本地仓库路径了,file://表示使用本地文件协议,后面的/aspack本地rpm包存放路径。

gpgcheck=0这是和验证包的安全信息的,最好设置成0,表示关闭安全验证,否则还需要准备安全验证文件,麻烦一堆一堆的。

enabled=0,表示启用本仓库,0关闭,1启用

使用createrepo命令生成repodata信息。

此功能默认没有,需要手动先安装yum install createrepo -y

安装完毕之后,直接使用:createrepo /仓库路径/

使用yum repoinfo检查确认

yum repoinfo 仓库名

以上全部执行完毕之后即可正常使用yum安装

补充:

如何对本地仓库进行更新

下载一个新的rpm软件包到本地仓库,此时我们使用yum repoinfo as4k查看会发现软件包的数量并没有增加,我们安装新增的软件包也会提示,找不到次软件包的现象,可以按照下述步骤,更新仓库信息。

查看旧的软件包总数 yum repoinfo as4k | grep pkgs

更新本地仓库 createrepo --update /aspack/

清除所有缓存 yum clean all

查看新的软件包总数 yum repoinfo as4k | grep pkgs

如果软件包的数量增加,说明仓库更新成功。

4、写一个脚本实现列出以下菜单给用户:

(1)disk:show disk info信息

(2)mem: show memory info信息

(3)cpu: show cpu info信息

(*)quit

#!/bin/bash

echo -e "Please input a number for the following command.\n(1) disk:show disk info.\n(2) mem: show memory info.\n(3) cpu: show cpu info.\n(4) Quit"

echo -n "Please enter an integer -> "

read int

if [ -n $int ];then

  case $int in

    1)

    echo"`df -h`"

    ;;

    2)

    echo"`free`"

    ;;

    3)

    echo"`cat /proc/cpuinfo`"

    ;;

    4)

    echo"`exit 1`"

    ;;

esac

else

echo "please input a correct number"

fi

5、sed用法总结并结合实例演示

  sed命令行格式为:

        sed [-nefri] ‘command’ 输入文本

常用选项:

        -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

        -e∶直接在指令列模式上进行 sed 的动作编辑;

        -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

        -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)

        -i∶直接修改读取的档案内容,而不是由萤幕输出。     

常用命令:

        a  ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

        c  ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

        d  ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

        i  ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

        p  ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~

        s  ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

举例:(假设我们有一文件名为ab)

    删除某行

    [root@localhost ruby] # sed '1d' ab              #删除第一行

    [root@localhost ruby] # sed '$d' ab              #删除最后一行

    [root@localhost ruby] # sed '1,2d' ab          #删除第一行到第二行

    [root@localhost ruby] # sed '2,$d' ab          #删除第二行到最后一行

  显示某行

.    [root@localhost ruby] # sed -n '1p' ab          #显示第一行

    [root@localhost ruby] # sed -n '$p' ab          #显示最后一行

    [root@localhost ruby] # sed -n '1,2p' ab        #显示第一行到第二行

    [root@localhost ruby] # sed -n '2,$p' ab        #显示第二行到最后一行

  使用模式进行查询

    [root@localhost ruby] # sed -n '/ruby/p' ab    #查询包括关键字ruby所在所有行

    [root@localhost ruby] # sed -n '/\$/p' ab        #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含

6、用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序

#!/bin/bash

#---test for sed and awk---

sed -n '/404/p' /usr/local/nginx/logs/access.log|awk -F":" '{print $1}'>ipnum.txt

echo "total 404 amount is `awk 'END{print NR}' ipnum.txt`"

cat ipnum.txt|sort -t ':' -k 3

7、使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包

  创建仓库文件夹;

  使用命令yum install  --downloadonly --downloaddir=/pk/curl/  \curl(以curl为例)下载完整包与依赖到对应文件夹;

  在/etc/yum.repos.d/文件夹下创建相应的配置文件curl.repo;

  编辑curl.repo内容:

[pk]

name=pk(仓库名,随便起,下面注意对应,注意拼写)

baseurl=file:///pk/curl

gpgcheck=0

enabled=1

  使用命令createrepo /仓库路径/生成对应的repo信息

  使用命令yum repoinfo 仓库名进行检查确认

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

推荐阅读更多精彩内容