周期性任务计划,包管理,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>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 &> /dev/null
原文地址:https://blog.51cto.com/14418331/2436541