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

首先确保crond守护进程处于运行状态

Centos7

systemctl status crond.service  
输出结果:
Active: active (running)
或者命令
service crond status

Centos6

service crond status
输出结果
crond (pid  2221) is running...

编辑

mkdir /backup/                 #创建目录
tar -zcvf /backup/etc-"$(date +%F-%H-%M)".tar.gz /etc/   测试命令
输出结果:
[root@benny/backup]#ls
etc-2019-08-27-23-20.tar.gz
输入命令
crontab  -e
* */12 * * * tar -zcvf /backup/etc-"$(date +%F-%H-%M)".tar.gz /etc/
查看目前的时程表
[root@benny~]#crontab -l
* */12 * * * tar -zcvf /backup/etc-"$(date +%F-%H-%M)".tar.gz /etc  

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

①功能总结

liunx基础五_第1张图片

②实例应用演示

下载一下prm包作为测试文件:

wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm

查看rpm包信息:

rpm -qpi lrzsz-0.12.20-36.el7.x86_64.rpm

输出结果

Name        : lrzsz
Version     : 0.12.20
Release     : 36.el7
Architecture: x86_64
Install Date: (not installed)
Group       : Applications/Communications
Size        : 184846
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 11时35分32秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : lrzsz-0.12.20-36.el7.src.rpm
Build Date  : 2014年06月10日 星期二 07时29分11秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem 
Vendor      : CentOS
URL         : http://www.ohse.de/uwe/software/lrzsz.html
Summary     : The lrz and lsz modem communications programs

查看rpm包的内容:

rpm -qpl lrzsz-0.12.20-36.el7.x86_64.rpm

输出结果:

/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz

查看rpm包的依赖:

rpm -qpR lrzsz-0.12.20-36.el7.x86_64.rpm

输出结果:

libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(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)
libc.so.6(GLIBC_2.7)(64bit)
libnsl.so.1()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PartialHardlinkSets) <= 4.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

安装rpm包:

rpm -ivh lrzsz-0.12.20-36.el7.x86_64.rpm

输出结果:

准备中...                          ################################# [100%]
正在升级/安装...
   1:lrzsz-0.12.20-36.el7             ################################# [100%]

查询系统是否安装指定的rpm包

rpm -qa lrzsz

输出结果:

lrzsz-0.12.20-36.el7.x86_64

卸载rpm包:

rpm -e lrzsz

查询文件属于那个包:

rpm -qf /usr/bin/sz

输出结果:
lrzsz-0.12.20-36.el7.x86_64

查询命令属于那个包:

[root@benny~]#rpm -qf $(which rz)
lrzsz-0.12.20-36.el7.x86_64   #输出结果

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

