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

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

1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz"
[[email protected] /]# 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私有仓库的创建

[[email protected] 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///:查找替换,其分隔符可自行指定,常用的有[email protected]@@, 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 ‘[email protected]^#[[: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 ‘[email protected]^(.*)- -.*" ([0-9]{3}).*@\1,\[email protected]‘ /var/log/httpd/access_log | grep ‘.* ,[4|5].*‘ | sort -nr | uniq -c
  • 使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包
     [[email protected] 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

原文地址:https://blog.51cto.com/14418331/2436541

时间: 2024-10-07 01:16:53

周期性任务计划,包管理,sed以及shell编程基础的相关文章

Linux学习之二十一-shell编程基础

Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务.Shell 脚本(shell script),是一种为 shell 编写的脚本程序 Shell 编程跟 java.php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了 Linux中的shell种类(shell解释器的种类

shell编程基础一(多种方法求值1+2+..+100)

#SHELL编程基础一(多种方法求值1+2+..+100)##为什么要学好shell shell脚本语言是实现linux系统管理及自动化运维所必备的重要工具,linux系统的底层及基础应用软件的核心大都涉及shell脚本的内容. 每一个合格的linux系统管理员或运维工程师,都需要能够熟练地编写shell脚本语言,并能够阅读系统及各类软件附带的shell脚本内容. 只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的工作,从而为个人的职场发展奠定较好的基础.# 本文的宗旨是熟

第十天:shell编程基础与编写Makefile

一:shell编程基础 shell定义:shell是一个作为用户与linux系统间接口的程序.它允许用户向操作系统输入需要执行的命令.shell有很多中,linux系统中shell为bash. shell编程可以看作是一堆命令的集合.和windows中的bat程序类似的脚本程序.为解释性语言. 第一个shell程序是判断两个数字的大小. 1 #!/bin/bash 2 3 num1=10 4 num2=9 5 6 if test $num1 -gt $num2 7 then 8 echo $nu

linux基础学习-17-linux操作系统之Shell编程基础讲解

1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚本的内容.每一个合格的Linux系统管理员或运维工程师,都需要熟练的编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容.只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础. 1.2 学好Shell编程所需的基础知识

Linux Shell编程基础

在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls   显示当前路径下的文件,常用的有 -l 显示长格式  -a 显示所有包括隐藏  -R 显示文件夹内的内容  -c 按照最后一次修改时间排序  -t 按照修改时间排序输出 echo 显示  -n 不换行 touch  创建一个文件,或者修改文件的访问时间和修改时间 touch -a file 只更改访问时间 -m之更改修改实际那 -t指定特定时间 cp  复制文件 -a 保

Linux学习之Shell编程基础

转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.  当编辑好脚本时,如果要执行该脚本,还必须使其可执行.  要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.2 注释  在进行shell编程时,以#开头的

Shell 编程基础(一)

Shell脚本的关键在于输入多个命令并处理每个命令的结果,甚至需要将一个命令的结果传给另一个命令.Shell可以让你将多个命令串起来,一次执行完成. 基本格式: 第一行必须为固定格式,指明脚本使用哪种shell来运行脚本,通常shell脚本中会以 # 作为注释,注释号后面的内容不会参与脚本的运行,但是,第一行是个例外. 变量命名法则: 1.不能使程序中的保留字:例如if, for 2.只能使用数字.字母及下划线,且不能以数字开头,不能使用 - (减号) 正确:_abc123 ;  abc123

shell编程基础必知

shell编程 ################################################ 静态语言 动态语言 ################################################ 编程语言:机器语言,汇编语言,高级语言 ################################################ 面向对象的编程语言:sehll c 面向对象的编程语言:JAVA Python perl c++ ################

shell编程基础

for c in a b c d e f g;do echo $c; done 按顺序输出 for c in a b c d e f g;do tar czvf install.log.$c.tar.gz install.log ; done for c in {a..g}; do echo $c; done 和上面的一样 seq 1 10 列数字的 for i in {1..10}; do echo $i; done 字符串变量实例str='I love linux. I love unix