第五周

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

mkdir /backup/

crontab -e

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

查看效果:

[root@localhost etc]# crontab -l

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

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

CentOS系统上rpm管理命令包括:

安装、卸载、升级、查询、校验、数据库维护

rpm包安装:

rpm {-i|--install} [install-options] PACKAGE_FILE…

-v: verbose:显示安装过程中的详细信息

-h:以#显示安装进度

--test:测试安装,但不真正执行安装 

--nodeps:忽略依赖关系

--replacepkgs:覆盖安装

--nosignature:不检查来源合法性

--nodigest:不检查包完整性

--noscripts:不执行程序包脚本

rpm包升级

升级:

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

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

upgrade:安装有旧版程序包,则“升级”。如果不存在旧版程序包,则“安装”

freshen:安装有旧版程序包,则“升级”。如果不存在旧版程序包,则不执行升级操作

--oldpackage:降级

--force: 强制安装

升级注意项

注意:

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

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

rpm包查询

rpm {-q|--query} [select-options] [query-options]

[select-options]

-a: 所有包

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

-p rpmfile:针对尚未安装的程序包文件做查询操作

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供

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

rpm2cpio 包文件|cpio –itv 预览包内文件

rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件

[query-options]

--changelog:查询rpm包的changelog

-c:查询程序的配置文件

-d:查询程序的文档

-i:information

-l:查看指定的程序包安装后生成的所有文件

--scripts:程序包自带的脚本

--provides:列出指定程序包所提供的CAPABILITY

-R:查询指定的程序包所依赖的CAPABILITY

rpm包卸载:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

--nodeps:忽略依赖关系

--allmatches:如果一个程序包同时安装多个版本,则此选项一次全部卸载之

--test:测试卸载

rpm包校验

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                                          link路径已被改变

U: User ownership differs                                                文件所属人已被改变

G:Group ownership differs                                               文件所属组已被改变

T:mTime differs                                                                文件的创建时间已被改变

P: capabilities differ                                                          文件的功能已被改变 

包来源合法性验正及完整性验证

完整性验证:SHA256

来源合法性验证:RSA

公钥加密

对称加密:加密、解密使用同一密钥

非对称加密:密钥是成对儿的

public key:公钥,公开所有人

secret key:私钥, 不能公开

本地密钥地址:/etc/pki/rpm-gpg

导入本地密钥:rpm  -import /etc/pki/rpm-gpg/keyfile

rpm包校验:rpm -K /rmpfile

rpm数据库

数据库重建:

/var/lib/rpm

rpm {--initdb|--rebuilddb}

initdb:初始化

如果事先不存在数据库,则新建之否则,不执行任何操作

rebuilddb:重建已安装的包头的数据库索引目录

实例:

rpm -qa bash         #查看bash是否安装

rpm -ivh ftp-0.17-67.el7.x86_64.rpm     #安装FTP

rpm -e  bash          #卸载bash

rpm -qf `which bash`    #返回bash的安装包全名

 rpm -qif `which bash`  #返回安装包bash的信息

rpm -qa | grep bash     #查找所有安装过的包含bash的软件包

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

yum:rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具

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

yum配置文件:

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

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

仓库指向的定义:

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

name=Some name for this repository       #当前仓库的名称

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

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

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

gpgkey=URL                                            #秘钥文件位置 

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

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

cost                                                         #设置开销,默认为1000

yum命令的用法

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

    OPTIONS

           --nogpgcheck:禁止进行gpg check;

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

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

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

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

            --noplugins:禁用所有插件;

常用命令

显示仓库列表:repolist

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

显示程序包:list

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

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

 安装程序包:install

   yum  install package1 [package2] [...]

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

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

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

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

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

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

检查可用升级:check-uodate

   yum check-update

查看程序包简要信息:info

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

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

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

清理本地缓存:clean

   yum  clean  

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

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

安装及升级本地程序包

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

   yum  localinstall rpmfile1 [rpmfile2] [...]

   yum  localupdate rpmfile1 [rpmfile2] [...]

自己搭建yum私有仓库

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

[base] 

name=cdrom

baseurl=file:///mnt/cdrom/  

gpgcheck=0   

