周期性任务计划,包管理,sed以及shell编程基础

周期性任务计划,包管理,sed以及shell编程基础

1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz"
[root@localhost /]# crontab -e
0 /12 /usr/bin/tar -zcf /data/backup/etc-$(date '+%Y-%m-%d--%H-%M').tar.gz /ect/*
2.rpm包管理功能总结以及实例应用演示
rpm是一个功能十分强大的软件包管理系统,它使得在Linux下安装、升级和删除软件包的工作变得容易,并且具有安装、升级、卸载、查询和校验、数据库维护等功能.
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
(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:重新安装
注意:rpm可以自带脚本;
四类:--noscripts
preinstall:安装过程开始之前运行的脚本,%pre , --nopre
postinstall:安装过程完成之后运行的脚本,%post , --nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun, --nopreun
postuninstall:卸载过程完成之后运行的脚本,%postun , --nopostun
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息;

(2)升级:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
 -U:升级或安装;
 -F:升级
rpm  -Uvh PACKAGE_FILE ...
rpm  -Fvh PACKAGE_FILE ...
 --oldpackage:降级;
 --force:强制升级;
注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
(2) 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

(3)卸载:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...----allmatches:卸载所有匹配指定名称的程序包的各版本;
 --nodeps:忽略依赖关系
 --test:测试卸载,dry run模式

(4)查询:

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

(5)校验:

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
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
包来源合法性验正和完整性验正:
来源合法性验正:
完整性验正:
获取并导入信任的包制作者的密钥:
对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验正:
(1) 安装此组织签名的程序时,会自动执行验正;
(2) 手动验正:rpm -K PACKAGE_FILE

(6)数据库重建:
rpm管理器数据库路径:/var/lib/rpm/
查询操作:通过此处的数据库进行;

获取帮助:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
 --initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作;
 --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;
  • yum的配置和使用总结以及yum私有仓库的创建。
    (1) yum是rpm的前端工具,可以解决软件包的依赖问题。yum的配置文件分两个部分:一个是 /etc/yum.conf 配置文件为所有仓库提供公共配置,一个是 /etc/yum.repos.d/*.repo 仓库配置文件。yum的日志文件保存在 /etc/log/yum.log 文件中。
    yum命令的用法:
    yum [options] [command] [package ...]
    显示仓库列表:
    repolist [all|enabled|disabled]
    显示程序包:
    yum list [all | glob_exp1] [glob_exp2] [...]
    yum list {available|installed|updates} [glob_exp1] [...]
    安装程序包:
    install package1 [package2] [...]
    reinstall package1 [package2] [...]  (重新安装)
    升级程序包:
    update [package1] [package2] [...]
    downgrade package1 [package2] [...] (降级)
    检查可用升级:
    check-update
    卸载程序包:
    remove | erase package1 [package2] [...]
    查看程序包information:
    info [...]
    查看指定的特性(可以是某文件)是由哪个程序包所提供:
    provides | whatprovides feature1 [feature2] [...]
    清理本地缓存:
    clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    构建缓存:
    makecache
    搜索:
    search string1 [string2] [...]
    以指定的关键字搜索程序包名及summary信息;
    查看指定包所依赖的capabilities:
    deplist package1 [package2] [...]
    查看yum事务历史:
    history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    安装及升级本地程序包:
    localinstall rpmfile1 [rpmfile2] [...]
    (maintained for legacy reasons only - use install)
      localupdate rpmfile1 [rpmfile2] [...]
    (maintained for legacy reasons only - use update) 
    包组管理的相关命令:
    groupinstall group1 [group2] [...]
    groupupdate group1 [group2] [...]
    grouplist [hidden] [groupwildcard] [...]
    groupremove group1 [group2] [...]
    groupinfo group1 [...]

(2)yum私有仓库的创建

[root@localhost yum.repos.d]# vim epel.repo 
[epel]
 name=Fedora EPEL
 baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
 gpgcheck=0
  • 写一个脚本实现列出以下菜单给用户:
    (1)disk:show disk info信息
    (2)mem: show memory info信息
    (3)cpu: show cpu info信息
    (*)quit
    /bin/bash
    cat <<EOF
    disk)show disks info
    mem)show mem info
    cpu)show cpu info
    *)QUIT
    EOF
    read -p "Your choice": option
    if [[ "${option}" == "disk" ]];then
    fdisk -l /dev/[sh]d[a-z]
    elif [[ "${option}" == "mem" ]];then
    free -m
    elif [[ "${option}" == "cpu" ]];then
    lscpu
    else
    echo "Unkown option"
    exit 3
    fi
  • sed用法总结并结合实例演示
    1.用法:
    sed [OPTION]... 'script' [input-file] ...
    script:
    地址定界编辑命令
    常用选项:
    -n:不输出模式空间中的内容至屏幕;
    -e script, --expression=script:多点编辑;
    -f  /PATH/TO/SED_SCRIPT_FILE
    每行一个编辑命令;
    -r, --regexp-extended:支持使用扩展正则表达式;
    -i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;
    地址定界:
    (1) 空地址:对全文进行处理;
    (2) 单地址:
    #:指定行;
    /pattern/:被此模式所匹配到的每一行;
    (3) 地址范围
    #,#:
    #,+#:
    #,/pat1/
    /pat1/,/pat2/
    $:最后一行;
    (4) 步进:~
    1~2:所有奇数行
    2~2:所有偶数行
    编辑命令:
    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:显示替换成功的行;
    高级编辑命令:
    h:把模式空间中的内容覆盖至保持空间中;
    H:把模式空间中的内容追加至保持空间中;
    g:把保持空间中的内容覆盖至模式空间中;
    G:把保持空间中的内容追加至模式空间中;
    x:把模式空间中的内容与保持空间中的内容互换;
    n:覆盖读取匹配到的行的下一行至模式空间中;
    N:追加读取匹配到的行的下一行至模式空间中;
    d:删除模式空间中的行;
    D:删除多行模式空间中的所有行;

    2.结合实例演示:
    (1)打印 /etc/passwd 文件的第三行,原文件所有行也将打印:
    sed ‘3p’ /etc/passwd
    (2)只打印 /etc/passwd 文件的第三行
    sed -n ‘3p’ /etc/passwd
    (3)只打印 /etc/passwd 文件的第一行到第四行
    sed -n '1,4p' /etc/passwd
    (4)只打印 /etc/passwd 文件中包行root字符的所有行
    sed -n '/root/p' /etc/passwd
    (5)第一行打印行号,第二行打印行内容,循环打印所有匹配到的行
    sed -n -e '/root/p' -e '/root/=' /etc/passwd
    (6)在匹配行的下一行添加superman,并换行添加over。支持添加多行内容。
    sed ‘/root/a\superman\nover’ /etc/passwd
    (7)在匹配行的上一行添加superman,并换行添加over。支持添加多行内容。
    sed ‘/root/i\superman\nover’ /etc/passwd
    (8)在匹配行的行替换为superman和over新行。支持替换为多行内容。
    sed ‘/root/c\superman\nover’ /etc/passwd
    (9)删除file中的空行并打印
    sed ‘/^$/d’ file
    (10)将root替换为rootsuperman字符串,其中&代表是每一个匹配的结果,如一行中有多个字符串匹配则只选取第一个匹配结果
    sed -n 's/root/&superman/p' /etc/passwd
    (11)删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符
    sed 's@^#[[:space:]]*@@' /etc/fstab

  • 用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序
    (1) awk '$9&gt;400{print $1}' /var/log/httpd/access_log | sort -n | uniq -c
    (2)sed -nr 's@^(.*)- -.*" ([0-9]{3}).*@\1,\2@p' /var/log/httpd/access_log | grep '.* ,[4|5].*' | sort -nr | uniq -c
  • 使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包
     [root@httpd-server yum.repos.d]# vim epel.repo 
      [epel]
      name=Fedora EPEL
      baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
      gpgcheck=0

    yum install -y ftp openssh curl wget tcpdum &&gt; /dev/null

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章