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

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

推荐阅读更多精彩内容