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

#crontab -e 0 */12 * * * /bin/tar -zvcf /backup/etc-$(date +%Y-%m-%d-%H-%M).tar.gz /etc

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

一、程序包管理概述

1.程序包语言

   (1)系统级开发:一般直接调用硬件

C/C++:httpd, vsftpd, nginx

go语言

   (2)应用级开发:java/Python/perl/ruby/php:

java: hadoop, hbase, (基于jvm虚拟机)

Python:openstack, (基于pvm虚拟机)

perl: (perl解释器)

ruby: (ruby解释器)

php: (php解释器)

2.程序语言格式

   (1)C/C++程序格式:

源代码:文本格式的程序代码;

编译开发环境:编译器、头文件、开发库

二进制格式:文本格式的程序代码 --> 编译器 --> 二进制格式(二进制程序、库文件、配置文件、帮助文件)

   (2)java/python程序格式:

源代码:编译成能够在其虚拟机(jvm/pvm)运行的格式;

开发环境:编译器、开发库

二进制

3.项目构建工具:

c/c++: make

java: maven

4.程序包管理器:要完成安装、升级、卸载、查询、校验(校验为Linux所有)功能

   (1)功能

将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作;

  (2)组成方式

          1)程序包的组成清单(每个程序包都单独实现):文件清单、 安装或卸载时运行的脚本

          2)数据库(公共):/var/lib/rpm/

               程序包的名称和版本、依赖关系、 功能说明、安装生成的各文件的文件路径及校验码信息...

 (3)不同系列Linux所用程序包管理器:

debian:dpt, dpkg, ".deb"

redhat:redhat package manager, rpm, ".rpm"; rpm is package manager;

S.u.S.E:rpm, ".rpm",

Gentoo:ports

ArchLinux:

5.包的命名格式

     (1)源代码:name-VERSION.tar.*z

VERSION:major.minor.release 主版本号.次版本号.发行号

     (2)RPM包:name-VERSION-release.arch.rpm

VERSION:major.minor.release

release.arch:rpm包的发行号,arch 平台号

6.RHEL制作RPM包时会拆包:主包和支包,方便安装所需要组件而非全部

主包:name-VERSION-release.arch.rpm

支包:name-function-VERSION-release.arch.rpm

 function(功能):devel, utils, libs, ...

7.程序包管理器前端工具:自动解决依赖关系;

yum:rhel系列系统上rpm包管理器的前端工具;

apt-get (apt-cache):deb包管理器的前端工具;

zypper:suse的rpm管理器前端工具;

dnf:Fedora 22+系统上rpm包管理器的前端工具,yum的升级版;

8.获取程序包的途径:

(1)系统发行版的光盘或官方的文件服务器(或镜像站点):

http://mirrors.aliyun.com、http://mirrors.sohu.com、http://mirrors.163.com

(2)各个项目自己的官方站点

(3)第三方组织:

  1) EPEL等可靠地开源社区组织

  2) 搜索引擎:http://pkgs.org、 http://rpmfind.net 、http://rpm.pbone.net

(4)自动编译二进制代码、制作

二、RPM包管理

rpm命令:rpm [OPTIONS] [PACKAGE_FILE]

安装:-i, --install

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

卸载:-e, --erase

查询:-q, --query

校验:-V, --verify

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

1.安装:

   (1)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:重新安装

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

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

 注意:rpm可以自带脚本;

四类:--noscripts

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

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

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

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

   (2)实例演示

            1)[root@localhost Packages]#rpm  -ivh  zsh-5.0.2-28.el7.x86_64.rpm   #安装zsh程序,显示过程

[root@localhost Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:zsh-5.0.2-28.el7 ################################# [100%]

2.升级:

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

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

 -U:升级或安装  -Uvh;    rpm  -Uvh PACKAGE_FILE ...

  -F:纯粹升级,必须存在老版本,不支持安装操作 -Fvh     rpm  -Fvh PACKAGE_FILE ...

--oldpackage:降级;

--force:强制升级;

     注意:

       1) 不要对内核做升级操作;Linux支持多内核版本并存,可直接安装新版本内核;

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

    (2)实例演示

            [root@localhost Packages]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm

