- 1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,“etc-年-月-日-时-分.tar.gz”、
- 2、rpm包管理功能总结以及实例应用演示
- 3、yum的配置和使用总结以及yum私有仓库的创建
- 4、写一个脚本实现列出以下菜单给用户:
(1)disk:show disk info信息
(2)mem: show memory info信息
(3)cpu: show cpu info信息
(*)quit - 5、sed用法总结并结合实例演示
- 6、 用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序
- 7、 使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包
每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,“etc-年-月-日-时-分.tar.gz”
[root@localhost backup]# tar -czv -f /backup/etc-"$(date +%F-%H-%M)".tar.gz /etc #测试基本命令是否可以正确运行
[root@localhost backup]# crontab -e #编辑循环任务
0 */12 * * * tar -czv -f /backup/etc-"$(date ++%F-%H-%M)".tar.gz /etc
rpm包管理功能总结以及实例应用演示
二进制应用程序的组成部分:
二进制文件、库文件、配置文件、帮助文件
程序包管理器:
debian:deb文件,dpkg包管理器
redhat:rpm文件,rpm包管理器
rpm:Redhat Package Manager
RPM Package Manager
UEFI(统一扩展固件接口)硬件支持GPT,使操作系统启动
软件运行和编译:
ABI:Application Binary Interface
WINDOWS和Linux不兼容
ELF
PE
库级别的虚拟化:
Linux:WINE
Windows:Cygwin
API:Application Prigramming Interface
POSIX:Portable OS
程序源代码–>预处理–>编译–>链接
静态编译:.a
动态编译:。so
包命名:
源代码:name-VERSION.tar.gz|bz2|xz
VERSION:major.minor.release
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86)64.rpm
VERSION:major.minor.release
release:release.OS
常见的arch:
x86:i386,i486,i586,i686
x86_64:x86_64,amd64
powerpc:ppc
跟平台无关:noarch
包:分类和拆包
Application-VERSION-ARCH.rpm:主包
Application-devel-VERSION-ARCH.rpm:开发子包
Application-utils-VERSION-ARCH.rpm:其他子包
Application-libs-VERSION-ARCH.rpm:其他子包
包之间:可能存在依赖关系,甚至循环依赖
解决依赖包管理工具
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 18+ rpm 包管理器前端管理工具
包管理器:
程序包管理器:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作。
包文件组成(每个包独有)
RPM包内的文件
RPM的元数据,如名称,版本,依赖性,描述等。
安装或卸载时运行的脚本
数据库(公共):/var/lib/rpm
程序包名称及版本
依赖关系
功能说明
包安装后生产的各文件路径及校验码信息
程序包的来源:
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum,dnf
获取程序包的途径:
(1)系统发版的光盘或官方的服务器:
centos镜像:
https://www.centos.org/download/
(2)项目官方站点
(3)第三方组织:
Fedora-EPEL:http://pkgs.org
(4)自己制作:第三方的建议检查包的合法性
rpm包管理:
centos系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
安装:
rpm{-i|–install}[install-options]PACKAGE_FILE…
-v:verbose
-vv:
-h:以#显示程序包管理执行进度
rpm -ivh PACKAGE_FILE…
[install-options]:
--test:测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs|replacefiles
--nosignature:不检查来源合法性
--noscripts:不执行程序包脚本
%pre:安装前脚本;–nopre
%post:安装后脚本;–nopost
%pre:安装前脚本;–nopreun
%pre:安装前脚本;–nopostun
rpm包升级:
升级:
rpm{-U|–upgrade}[install -options] PACKAGE FILE…
rpm{-F|–freshen}[install -options] PACKAGE FILE…
upgrade:安装有旧版程序包,则"升级"(如果不存在旧版程序包,则"安装"
fresh:安装有旧版程序包,则"升级"(如果不存在旧版程序包,则不知想升级操作
rpm -Uvh PACKAGE_FILE…
rpm -Fch PACKAGE_FILE…
--oldpackage:降级
--force:强制安装
注意:
(1)不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核
(2)如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
包查询:
rpm{-q|–query}[select-options]【query-options】
[select-options]
-a:所有包
-f:查看指定的文件由哪个程序包安装生成
-p rpmfile:针对未安装的程序包文件做查询操作
--whatprovides CAPABILIITY:查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILIITY:查询指定的CAPABILITY由哪个包所依赖
rpm2cpio 包文件|cpio -itv 预览包内文件
rpm2cpio 包文件|cpio -id ”*.conf“ 释放包内文件
[query-options]
--changelog:查询rpm包的changelog
-c:查询程序的配置文件
-d:查询程序的文档
-i:information
-l:查看指定的程序包安装后生成的所有文件
--scripts:程序包自带的脚本
--provides:列出指定程序包所提供的CAPABILITY
-R:查询指定的程序包所依赖的CAPABILITY
常用查询用法:
-qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE,-qpl PACKAGE_FILE,…
-qa
包卸载:
rpm{-e|–erase}[–allmatches]【–nodeps】【–noscripts】【–notriggers】【–test】PACKAGE_NAME…
包校验:
包来源合法性验证及完整性验证
完整性验证:SHA256
来源合法性验证:RSA
公钥加密
对称加密:加密、解密使用同一密钥
emsp; 非对称加密:密钥是成对儿
public key:公钥,公开所有人
secret key:私钥,不能公开
导入 所需要公钥
rpm -k|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7 发行版光盘提供:RPM-GPG-KEY-Centos-7
rpm -qa “gpg-pubkey”
rpm数据库:
数据库重建:
/var/lib/rpm
rom{–initdb|–rebuilddb}
initdb:初始化
如果事先不存在数据库,则新建之
否则,不执行任何操作
rebuildb:重建已安装的包头的数据库索引目录
yum的配置和使用总结以及yum私有仓库的创建
写一个脚本实现列出以下菜单给用户:
(1)disk:show disk info信息
(2)mem: show memory info信息
(3)cpu: show cpu info信息
(*)quit
#!/bin/bash
ch="plese choose the menu(1-4):"
select menu in disk mem cpu quit;do
case $menu in
disk)
df -h
break
;;
mem)
free -h
break
;;
cpu)
lscpu
break
;;
quit)
killall select.sh
break
;;
*)
echo error
;;
esac
done
sed用法总结并结合实例演示
处理文本的工具sed
Stream EDitor,行编辑器
sed是一种流编辑器 ,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如’D’的特殊命令,那会在两个循环之间情况模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
功能主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
参考http://www.gnu.org/software/sed/manual/sed.html
sed工具
sed[option]…‘scrept’ 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/somefile:保存模式匹配的行至指定文件
r/path/somefile:读取指定文件的文本至模式空间中匹配到的行后
=:为模式空间中的行打印行号
!:模式空间中匹配行取反处理
**sed///:**查找替换,支持使用其他分隔符,s@@@,s###
替换标记:
g:行内全局替换
p:显示替换成功的行
w/path/to/somefile:将替换成功的行保存至文件中
/etc/default/grub这个文件可以影响网卡命名,方便批量管理机器
要实现不同系统网卡名一样,所以在这后面加 字符
高级编辑命令:
P:\n回车 换行 如果模式空间有几行,只打印第一行,如果是小p就全部打印
h:模式空间读出来覆盖保持空间
H:模式空间读出来追加保持空间
g:从保持空间去除内容覆盖至模式空间
G:保持模式内容追加至模式空间
x:把模式空间中的内容与保持空间中的内容进行互换
n:读取匹配行的下一行覆盖模式空间第一行
N:第一行第二行都在模式空间/ 读取匹配行的下一行追加模式空间
d:删除模式空间的行
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会发出d命令那样启动正常的新循环
如果有好几行会删除第一行,并且不会读新的下一行
sed示例:
sed ‘2p’ /etc/passwd_____显示第二行,默认全部打印,第二行打印2遍
sed -n ‘2p’ /etc/passwd 只打印第二号
sed -n ‘1,4p’ /etc/passwd 只打印1~4行
sed -n ‘/root/p’ /etc/passwd _____打印包含root行
sed -n '2,/root/p /etc/passwd _____打印第2行到包含root的行
sed -n ‘/^KaTeX parse error: Expected group after '_' at position 6: /=' _̲____ file 空行显示行…/p’ -e ‘/^$/=’ _____空行显示行号并且把行业打印出来
sed ‘/root/a\superman’ etc/passwd行后 _____在包含root行后面追加supermanZ字符串
sed ‘/root/i\superman’ etc/passwd 行前 _____在包含root行前面加superman
sed ‘/root/c\superman’ etc/passwd 代替行 _____在包含root行替代superman
nl /etc/passwd | sed '2a tea '_____在第二行追加 tea
用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序
#!/bin/bash
read -p "please input ipcount >= " ip
awk '{print $1}' /var/log/httpd/access_log20190 | sort |uniq -c |sort -n|awk '$1>=$ip {print $1,$2}'
使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包
[root@localhost scripts]# yum install -y ftp --enablerepo=Local Yum
[root@localhost scripts]# yum install -y openssh --enablerepo=Local Yum
[root@localhost scripts]# yum install -y wget --enablerepo=Local Yum
[root@localhost scripts]# yum install -y tcpdump --enablerepo=Local Yum