yum的配置

  • yum 的配置文件分为两部分:main 和repository

    main 部分定义了全局配置选项,整个yum 配置文件应该只有一个main。常位于/etc/yum.conf 中。

     [main]
    cachedir=/var/cache/yum
      //yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,默认设置为/var/cache/yum
    keepcache=0
      //安装完成后是否保留软件包,0为不保留(默认为0),1为保留
    debuglevel=2
      //Debug 信息输出等级,范围为0-10,缺省为2
    logfile=/var/log/yum.log
      //yum 日志文件位置。用户可以到/var/log/yum.log 文件去查询过去所做的更新。
    pkgpolicy=newest
      //包的策略。一共有两个选项,newest 和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository 中同时存在,yum 应该安装哪一个,如果是newest,则yum 会安装最新的那个版本。如果是last,则yum 会将服务器id 以字母表排序,并选择最后的那个服务器上的软件安装。一般都是选newest。
    distroverpkg=redhat-release
      //指定一个软件包,yum 会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm 包。
    tolerant=1
      //有1和0两个选项,表示yum 是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum 不会出现错误信息。默认是0。
    exactarch=1
      //有1和0两个选项,设置为1,则yum 只会安装和系统架构匹配的软件包,例如,yum 不会将i686的软件包安装在适合i386的系统中。默认为1。
    retries=6
      //网络连接发生错误后的重试次数,如果设为0,则会无限重试。默认值为6.
    obsoletes=1
      //这是一个update 的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包。
    plugins=1
      //是否启用插件,默认1为允许,0表示不允许。我们一般会用yum-fastestmirror这个插件。
    bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
    
    # Note: yum-RHN-plugin doesn't honor this.
    metadata_expire=1h
    
    installonly_limit = 5
    
    # PUT YOUR REPOS HERE OR IN separate files named file.repo
    # in /etc/yum.repos.d

    repository 部分定义了每个源/服务器的具体配置,可以有一到多个。常位于/etc/yum.repo.d 目录下的各文件中。

    [base]
    name=CentOS-$releasever - Base - mirrors.aliyun.com
    failovermethod=priority
    baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
            http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
            http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
    //
    
    [serverid]
    name=Some name for this server
    baseurl=url://server1/path/to/repository/     
    enabled={1|0}#enabled=1开启本地更新模式
    gpgcheck={1|0}# gpgcheck=1表示检查;可以不检查gpgcheck=0
    gpgkey=#检查的key;如果上面不检查这一行可以不写。
    
    • serverid 是用于区别各个不同的repository,必须有一个独一无二的名称;

    • name 是对repository 的描述,支持像releaseverbasearch这样的变量;

    • baseurl 是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。它的格式是:

      baseurl=url://server1/path/to/repository/
           url://server2/path/to/repository/
           url://server3/path/to/repository/

      其中url 支持的协议有 http:// ftp:// file:// 三种。baseurl 后可以跟多个url,你可以自己改为速度比较快的镜像站,但baseurl 只能有一个,也就是说不能像如下格式:

      baseurl=url://server1/path/to/repository/
      baseurl=url://server2/path/to/repository/
      baseurl=url://server3/path/to/repository/

yum的使用总结

创建yum私有库

①对etc/yum.repos.d/的Centos-Base.repo进行备份

mv Centos-Base.repo Centos-Base.repo.back

②修改Centos-Base.repo文件

[Base]
name=CentOS-$releasever-Base
baseurl=file:///media
gpgchek=1

③对光盘进行挂载

mount /dev/cdrom /media/

④重新加载yum

yum clean
yum makecache

⑤查看yun源

[root@benny/etc/yum.repos.d]#yum repolist 

输出结果
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
Base
(1/2): Base/group_gz
(2/2): Base/primary_db
源标识 源名称
Base CentOS-7-Base
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64
repolist: 23,392

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

(1)disk:show disk info信息

(2)mem: show memory info信息

(3)cpu: show cpu info信息

(*)quit

vim cr.sh
#!/bin/bash
#********************************************************************
#Author:        benny
#QQ:            759354304
#Date:          2019-09-02
#FileName:      cr.sh
#URL:           http://www.benny.com
#Description:       The test script
#Copyright (C):     2019 All rights reserved
#********************************************************************
cat << EOF
disk:show disk info;
men: show memory info;
cpu:show cpu info
(*)QUIT
EOF
read -p "your chice:" option
if [[ "$option" == "disk" ]]; then 
   fdisk -l /dev/[sh]d[a-z]
elif [[ "$option" == "men" ]]; then
   free -m
elif [[ "$option" == "men" ]]; then
   lscpu
else
    echo "Unkown option"
    exit 3