[root@localhost Packages]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm 准备中... ################################# [100%] 软件包 zsh-5.0.2-28.el7.x86_64 已经安装 3.卸载:

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

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

--nodeps:忽略依赖关系

--test:测试卸载,dry run模式

   (2)实例演示

            1)[root@localhost Packages]#rpm  -e   --test   zsh    #测试卸载zsh

       [root@localhost Packages]#rpm -ql  zsh    #查看zsh程序安装所生成的所有文件列表

结论:--test不会真的卸载程序

[root@localhost Packages]# rpm -e --test zsh [root@localhost Packages]# rpm -ql zsh /bin/zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile 2)[root@localhost Packages] rpm -e zsh

#卸载程序

[root@localhost Packages]# rpm -e zsh [root@localhost Packages]# rpm -ql zsh 未安装软件包 zsh [root@localhost Packages]# 4.查询:

   (1)rpm {-q|--query} [select-options] [query-options]

[select-options]

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

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

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

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

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

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

[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, ...d

   (2)实例演示

            1)[root@localhost Packages]# rpm -ql  sed

#查询程序安装所以生成的所有文件列表

[root@localhost Packages]# rpm -ql sed

             2)[root@localhost Packages]# rpm -qi sed  

#显示程序的相关信息

[root@localhost Packages]# rpm -qi sed Name : sed Version : 4.2.2 Release : 5.el7 Architecture: x86_64 Install Date: 2018年12月10日 星期一 05时28分49秒 Group : Applications/Text Size : 601208 License : GPLv3+ Signature : RSA/SHA256, 2014年07月04日 星期五 12时58分02秒, Key ID 24c6a8a7f4a80eb5 Source RPM : sed-4.2.2-5.el7.src.rpm Build Date : 2014年06月10日 星期二 09时01分55秒 Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem http://bugs.centos.org Vendor : CentOS URL : http://sed.sourceforge.net/ Summary : A GNU stream text editor Description : The sed (Stream EDitor) editor is a stream or batch (non-interactive) 3)[root@localhost Packages]# rpm -qd sed #查看包所提供文档位置

[root@localhost Packages]# rpm -qd sed /usr/share/doc/sed-4.2.2/AUTHORS /usr/share/doc/sed-4.2.2/BUGS /usr/share/doc/sed-4.2.2/COPYING /usr/share/doc/sed-4.2.2/COPYING.DOC /usr/share/doc/sed-4.2.2/NEWS /usr/share/doc/sed-4.2.2/README /usr/share/doc/sed-4.2.2/THANKS /usr/share/doc/sed-4.2.2/sedfaq.txt.gz /usr/share/info/sed.info.gz /usr/share/man/man1/sed.1.gz 4)[root@localhost Packages]# rpm -qc zsh #显示zsh相关的配置文件的位置

[root@localhost Packages]# rpm -qc zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc 5)[root@localhost Packages]# rpm -q --changelog zsh #查询zsh的改变日志

从近到远显示出该程序每次改版更新的相关信息