enabled=1

yum repolist

搭建完yum配置文件即可使用yum安装了。

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

  (1)disk:show disk info信息

  (2)mem:show memory info信息

  (3)cpu:show cpu info信息

  (*)quit

#!/bin/bash

#while循环 

cat << EOF

(1) disk:show disk info

(2) mem:show memory info

(3) cpu:show cou info

(*) quit

EOF

while true;do

    read -p "your chioce:" option

    if [[ "$option" == "disk" ]];then

      fdisk -l /dev/sd[a-z]

      exit 0

    elif [[ "$option" == "mem" ]];then

      free -m

      exit 0

    elif [[ "$option" == "cpu" ]];then

      lscpu

      exit 0

    else

      echo "unkown option."

      exit 1

    fi

done

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

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

用法:

sed [option]... 'script' inputfile...

常用选项:

-n 不输出模式空间内容到屏幕,即不自动打印

-e 多点编辑

-f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本

-r 支持使用扩展正则表达式

-i.bak 备份文件并原处编辑

script:

'地址命令

地址定界:

(1) 不给地址:对全文进行处理

(2) 单地址:

#: 指定的行, $: 最后一行

/pattern/:被此处模式所能够匹配到的每一行

(3) 地址范围:

#,#

#,+#

/pat1/,/pat2/

#,/pat1/

(4) ~:步进

1~2 奇数行

2~2 偶数行

编辑命令:

d 删除模式空间匹配的行,并立即启用下一轮循环

p 打印当前模式空间内容,追加到默认输出之后

a [\]text 在指定行后面追加文本,支持使用\n实现多行追加

i [\]text 在行前面插入文本

c [\]text 替换行为单行或多行文本

w /path/file 保存模式匹配的行至指定文件

r /path/file 读取指定文件的文本至模式空间中匹配到的行后

= 为模式空间中的行打印行号

! 模式空间中匹配行取反处理

s/// 查找替换,支持使用其它分隔符, s@@@, s###

替换标记:

g 行内全局替换

p 显示替换成功的行

w /PATH/FILE 将替换成功的行保存至文件中

高级编辑命令

P: 打印模式空间开端至\n内容,并追加到默认输出之前

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

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

g: 从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

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

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

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

d: 删除模式空间中的行

D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

实例:

删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;

sed 's@^[[:space:]]\+@@' /etc/grub2.cfg

删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;

sed 's@^#[[:space:]]*@@' /etc/fstab

输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname;

echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'     

或者:echo "/var/log/messages" | sed -r 's@[^/]+/?$@@' 

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

日志格式:

157.255.47.165 - - [23/Jul/2019:00:02:50 +0800] HEAD /favicon.ico HTTP/1.0 "404" 0 "-" "-" "-"

用文本工具实现:

[root@localhost etc]# egrep "*\"[4-9][0-9][0-9]\"*" /home/backup/log.txt | cut -d " " -f1 | sort | uniq -c | sort -r

[root@localhost etc]# egrep "*\"[4-9][0-9][0-9]\"*" /home/ouyang/log.txt | awk '{print $1}' | sort | uniq -c | sort -r

用脚本实现:

#!/bin/bash

# ip.sh      sum ip list and code>=400

cat /home/ouyang/log.txt | egrep "*\"[4-9][0-9][0-9]\"*" | cut -d" " -f1 > ipnum.txt

for i in ipnum.txt;do

  iptj=`cat $i | sort | uniq -c | sort -r`

  echo "$iptj"

done

测试结果:

[root@localhost ouyang]# bash ./ip.sh

      3 111.206.219.223

      2 111.6.241.64

      1 60.174.240.54

      1 157.255.47.165

      1 14.204.74.84

      1 120.221.133.25

      1 117.149.155.124

      1 112.65.92.24

      1 111.6.241.67

      1 111.32.150.85

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

mkdir -p /backup/media

createrepo /backup/media/

yum repolist     #正常获取列表需要联网才可以。把CentOS-Base.repo和CentOS-Debuginfo.repo改名即可不要联网获取列表,这样就只有本地源

yum -y install ftp openssh curl wget tcpdump

你可能感兴趣的:(第五周)