美文网首页
Linux系统管理之定时任务、包管理

Linux系统管理之定时任务、包管理

作者: 请叫我飘哥 | 来源:发表于2019-01-09 12:37 被阅读0次

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

    • crontab表达方式
      * * * * * 从前到后分别表示分 时 日 月 周
      */2 表示每2(分钟、小时 *所代表的要能被2整除)
    • date表达方式
      %Y 年份(例如2019)
      %m 月份(01..12)
      %d 按月计的日期(例如:01)
      %H 时(00-23)
      %M 分钟(00..59)
      %S 秒(00-60)
    • 实现步骤
    1、创建备份目录
    [root@node01 ~]# mkdir -p /backup
    [root@node01 ~]# cd /backup/
    [root@node01 backup]# ls
    2、编辑crontab
    [root@node01 backup]# crontab -e
    ##这里我们使用.xz的方式压缩,即每天的12点、0点的0分钟,进行一次备份
    0 */12 * * *  /usr/bin/tar -Jcvf /backup/etc-$(date +"\%Y-\%m-\%d-\%H").tar.xz /etc > /dev/null
    [root@node01 backup]# ls  -l
    总用量 282592
    -rw-r--r--. 1 root root 6883312 1月   4 12:00 etc-2019-01-04-12.tar.xz
    -rw-r--r--. 1 root root 6887508 1月   5 00:00 etc-2019-01-05-00.tar.xz
    -rw-r--r--. 1 root root 6887508 1月   5 12:00 etc-2019-01-05-12.tar.xz
    -rw-r--r--. 1 root root 6887508 1月   6 00:00 etc-2019-01-06-00.tar.xz
    -rw-r--r--. 1 root root 6887508 1月   6 12:00 etc-2019-01-06-12.tar.xz
    -rw-r--r--. 1 root root 6887508 1月   7 00:00 etc-2019-01-07-00.tar.xz
    -rw-r--r--. 1 root root 6886940 1月   7 12:00 etc-2019-01-07-12.tar.xz
    
    

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

    • 简介
      RPM全名是redhat package manage ,是用来管理软件的各种操作,包括安装、更新、删除、查询、认证。它最大的特点是将软件事先编译,然后打包成为RPM机制的包文件,并且包中记录了此软件在安装时需要的其他依赖软件。在安装时RPM会根据记录比较本地主机数据库中的记录是否满足依赖,若满足则安装,并且把此软件的信息也写入数据库,不满足则不予安装。

    • RPM包命名格式
      RPM包分为主包和子功能包
      主包:name-version-release.(os).arch.rpm
      子包:name-function-version-release.(os).arch.rpm
      name:包名
      version:源码的版本号,version的格式为major.minor.release,major源代码的主版本号、minor为次版本号、release为源代码的发行次数
      release:rpm包的发行号
      os:操作系统(可有可无)
      arch:硬件架构,有i386、i486、i586、i686、x86_64、powerpc等,其中noarch指无硬件架构限制
      function:说明子包的功能特性

    • 获取程序包的途径:

    • rpm命令的使用
      rpm命令按照用途可以分为 安装、升级、卸载、查询、校验、数据库维护这六个区块,下面我们就对各个区块的常用使用方法进行说明

      • 1、安装
        rpm {-i|--install} [install-option] PACKAGE_FILE(包完整文件名)…
        -i或者—install为安装选项,一般会配合-v、-h参数一同使用。-v为显示具体的安装信息,-h为显示安装进度。
        [install-option] 为安装选项下具体功能选项,常用的有
        --nodeps
        安装时忽略软件的依赖关系强制安装
        --nosignature
        安装时不验证包的数字签名即不验证包的来源合法性
        --noscripts
        禁止软件在安装前或后自动执行某些脚本
        --force
        强制安装,--replacefiles和—replacepkgs的综合体
        --test
        不安装只是测试软件能否安装到当前环境,若不能会给出提示
        --prefix
        将软件安装到想要的路径中,后面接路径名
        安装示例:
      [root@node01 Packages]# rpm -ivh zip-3.0-11.el7.x86_64.rpm 
      准备中...                          ################################# [100%]
      正在升级/安装...
       1:zip-3.0-11.el7                   ################################# [100%]
      
      • 2、更新
        rpm {-U|--upgrade} [install-options]PACKAGE_FILE(包完整文件名) ...
        rpm {-F|--freshen} [install-options]PACKAGE_FILE(包完整文件名) ...
        同安装一样,更新也会和-h、-v选项一同使用
        rpm -Uvh name.release.rpm
        后面接的软件若不存在,则予以安装,存在则更新
        rpm -Fvh name.release.rpm
        后面接的软件若不存在,则不安装,存在则更新

      • 3、卸载
        rpm {-e|--erase} [erase-option] PACKAGE_NAME(已安装的软件名) ...
        [erase-option]
        --allmatches
        卸载所有匹配后面接的软件名的程序包
        --nodeps
        忽略依赖关系,强制卸载。但卸载后依赖此软件的其他软件会不能使用
        --noscripts
        在卸载过程前或后不执行任何脚本
        --test
        只测试,不真正卸载

      • 4、查询
        rpm {-q|--query} [select-options][query-options]
        rpm在查询时是查询/var/lib/rpm这个数据库中的信息,并且rpm还可以查询未安装的rpm文件内的信息
        [query-option]
        -i
        列出该软件的详细信息
        -l
        列出软件安装生成的所有文件列表
        -c
        列出该软件的配置文件
        -d
        列出该软件的说明文件
        -R
        查询该软件的依赖关系
        -s
        列出软件包中所有文件的状态
        --provides
        列出这个软件包提供的功能
        --scripts
        列出这个软件包在安装或卸载前后可以运行的脚本
        --changelog
        显示软件包的历史更改信息
        [select-options]
        -a
        列出所有已经安装的软件
        -f FILE
        后面接文件名,查询该文件属于哪个程序
        --whatprovides CAPABILITY
        查询指定的CAPABILITY由哪个程序包提供
        --whateequires CAPABILITY
        查询哪些程序包依赖此CAPABILITY
        查询示例:

     [root@node01 Packages]# rpm -qa httpd
      httpd-2.4.6-88.el7.centos.x86_64
     [root@node01 Packages]# rpm -qf /etc/httpd/conf/httpd.conf 
      httpd-2.4.6-88.el7.centos.x86_64
     [root@node01 Packages]# rpm -q --whatprovides  httpd
      httpd-2.4.6-88.el7.centos.x86_64
      [root@node01 Packages]# rpm -q --whatrequires httpd
      没有软件包需要 httpd
      [root@node01 Packages]# rpm -q --whatrequires bash
      dracut-033-502.el7.x86_64
      initscripts-9.49.39-1.el7.x86_64
      lvm2-2.02.171-8.el7.x86_64
      rsyslog-8.24.0-12.el7.x86_64
      [root@node01 Packages]# rpm -qc httpd
      /etc/httpd/conf.d/autoindex.conf
      /etc/httpd/conf.d/userdir.conf
      /etc/httpd/conf.d/welcome.conf
      /etc/httpd/conf.modules.d/00-base.conf
      /etc/httpd/conf.modules.d/00-dav.conf
      /etc/httpd/conf.modules.d/00-lua.conf
      /etc/httpd/conf.modules.d/00-mpm.conf
      /etc/httpd/conf.modules.d/00-proxy.conf
      /etc/httpd/conf.modules.d/00-systemd.conf
      /etc/httpd/conf.modules.d/01-cgi.conf
      /etc/httpd/conf/httpd.conf
      /etc/httpd/conf/magic
      /etc/logrotate.d/httpd
      /etc/sysconfig/htcacheclean
      /etc/sysconfig/httpd
    
    • 5、校验
      rpm {-V|--verify} [select-options] [verify-options]
      [verify-options]
      --nodeps
      不验证包的依赖关系
      --nodigest
      不验证包的完整性
      --nosignature
      不验证包的来源可靠性
      -f FILE
      验证某个文件的完整性
      一般我们校验时都最好都检查下,所以直接使用rpm -V package_name 即可。
      校验后无任何显示输出,说明包的完整性;如果有变化,会显示具体的变化项目
      S:文件容量被改变
      M:文件属性被改变
      5:MD5和被改变,即数据的内容被改变
      D:设备的主、次代码被改变
      L:link路径被改变
      U:文件属主被改变
      G:文件属组被改变
      T:文件的修改时间被改变
      P:功能被改变
      例如:修改httpd.conf 文件后在对包进行校验
    [root@node01 conf]# rpm -V httpd
    S.5....T.  c /etc/httpd/conf/httpd.conf
    显示httpd这个程序中的/etc/httpd/conf/httpd.conf这个文件的数据内容和修改时间有过变动
    
    • 6、rpm包来源合法性及包完整性验证机制
      rpm包的制作者通过单向加密技术提取出包数据的特征码,特征码用于确保包数据的完整性,如果包中数据被改动,那特征码也一定会发生改变。之后包制作者使用非对称加密技术,利用其中的私钥对之前产生的特征码进行加密,此加密被称为数字签名,并公布与私钥对应的公钥给下载者,由于公钥只能解密对应的私钥,若数字签名被改动,则公钥不能解密,说明下载来源出现问题,从而保证了rpm包的来源合法性。之后下载者通过同样的单向加密技术对rpm包提取特征码,如果提取出的特征码和原特征码一致,就说明rpm包中的数据没有被改动过,从而保证了rpm包的数据完整性

      • 导入包制作者的公钥,这里使用的是centos7的公钥位置
        rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

      • 导入完成后,我们可以查看密钥的具体软件名称和它的基本信息
        [root@node01 conf]# rpm -qa |grep pubkey
        gpg-pubkey-352c64e5-52ae6884

      • 我们在安装rpm包时,会自动执行验证签名,我们也可以手动验证
        [root@node01 ~]# rpm -K epel-release-latest-7.noarch.rpm
        epel-release-latest-7.noarch.rpm: rsa sha1 (md5) pgp md5 确定

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

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

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


      YUM工作原理图
      • 配置文件:指定各可用的yum仓库;
      • 缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地;
      • 分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息;
      • 执行具体操作
    • 服务端
      将所有需要用到的rpm包存放于某个目录之下,该目录可以是远程的(采用ftp和http协议),也可以是本地的(采用file协议)。目录建立好了之后,使用createrpo命令来提取目录下所有[rpm]包的元数据和依赖关系,生成一些xml格式的文件,这些文件会存放在repodata目录下,至此,服务器端的repository就建立好了。注意repodata所在的位置,就是yum仓库的位置。
      服务端提供如下是主要的文件服务
      文件服务器:
      ftp://
      http://
      nfs://
      file://
    • 客户端
      客户端的配置非常简单,只需要使用yum及其子命令install、reinstall或remove即可。不过使用yum及其子命令之前,需要编辑配置文件,以告知yum命令仓库repository在什么地方。这个配置文件为:/etc/yum.conf。此外/etc/yum.repos.d/*.repo都被视为/etc/yum/conf的组成部分。
      客户端配置文件:
      /etc/yum.conf:为所有仓库提供公共配置
    [main]
    cachedir=/var/cache/yum/$basearch/$releasever   # 缓存文件路径
    keepcache=0                                     #缓存到本地的文件是否保存
    debuglevel=2                                    # 调试级别
    logfile=/var/log/yum.log                        # 安装的日志文件
    exactarch=1                                     # 精确严格的平台release匹配
    obsoletes=1
    gpgcheck=1                                      #检测来源合法性和完整性
    plugins=1
    installonly_limit=5                             #同时安装多少程序包
    bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
    distroverpkg=centos-release                     #当前发行版版本号从哪儿获取
    

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

         [repositoryid]                                                    #仓库ID,唯一标识别,不能重复
         name=Some name for this repository                                #完整的仓库名称
         baseurl=url://server1/path/to/repository/                         # yum仓库指明的访问路径
                 url://server2/path/to/repository/
                 url://server3/path/to/repository/
        enabled={1|0}   默认为1                                            #是否启用此yum仓库,默认启用
        gpgcheck={1|0}                                                    #是否检查完整性和来源合法性
        gpgkey=URL                                                        #秘钥文件位置,可能是对方仓库提供
        enablegroups={1|0} 默认为1                                        #是否基于组来批量管理程序包,默认支持
        failovermethod={roundrobin|priority}                              #故障转移方法:轮询、根据优先级选择; 默认roundrobin随机
        cost=默认为1000                                                   #设置开销,默认为1000
    

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

    $releasever:  当前OS的发行版的主版本号
    $arch:    平台  
    $basearch:    基础平台
    $YUM0-$YUM9
    
    • yum常用操作命令
      yum repolist 显示仓库列表
      yum list 显示程序包
      yum search 模糊查找程序包
      yum install 安装程序包
      yum remove 卸载程序包
      yum update [package1] [package2] [...] 升级操作
      yum downgrade package1 [package2] [...] 降级操作
      yum info [package1] [package2] [...] 查看程序包简要信息
      yum provides | whatprovides feature1 [feature2] [...] 查看指定的特性(可以是某文件)是由哪个程序包所提供
      yum clean <packages | metadata | expire-cache | rpmdb | plugins | all > 清理本地缓存

    • 创建私有仓库

      • 本地光盘镜像
      挂载光盘镜像:
      [root@node01 yum.repos.d]# mount /dev/cdrom /media
      mount: /dev/sr0 写保护,将以只读方式挂载
      
      创建光盘镜像配置文件:
      [root@node01 media]# cd /etc/yum.repos.d/
      [root@node01 yum.repos.d]# vim CentOS-Media.repo
      [c7-media]
      name=CentOS-$releasever - Media
      baseurl=file:///media
      gpgcheck=1
      enabled=1
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
      
      验证:
      [root@node01 yum.repos.d]# yum repolist |grep Media
      c7-media                 CentOS-7 - Media                                    425
      [root@node01 yum.repos.d]# 
      
      • 同步网络私有yum仓库
        思路,通过同步国内的私有仓库地址,更新私有仓库,公司内网用户只需要访问私有仓库,无需直接上网,降低带宽成本,同时提高安装效率。

        • 1、安装 nginx、yum-utils、createrepo 服务。nginx提供web服务提供客户端访问,yum-utils,createrepo安装仓库管理工具
          [root@node2 yumdata]# yum -y install nginx yum-utils createrepo
        • 2、创建仓库目录
          [root@node2 /]# mkdir -p /yumdata/{centos/{6,7},epel}
        • 3、修改/etc/yum.repos.d/CentOS-Base.repo
        [root@node2 /]# vim /etc/yum.repos.d/CentOS-Base.repo 
        ## centos7
        [base7]
        name=CentOS-7-os-cmiot.local
        baseurl=http://mirrors.163.com/centos/7/os/x86_64/
        gpgcheck=1
        gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
        [updates7]
        name=CentOS-7-updates-cmiot.local
        baseurl=http://mirrors.163.com/centos/7/updates/x86_64/
        gpgcheck=1
        gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
        [extras7]
        name=CentOS-7-extras-cmiot.local
        baseurl=http://mirrors.163.com/centos/7/extras/x86_64/
        gpgcheck=1
        gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
        ## centos6
        [base6]
        name=CentOS-6-os-cmiot.local
        baseurl=http://mirrors.163.com/centos/6/os/x86_64/
        gpgcheck=1
        gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
        [updates6]
        name=CentOS-6-updates-cmiot.local
        baseurl=http://mirrors.163.com/centos/6/updates/x86_64/
        gpgcheck=1
        gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
        [extras6]
        name=CentOS-6-extras-cmiot.local
        baseurl=http://mirrors.163.com/centos/6/extras/x86_64/
        gpgcheck=1
        gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
        ## epel
        [epel6]
        name=CentOS-6-epel-cmiot.local
        baseurl=https://mirrors.aliyun.com/epel/6/x86_64/
        gpgcheck=0
        [epel7]
        name=CentOS-7-epel-cmiot.local
        baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
        gpgcheck=0
        
        • 4、使用yum repolist验证CentOS-Base.repo文件是否生效
          [root@node2 yumdata]# yum repolist
        • 5、同步文件
        [root@node2 yumdata]# reposync -n --repoid=extras6 --repoid=updates6 --repoid=base6 -p /yumdata/centos/6
        [root@node2 yumdata]# reposync -n --repoid=extras7 --repoid=updates7 --repoid=base7 -p /yumdata/centos/7
        [root@node2 yumdata]# reposync -n --repoid=epel6 -p /yumdata/epel
        [root@node2 yumdata]# reposync -n --repoid=epel7 -p /yumdata/epel
        
        • 6、createrepo 命令创建yum源
        格式:createrepo -po 源目录 索引元数据的输出位置目录
        [root@node2 yumdata]# createrepo -po /yumdata/centos/6/base6/  /yumdata/centos/6/base6/
        [root@node2 yumdata]# createrepo -po /yumdata/centos/6/updates6/  /yumdata/centos/6/updates6/
        [root@node2 yumdata]# createrepo -po /yumdata/centos/6/extras6/  /yumdata/centos/6/extras6/
        [root@node2 yumdata]# createrepo -po /yumdata/epel/epel6/  /yumdata/epel/epel6/
        [root@node2 yumdata]# createrepo -po /yumdata/centos/7/base7/  /yumdata/centos/7/base7/
        [root@node2 yumdata]# createrepo -po /yumdata/centos/7/updates7/  /yumdata/centos/7/updates7/
        [root@node2 yumdata]# createrepo -po /yumdata/centos/7/extras7/  /yumdata/centos/7/extras7/
        [root@node2 yumdata]# createrepo -po /yumdata/epel/epel7/  /yumdata/epel/epel7/
        
        • 7、配置web服务,修改nginx配置文件
        [root@node2 yumdata]# vim /etc/nginx/nginx.conf
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /yumdata;
        
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
        
            location / {
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
            }
         }
        
        • 8、启动nginx服务
         [root@node2 ~]# systemctl start  nginx
         [root@node2 ~]# systemctl enable  nginx
        
        • 9、浏览器验证


          yum服务器web页面
        • 10、同步脚本编写

         [root@node2 ~]# vim updata.sh
        #!/bin/bash
        #
        echo 开始同步centos6
        reposync -n --repoid=extras6 --repoid=updates6 --repoid=base6 -p /yumdata/centos/6
        reposync -n  --repoid=epel6 -p /yumdata/epel/
        echo centos6同步结束
        
        echo 开始同步centos7
        reposync -n --repoid=extras7 --repoid=updates7 --repoid=base7 -p /yumdata/centos/7
        reposync -n  --repoid=epel7 -p /yumdata/epel/
        echo centos7同步结束
        
        #更新元数据
        createrepo --update /yumdata/centos/6/base6/
        createrepo --update /yumdata/centos/6/updates6/
        createrepo --update /yumdata/centos/6/extras6/
        createrepo --update /yumdata/epel/epel6/
        createrepo --update /yumdata/centos/7/base7/
        createrepo --update /yumdata/centos/7/updates7/
        createrepo --update /yumdata/centos/7/extras7/
        createrepo --update /yumdata/epel/epel7/    
        echo "$(date +"%Y-%m-%d-%H")  同步完成"                                  
        
        • 设置定时任务
        [root@node2 ~]# crontab -e
        0 0 * * *  sh   updata.sh   &> /tmp/yum.log
        

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

    (1)disk:show disk info信息
    (2)mem: show memory info信息
    (3)cpu: show cpu info信息
    (*)quit

    思路,写一个循环,1-3分别代表disk、mem、cpu等信息
    4表示退出,只有选择4时脚本才会结束循环退出
    当现在1-3中任何一个数字时打印info信息后,并继续循环
    [root@node01 ~]# vim dis_info.sh 
    #!/bin/bash
    #
    while  true
    do
    cat << END
    ===========================
    1 > display disks info
    2 > display memory info
    3 > show cpu info
    4 > quit
    ---------------------------
    END
    
    read -p  "Your choice: "  option
    
    case $option in
    1)
          fdisk -l /dev/sd[a-z];;
    2)
          cat /proc/meminfo;;
    3)
          lscpu;;
    4)
          exit 1;;
    *)
          echo " Useage [1-4]";;
    esac
    done
    
    脚本演示
    [root@node01 ~]# sh dis_info.sh 
    ===========================
    1 > display disks info
    2 > display memory info
    3 > show cpu info
    4 > quit
    ---------------------------
    Your choice: x
    Useage [1-4]
    ===========================
    1 > display disks info
    2 > display memory info
    3 > show cpu info
    4 > quit
    ---------------------------
    Your choice: 2
                total        used        free      shared  buff/cache   available
    Mem:           3791         148        1221          16        2420        3322
    Swap:          6015           0        6015
    ===========================
    1 > display disks info
    2 > display memory info
    3 > show cpu info
    4 > quit
    ---------------------------
    Your choice: 
    

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

    sed :Stream EDitor ,流编辑器,行操作
    格式:sed [OPTION]...'script' [input-file]...
    script表示地址定界编辑命令

    • 常用选项:
        -n:不输出模式空间中的内容至屏幕
        -e script,--expression=script:  多点编辑
        -f  /path/somefile :    每行一个编辑命令
        -r :支持使用扩展正则表达式
        -i :直接编辑原文件
      
    • 地址定界:
      • 1、空地址:对全文进行处理
      • 2、单地址
        n:指定n行
        /pattern/:被此模式所匹配到的每一行
      • 3、地址范围
        n,m:n~m行
        n,+m:n~n+m行
        n,/parttern/
        /parttern1/,/parttern2/
        $,最后一行
        4、步进:~
        1~2:所有奇数行
        2~2:所有偶数行
      • 编辑命令:
        d:删除
        p:显示模式空间中的内容
        a \text :在行后面追加文本“text”,支持使用\n实现多行追加
        i \text:在行前面追加文本“text”,支持使用\n实现多行追加
        c \text:把匹配到的行替换为此处指定的文本“text”
        w /path/somefile:保存模式空间匹配到的行至指定的文本中
        r /path/from/somefile:读取指定文件的内容至当前文件被匹配到的行后面;文件合并
        =:为模式匹配到的行打印行号
        !:条件取反
        s///:查找替换,其分隔符可自行指定,常用的有s@@@ ,s###
          替换标记:
            g:全局替换
            w /path/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/message/" |sed 's@[^/]\+/\?$@@'
      echo "/var/log/message/" |sed -r 's@[^/]+/?$@@'
      

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

    思路:以nginx日志为例,根据定义的日志格式,先找每行中的IP和状态码对应关系,
    并且只有IP和状态码信息,然后根据状态码做锚定[4|5][0-9][0-9],然后根据IP进行排序,去重,再按照出现次数进行排序
    awk -F ' ' '{ print $1,$9 }'  /var/log/nginx/access.log |grep '\<[4|5][0-9][0-9]\>' |sort -n |uniq -c |sort -n
    演示效果:
    [root@node2 ~]# awk -F ' ' '{ print $1,$9 }'  /var/log/nginx/access.log |grep '\<[4|5][0-9][0-9]\>' |sort -n |uniq -c |sort -nr
         16 10.192.52.63 403
          8 10.192.52.63 404
          1 10.192.2.222 404
          1 10.192.1.163 404
    [root@node2 ~]# 
    

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

    先前已经搭建了一个私有仓库,我们利用先前搭建的仓库进行安装

    • 1、下载repo配置文件
      [root@node01 yum.repos.d]# wget http://10.192.1.164/CentOS7-Base.repo
    • 2、查看仓库列表
      [root@node01 yum.repos.d]# yum repolist
    • 3、安装
      [root@node01 yum.repos.d]# yum -y install ftp openssh curl wget tcpdump
      已安装:
      ftp.x86_64 0:0.17-67.el7                                                                   tcpdump.x86_64 14:4.9.2-3.el7                                                                  
      
      更新完毕:
      curl.x86_64 0:7.29.0-51.el7                                                                 openssh.x86_64 0:7.4p1-16.el7                                                                
      
      作为依赖被升级:
      libcurl.x86_64 0:7.29.0-51.el7             nspr.x86_64 0:4.19.0-1.el7_5        nss.x86_64 0:3.36.0-7.el7_5       nss-pem.x86_64 0:1.0.3-5.el7     nss-softokn.x86_64 0:3.36.0-5.el7_5  
      nss-softokn-freebl.x86_64 0:3.36.0-5.el7_5 nss-sysinit.x86_64 0:3.36.0-7.el7_5 nss-tools.x86_64 0:3.36.0-7.el7_5 nss-util.x86_64 0:3.36.0-1.el7_5 openssh-clients.x86_64 0:7.4p1-16.el7
      openssh-server.x86_64 0:7.4p1-16.el7      
      
      完毕!
      [root@node01 yum.repos.d]# 
      

    相关文章

      网友评论

          本文标题:Linux系统管理之定时任务、包管理

          本文链接:https://www.haomeiwen.com/subject/vsourqtx.html