[root@localhost Packages]# rpm -q --changelog zsh * 四 2月 16 2017 Kamil Dudka kdudka@redhat.com - 5.0.2-28

  • zero new space allocated in prompt buffer (#1408619)
  • fix parsing of parameter subscript expression with NOEXEC (#1398740)
  • fix crash while parsing the here-document syntax (#1374752)
  • improve use of new command substitution in completion (#1356388)
  • fix off-by-one error in completion utility cache code (#1344599)

5.校验:

   (1)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 #MD5校验码是否改变

D Device major/minor number mismatch #设备的主次版本号是否错配

L readLink(2) path mismatch # readlink路径是否错配

           U User ownership differs              #用户本身关系

G Group ownership differs # 用户组本身关系

T mTime differs # 修改时间modify time

P caPabilities differ

   (2)实例演示

           测试安装的程序的校验信息

   [root@localhost Packages]# rpm  -ivh  --nodeps php-5.4.16-45.el7_0.3.x86_64.rpm

   [root@localhost Packages]# rpm  -V php

忽略依赖关系安装php程序,此处为了测试使用

#测试程序的校验信息

[root@localhost Packages]# rpm -ivh --nodeps php-5.4.16-45.el7.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:php-5.4.16-45.el7 ################################# [100%] [root@localhost Packages]# rpm -V php 未满足的依赖关系 php-5.4.16-45.el7.x86_64: php-common(x86-64) = 5.4.16-45.el7 被 (已安裝) php-5.4.16-45.el7.x86_64 需要 php-cli(x86-64) = 5.4.16-45.el7 被 (已安裝) php-5.4.16-45.el7.x86_64 需要 6.包来源合法性验正和完整性验证:

   (1) 检验方式

数字签名:用私钥加密对应程序的特征码

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

[root@localhost rpm-gpg]# cd /etc/pki/rpm-gpg/ [root@localhost rpm-gpg]# rpm --import RPM-GPG-KEY-CentOS-7 (3)验证:

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

  2. 手动验正:rpm -K PACKAGE_FILE

在导入秘钥的CentOS7.1上验证

[root@localhost Packages]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 确定 7.数据库重建:

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

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

   (2)获取帮助:CentOS命令查询位置不同

  CentOS 6:man rpm

  CentOS 7:man rpmdb

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

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

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

[--dbpath DIRECTORY] :指明建立位置

   (4)实例演示

            1)在指定目录下/rpmdb下初始化一个rpm的数据库

注意:此时的库是没用的,所以大小和原来的库不同

[root@localhost Packages]# rpm -initdb --dbpath /rpmdb/ [root@localhost Packages]# ll /rpmdb/ 总用量 440 -rw-r--r--. 1 root root 8192 12月 16 16:05 Basenames -rw-r--r--. 1 root root 8192 12月 16 16:05 Conflictname -rw-r--r--. 1 root root 311296 12月 16 16:05 __db.001 -rw-r--r--. 1 root root 90112 12月 16 16:05 __db.002 -rw-r--r--. 1 root root 107048 12月 16 16:05 __db.003 -rw-r--r--. 1 root root 8192 12月 16 16:05 Dirnames -rw-r--r--. 1 root root 8192 12月 16 16:05 Group -rw-r--r--. 1 root root 8192 12月 16 16:05 Installtid -rw-r--r--. 1 root root 8192 12月 16 16:05 Name -rw-r--r--. 1 root root 8192 12月 16 16:05 Obsoletename -rw-r--r--. 1 root root 12288 12月 16 16:05 Packages -rw-r--r--. 1 root root 8192 12月 16 16:05 Providename -rw-r--r--. 1 root root 8192 12月 16 16:05 Requirename -rw-r--r--. 1 root root 8192 12月 16 16:05 Sha1header -rw-r--r--. 1 root root 8192 12月 16 16:05 Sigmd5 -rw-r--r--. 1 root root 8192 12月 16 16:05 Triggername 2)查看/var/lib/rpm

[root@localhost Packages]# cd /var/lib/rpm [root@localhost rpm]# ll 总用量 101428 -rw-r--r--. 1 root root 5173248 12月 16 15:55 Basenames -rw-r--r--. 1 root root 16384 12月 13 21:25 Conflictname -rw-r--r--. 1 root root 311296 12月 16 16:02 __db.001 -rw-r--r--. 1 root root 90112 12月 16 16:02 __db.002 -rw-r--r--. 1 root root 1318912 12月 16 16:02 __db.003 -rw-r--r--. 1 root root 1376256 12月 16 15:55 Dirnames -rw-r--r--. 1 root root 32768 12月 16 15:55 Group -rw-r--r--. 1 root root 24576 12月 16 15:55 Installtid -rw-r--r--. 1 root root 81920 12月 16 15:55 Name -rw-r--r--. 1 root root 36864 12月 16 15:55 Obsoletename -rw-r--r--. 1 root root 92139520 12月 16 15:55 Packages -rw-r--r--. 1 root root 2527232 12月 16 15:55 Providename -rw-r--r--. 1 root root 614400 12月 16 15:55 Requirename -rw-r--r--. 1 root root 147456 12月 16 15:55 Sha1header -rw-r--r--. 1 root root 86016 12月 16 15:55 Sigmd5 -rw-r--r--. 1 root root 8192 12月 13 22:33 Triggername

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

一、YUM简介

1. YUM: Yellowdog Update Modifier

完成RHEL系列前端自动解决依赖关系安装工具,依赖rpm存在

2.工作模式:C/S 架构

  Server端(yum仓库):依赖关系库、原文件、校验码文件

  Client端:yum客户端程序、配置文件(连接Server路径信息)

3.设计缺陷:

某一次安装过程中半途终止,再次重启后将无法解决程序间的依赖关系

yum升级版dnf就是为了解决此类问题

2.yum repository: yum repo,yum仓库

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

二、YUM客户端配置

1.yum配置文件路径

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

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

2./etc/yum.conf主配置定义

    [root@localhost ~]# man 5 yum.conf           #可获得yum.conf的详解

   [root@localhost ~]# cat /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/bu # 追踪bug路径

distroverpkg=centos-release # 当前发行版版本号从哪儿获取

3.仓库(*.repo)配置文件定义:

[repositoryID] #仓库ID,唯一标识别,不能重复

name=Some name for this repository # 完整的仓库名称

baseurl=url://path/to/repository/ # yum仓库指明的访问路径

enabled={1|0} #是否启用此yum仓库,默认启用

gpgcheck={1|0} #是否检查完整性和来源合法性

gpgkey=URL #秘钥文件位置,可能是对方仓库提供

enablegroups={1|0} #是否基于组来批量管理程序包

failovermethod={roundrobin|priority} #故障转移方法:轮询、根据优先级选择; 默认roundrobin随机

cost=# #设置开销,默认为1000

… ...

 说明:

        1)*.repo可以将多个[repositoryID]的配置信息放在一个而文件内,也可以切成多个方便管理

 2)baseurl可以使用:ftp:// 、http:// 、nfs:// 、file:///  指明URL路径

 3)baseurl等号两边不能有空格,其后可以填写多个镜像访问路径,每行一个,不能顶行写

       多个访问路径间联系是镜像相同,目的是为了做备用访问

 4)更多选项使用man  5  yum.conf查看,基本配置只需前三行就可以        

 5)发行版光盘镜像安装可能会自动配置网络镜像URL地址

