千家信息网

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

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,周期性任务计划,包管理,sed以及shell编程基础1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz"[root@local
千家信息网最后更新 2024年11月22日周期性任务计划,包管理,sed以及shell编程基础

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

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

[root@localhost /]# crontab  -e0 */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可以自带脚本;四类:--noscriptspreinstall:安装过程开始之前运行的脚本,%pre , --noprepostinstall:安装过程完成之后运行的脚本,%post , --nopostpreuninstall:卸载过程真正开始执行之前运行的脚本,%preun, --nopreunpostuninstall:卸载过程完成之后运行的脚本,%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 differsM Mode differs (includes permissions and file type)5 digest (formerly MD5 sum) differsD Device major/minor number mismatchL readLink(2) path mismatchU User ownership differsG Group ownership differsT mTime differsP 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 rpmCentOS 7:man rpmdbrpm {--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/bashcat <
  • 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>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 &> /dev/null

0