fi

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

  • 用法总结

    sed 的选项、命令、替换标记

    命令格式

    sed [options] 'command' file(s)
    sed [options] -f scriptfile file(s)

    选项

    -e<script>或--expression=<script>:以选项中的指定的script来处理输入的文本文件;
    -f<script文件>或--file=<script文件>:以选项中指定的script文件来处理输入的文本文件;
    -h或--help:显示帮助;
    -n或--quiet或——silent:仅显示script处理后的结果;
    -V或--version:显示版本信息。
    -r,支持正则表达式

    参数

    文本:指定待处理的文本文件列表

    a\ 在当前行下面插入文本。
    i\ 在当前行上面插入文本。
    c\ 把选定的行改为新的文本。
    d 删除,删除选择的行。
    D 删除模板块的第一行。
    s 替换指定字符
    h 拷贝模板块的内容到内存中的缓冲区。
    H 追加模板块的内容到内存中的缓冲区。
    g 获得内存缓冲区的内容,并替代当前模板块中的文本。
    G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
    l 列表不能打印字符的清单。
    n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
    N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
    p 打印模板块的行。
    P(大写) 打印模板块的第一行。
    q 退出Sed。
    b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
    r file 从file中读行。
    t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
    T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
    w file 写并追加模板块到file末尾。  
    W file 写并追加模板块的第一行到file末尾。  
    ! 表示后面的命令对所有没有被选定的行发生作用。  
    = 打印当前行号码。  
    # 把注释扩展到下一个换行符以前。  

    sed 替换

    g 表示行内全面替换。  
    p 表示打印行。  
    w 表示把行写入一个文件。  
    x 表示互换模板块中的文本和缓冲区中的文本。  
    y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
    \1 子串匹配标记
    & 已匹配字符串标记
  • 实例演示

    演示文件

    [root@benny~]#cat >test_sed.txt< 1 ,TOM,TWC
    > 2,jerry,wto
    > 3,smith,zcv
    > 4,Brown,BBC
    > 5, willianms
    > 6,jones,zhzhidrda
    > EOF

在文件指定行后追加文件

sed '3a 888,Anderson,son' test_sed.txt
输出结果

1 ,TOM,TWC
2,jerry,wto
3,smith,zcv
888,Anderson,son
4,Brown,BBC
5, willianms
6,jones,zhzhidrda

在文件指定后追加多行文本

sed '3a 888,Anderson,son\n999,Martin,MHTZ' test_sed.txt

输出结果:

1 ,TOM,TWC
2,jerry,wto
3,smith,zcv
888,Anderson,son
999,Martin,MHTZ
4,Brown,BBC
5, willianms
6,jones,zhzhidrda

删除文件中一行指定的文本

sed '2d' test_sed.txt

输出结果:

1 ,TOM,TWC
3,smith,zcv
4,Brown,BBC
5, willianms
6,jones,zhzhidrda

删除文件指定的多行文本

'2,5d' test_sed.txt

输出结果:

1 ,TOM,TWC
6,jones,zhzhidrda

替换操作:s命令

` sed 'sed 's$t$O$g' test_sed.txt

输出结果:

1 ,TOM,TWC
2,jerry,wOo
3,smiOh,zcv
4,Brown,BBC
5, willianms
6,jones,zhzhidrda

打印输出文件的指定行的内容

sed -n '3p' test_sed.txt

输出结果:

3,smith,zcv

特殊用法实例:

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数量并排序

[root@benny~]#awk '$9>400{print $1}' /var/log/httpd/access_log* |uniq -c |sort -nr

输出结果:

     2 10.0.0.1

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

ⅰ、查看以上软件是否安装

yum list installed fpt openshh curl wget tcpdump```

若安装进行卸载

rpm -e --nodeps wget curl tcpdump


yum remove 完全移除软件包,包括所有依赖项此命令很危险,不建议使用,可能会误卸载别的软件所需要的依赖项

Ⅱ、在当前yum下查找是否存在以上软件,yum源来自`CentOS-7-x86_64-Everything-1810.iso`包含大部分软件

yum list ftp openshh curl wget tcpdump


出结果为:

    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
    可安装的软件包
    curl.x86_64                            7.29.0-51.el7                                Base
    ftp.x86_64                             0.17-67.el7                                  Base
    tcpdump.x86_64                         14:4.9.2-3.el7                               Base
    wget.x86_64                            1.14-18.el7                                  Base
Ⅲ、直接安装

yum install -y ftp openshh curl wget tcpdump```

Ⅳ、检查安装结果

[root@benny~]#yum list installed fpt openshh curl wget tcpdump
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
已安装的软件包
curl.x86_64                            7.29.0-51.el7                                @Base
tcpdump.x86_64                         14:4.9.2-3.el7                               @Base
wget.x86_64                            1.14-18.el7                                  @Base