三、yum命令的用法

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

1.OPTIONS

--nogpgcheck:禁止进行gpg check;

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

        -q: 静默模式,不输出显示信息;

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

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

        --noplugins:禁用所有插件;



2.常用COMMAND

    (1)显示仓库列表:repolist

   # yum repolist [all|enabled|disabled]    [所有|可用的|不可用]

     (2)显示程序包:list

          # yum list [all | glob_exp1] [glob_exp2] [...]     [所有的|符合glob通配条件的]

          # yum list {available|installed|updates} [glob_exp1] [...]   可用尚未安装的,已经安装的,可升级的

     (3)安装程序包:install

             # yum  install package1 [package2] [...]

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


    (4)卸载程序包:此时依赖于此安装包也会被卸载

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

    (5)升、降级安装程序包:update、downgrade

         # yum update [package1] [package2] [...]         升级操作

         # yum downgrade package1 [package2] [...]       降级操作

    (6)检查可用升级:check-uodate

           # yum check-update

    (7)查看程序包简要信息:info

        # yum info [package1]  [package2]  [...]


     (8)查看指定的特性(可以是某文件)是由哪个程序包所提供:provides

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

     (9)清理本地缓存:clean

        # yum  clean  <packages | metadata | expire-cache | rpmdb | plugins | all >

包、源数据、过期缓存、rpmdb、插件、所有

包安装完了会自动清除、而元数据(依赖关系等)不会自动,但下次yum安装会自动重新校验

 3.COMMAND:安装及升级本地程序包

指定安装本地的*.rpm,但是会根据yum源现有依赖关系,解决此安装可能出现的依赖关系

         # yum  localinstall rpmfile1 [rpmfile2] [...]

         # yum  localupdate rpmfile1 [rpmfile2] [...]



4.COMMAND:包组管理的相关命令:

包组:一堆程序的一个集合,用于一起安装,因为某些程序安装需要依赖包组内容

              # yum  groupinstall group1 [group2] [...]     安装包组

              # yum  groupupdate group1 [group2] [...]    升级包组

              # yum  grouplist [hidden] [groupwildcard] [...]   显示包组列表

             # yum  groupremove group1 [group2] [...]     移除包组

             # yum  groupinfo group1 [...]   显示包组信息

四、创建yum仓库

1.使用光盘当作本地yum仓库:

光盘的镜像本身就是一个yum源,自己安装系统时候选择安装工具时就是借助yum自动安装

   (1)挂载光盘至某目录,例如/media/cdrom   # mount -r [-t iso9660]  /dev/cdrom /media/cdrom

   (2)创建配置文件

        [ID]

        name=

        baseurl=file:///… …

        gpgcheck=

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

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

        $arch: 平台;

        $basearch:基础平台,同一系列最基本的架构,如32、64;

        $YUM0-$YUM9 可做自定义


3.手动创建yum仓库:

    (1)安装工具:createrepo,已安装

[root@localhost yum.repos.d]# yum info createrepo 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile

  • base: mirrors.cn99.com
  • epel: mirror01.idc.hinet.net
  • extras: mirrors.huaweicloud.com
  • updates: mirrors.cn99.com 已安装的软件包 名称 :createrepo 架构 :noarch 版本 :0.9.9 发布 :28.el7 大小 :302 k 源 :installed 来自源:anaconda 简介 : Creates a common metadata repository 网址 :http://createrepo.baseurl.org/ 协议 : GPLv2 描述 : This utility will generate a common metadata repository from a : directory of rpm packages. (2)下载所需要的所有文件到本地某个路径:

[root@localhost yum.repos.d]# mkdir -p /yumtest/Packages [root@localhost yum.repos.d]# cp /media/cdrom/Packages/* /yumtest/Packages/ (3)创建关联关系: createrepo - Create repomd (xml-rpm-metadata) repository

命令:createrepo [options] <directory>

当完成后生成repodata即可

[root@localhost yum.repos.d]# createrepo /yumtest/ Spawning worker 0 with 2478 pkgs Spawning worker 1 with 2478 pkgs Spawning worker 2 with 2478 pkgs Spawning worker 3 with 2477 pkgs Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete [root@localhost yum.repos.d]# (4)配置yum源文件,创建*.rope写入信息即可

root@localhost yum.repos.d]# cat Local.repo [Local] name=Local Yum baseurl=file:///yumtest/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1

[root@localhost yum.repos.d]# yum repolist 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile epel/x86_64/metalink | 7.5 kB 00:00

  • base: mirrors.huaweicloud.com
  • epel: ftp.cuhk.edu.hk
  • extras: mirrors.huaweicloud.com
  • updates: mirrors.163.com Local | 2.9 kB 00:00 base | 3.6 kB 00:00 extras | 3.4 kB 00:00 updates | 3.4 kB 00:00 Local/primary_db | 5.9 MB 00:00 源标识 源名称 状态 Local Local Yum 9,911 base/7/x86_64 CentOS-7 - Base 10,019 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,744 extras/7/x86_64 CentOS-7 - Extras 321 updates/7/x86_64 CentOS-7 - Updates 599 repolist: 33,594

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

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


#!/bin/bash

cat << EOF 1)disk: show disk info 2)mem:show memory info 3) cpu:show cpu info *) quit EOF

read -p 'Please input your choice:' option if [[ $option == 'disk' ]];then fdisk -l elif [[ $option == 'mem' ]];then free -h elif [[ $option == 'cpu' ]];then lscpu else exit 0 fi

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

sed:流编辑器 1.sed:Stream Editor 行处理工具,流编辑器

对文件内容逐行进行处理调用操作并显示到STDOUT

    工作流程:

(1)sed默认不编辑原文件,而是逐行操作,复制一份到指定内存(pattern space,模式空间)

(2)pattern space内进行模式匹配,即和指定条件做匹配

不满足模式:输出到标准输出STDOUT

满足模式:进行指定的模式操作,再输出到STDOUT

(3)第二个特殊的内存空间 hold space:保持空间,临时保存操作在另一处内存

(4)当执行pattern space和 hold space相关选项时候回进行之间的数据流编辑操作

(5)最后根据操作执行hold space空间操作,选择性显示到STDOUT

2.格式:sed [OPTION]… {script-only-if-no-other-script} [input-file]…

其中{script-only-if-no-other-script}:指的是AddressCommands,地址界定执行命令

AddressCommands中间无空格,直接连接为一个选项操作

============ sed [OPTION]… AddressCommands [input-file]…==============

    (1)OPTION常用选项

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

  -e script, --expression=script:多点编辑;

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

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

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

     (2)地址定界

  1)空地址:什么都不填写时,表示对全文进行处理

  2)单地址

 #:表示对指定的行

/pattern/:被此模式所匹配到的每一行,其中模式两边的/不能省略

  3)地址范围  (#表示任意数字)

#,#:从某行到某行,第二个#大于第一个#

#,+#:从某行开始加多商行

#,/pattern1/:从某行开始到第一次配到模式的行

/pattern1/,/pattern2/:从第一次匹配到的模式1到第二次匹配到哦的模式2

  4)步进:~,#~#   从第几行

1~2:所有奇数行。从第一行开始,每次加两行读取

2~2:所有偶数行。从第二行开始,每次加两行读取

    (3)编辑命令

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

练习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/messages/" | sed 's@[^/]\+/\?$@@'
~]# echo "/var/log/messages" | sed -r 's@[^/]+/?$@@'
3.pattern space和hold space编辑命令操作

     (1)常用选项

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

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

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

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

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

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

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

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

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

     (2)实例演示

sed -n 'n;p' FILE:显示偶数行;

sed '1!G;h;$!d' FILE:逆序显示文件的内容;

sed ’$!d' FILE:取出最后一行;

sed '$!N;$!D' FILE:取出文件后两行;

sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;

sed 'n;d' FILE:显示奇数行;

sed 'G' FILE:在原有的每行后方添加一个空白行;

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

#!/bin/bash

nginx_log='/usr/local/nginx/logs/mynginx.log'

code_400_num=$(grep -o '[4|5][0-9][0-9]' ${nginx_log} | wc -l)

code_400_sort=$(grep '[4|5][0-9][0-9]' ${nginx_log} | sort

echo $code_400_num

echo $code_400_sort

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

mkdir -p /yumrepo/Packages ###创建本地packages目录 ###将需要的Packages拷贝到本地目录 cp /media/cdrom/Packages/ftp-0.17-67.el7.x86_64.rpm /yumrepo/Packages/ cp /media/cdrom/Packages/openssh-* /yumrepo/Packages/ cp /media/cdrom/Packages/curl-7.29.0-35.el7.centos.x86_64.rpm /yumrepo/Packages/ cp /media/cdrom/Packages/wget-1.14-13.el7.x86_64.rpm /yumrepo/Packages/ cp /media/cdrom/Packages/tcpdump-4.5.1-3.el7.x86_64.rpm /yumrepo/Packages/ ###使用createrepo命令创建本地yum源(如果没有此命令可以使用yum -y install createrepo安装)

[root@www yumrepo]# createrepo /yumrepo/ Spawning worker 0 with 15 pkgs Workers Finished Gathering worker results ++++++++++++++++++++++++++++++ Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete 修改yum配置文件,将仓库指向本地源 ++++++++++++++++++++++++++++++ [root@www ~]# cd /etc/yum.repos.d/ [root@www yum.repos.d]# vim local.repo [yumrepo] name=yumrepo baseurl=file:///yumrepo enabled=1 gpgcheck=0 ++++++++++++++++++++++++++++++ [root@www yum.repos.d]# yum repolist #######查看yum仓库 已加载插件:fastestmirror, security Loading mirror speeds from cached hostfile

base: mirror.lzu.edu.cn extras: mirror.lzu.edu.cn updates: mirrors.cqu.edu.cn 仓库标识 仓库名称 状态 base CentOS-6 - Base 6,713 extras CentOS-6 - Extras 35 updates CentOS-6 - Updates 251 yumrepo yumrepo 15 repolist: 7,014 ++++++++++++++++++++++++++++++ 安装ftp、openssh、curl、wget、tcpdump等软件包

yum install -y ftp openssh curl wget tcpdump