1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz"
crontab -e
0 */12 * * * tar -zcf /backup/etc-`date +\%F-\%H-\%M`.tar.gz
2、rpm包管理功能总结以及实例应用演示。
概述:
系统级开发:(直接调用硬件资源)
C/C++:httpd,vsftpd,nginx
go
应用级开发:
java/python/perl/ruby/php:
java:hadoop,hbase,(运行java程序依赖于jvm虚拟机)
python:OpenStack,(pvm)
perl:(perl解释器)
ruby:(ruby解释器)
php:(php解释器)
C/C++程序格式:
源代码:文本格式的程序代码
编译开发环境:编译器、头文件、开发库
二进制格式:文本格式的程序代码 --> 编译器 --> 二进制格式(二进制程序、库文件、配置文件、帮助文件)
java/python程序格式:
源代码:编译成能够在其虚拟机(jvm.pvm)运行的格式
开发环境:编译器、开发库
二进制:
项目建构工具:
c/c++:make
java:maven
程序包管理器:
源代码 --> 目标二进制格式 --> 组织成为一个或有限的几个“包”文件(二进制程序、库文件)
安装、升级、卸载、查询、校验
程序包管理器:
Debian:dpt,dpkg,“.deb”
Redhat:Redhat package manager(红包管理工具),rpm,“.rpm”;rpm is package manager
S.U.S.E:rpm,“.rpm”
Gentoo:ports
ArchLinux:
源代码:name-VERSION.tar.gz
VERSION:major,minor.release
rpm包命名格式:
name-VERSION-release.arch.rpm
VERSION:major.miinor.release
release.arch:rpm包的发行号
release.os:2.el7.i386.rpm
archetecture:i386,x64(amd64),ppc,noarch
redis-3.0.2.targz --> redis-3.0.2-1.centos7.x64.rpm
拆包:主包和支包
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm
function:devel,utils,libs
依赖关系:
x,y,z
x --> y,z
y --> A,B,C
C --> y
前端工具:自动解决依赖关系
yum:Redhat系列系统上rpm包管理器的前端工具
apt-get:debian包管理器的前端工具
zypper:suse的rpm管理器前端工具
dnf:Fedora 22+系统上rpm包管理器的前端工具
程序包管理器:
功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便的实现程序包的安装、升级、卸载和查询等管理操作
1、程序包的组成清单(每个程序包都单独实现)
文件清单
安装或卸载时运行的脚本
2、数据库(公共)
程序包的名称和版本
依赖关系
功能说明
安装生成的各文件的文件路径及校验码信息
等等等
rpm的数据库的存放路径:/var/lib/rpm/目录下
获取程序包(rpm)的途径:
(1)系统发行版的光盘或官方的文件服务器(或镜像站点)
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2)项目的官方站点
(3)第三方组织:
(a)EPEL
(b)搜索引擎
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
(4)自己动手,丰衣足食
建议:检查包合法性
来源合法性
程序包完整性
CentOS系统上rpm命令管理程序包:
使用rpm命令管理程序包,主要包括安装、升级、卸载、查询和校验、数据库维护这几个功能
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安装:-i,--install
升级:-U,--update,-F,--freshen
卸载:-e,--erase
查询:-q,--query
校验:-V,--verify
数据库维护:--builddb,--initdb
安装:
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:重新安装
--nosignature:不检查包名信息,不检查来源合法性
--nodigest:不检查包完整性信息
--noscripts:不运行所有安装脚本
注意:rpm可以自带脚本,这些脚本可以分为四类
四类:--noscripts
preinstall:安装过程开始之前运行的脚本,--nopre:不运行
postinstall:安装过程完成之后运行的脚本,--nopost:不运行
preuninstall:卸载过程开始执行之前运行的脚本,--noperun:不运行
postuninstall:卸载过程完成之后运行的脚本,--nopostun:不运行
升级:
rpm { -U | --upgrade } [install-options] PACKAGE_FILE ...
rpm { -F | fershen } [install-options] PACKAGE_FILE ...
-U:升级或安装
-F:升级
常用的升级命令:
rpm -Uvh PACKAGE_FILE...
rpm -Fvh PACKAGE_FILE ...
升级选项:
--oldpackage:降级
--force:强制升级
注意:
(1)不要对内核做升级操作;Linux支持多内核版本并存,因此,应该直接安装新版本内核。
(2)如果某原版本程序包的配置文件安装后被修改过,那么升级时,rpm程序包管理器会认为这个修改是有用的,新版本提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpm
new)后提供
卸载:
rpm { -e | --erase } [--allmatches] [--justdb] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME
选项:
--allmatches:卸载所有匹配指定名称的程序包的各个版本
--nodeps:忽略依赖关系
--test:测试卸载,dry run模式
查询:
rpm { -q | query} [select-options] [query-options]
[SELECT-OPTIONS]:
PACKAGE_NAME:查询指定的程序包是否已经安装及其版本
-a,--all:查询所有已经安装过的包
-f FILE:查询指定的文件由哪个程序包生成的
-p PCKAGE_FILE:用于实现对未安装的程序包执行查询操作
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供
--whatrequires CAPABILITY:查询指定的CAPAILITY被哪个包所依赖
QUERY-OPTIONS:
--changelog:查询rpm包的changelog
-l:程序安装生成的所有文件列表
-i:程序包相关的信息,版本号,大小,所属的包组等
-c:查询指定的程序包提供的配置文件
-d:查询指定的程序包的提供的文档
--provides:列出指定的程序包提供的所有的CAPABILIT
-R:查阅指定的程序包的依赖关系
--scripts:查看程序包自带的脚本片段
校验:
rpm程序包的来源合法性验证和完整性验证的实现过程
获取并导入信任的包制作的密钥:
对于CentSO发行版来说,可使用:rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-x
验证方式:
(1)安装此组织签名的程序时,会自动执行验证
(2)手动验证:rpm -K PACKAGE_FILE
数据库维护(数据库重建)
rpm管理器数据库路径:/var/lib/rpm/
查询操作:通过此处的数据库进行
获取帮助:
CentOS 7:man rpmdb
CentOS 6:man rpm
rpm { --initdb | --rebuilddb }
--initdb:初始化数据库,当前无任何数据库时可初始化创建一个新的,当前有时不执行任何操作
--rebuilddb:重新构建,通过读取当前系统上的所有已经安装过的程序包进行重新创建
3、yum的配置和使用总结以及yum私有仓库的创建。
yum是一个shell前段软件包管理器,基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需繁琐的一次次下载、安装。
yum基本用法
1、安装
yum install PACKAGE1安装指定的PACKAGE1
yum groupinstall GROUP1安装指定的程序包组GROUP1
2、更新和升级
yum update #全部更新
yum update PACKAGE1 #更新指定程序包PACKAGE1
yum check-update #检查可更新的程序
yum upgreade PACKAGE1 #升级指定程序包PACKAGE1
yum groupupdate GROUP1 #升级程序包组GROUP1
3、查找和显示
yum info PACKAGE1 #显示安装包信息PACKAGE1
yum list #列出所有已经安装和可以安装的程序包
yum list PACKAGE1 #显示指定程序包安装情况PACKAGE1
yum groupinfo GROUP1 #显示程序包组GROUP1信息yum search string 根据关键字 string查找安装包
4、删除程序
yum remove PACKAGE1 #删除程序包PACKAGE1
yum groupremove GROUP1 #删除程序包组GROUP1
yum deplist PACKAGE1 #查询程序PACKAGE1依赖情况
5、清除缓存
yum clean PACKAGES #清除缓存目录下的软件包
yum clean headers #清除缓存目录下的headers
yum clean oldheaders #清除缓存目录下旧的headers
yum clean all #清除缓存目录下的所有软件包及旧的headers
构建缓存:yum makecache
搜索:yum search string1 #以关键字搜索程序及summary信息
yum的命令选项:
--nogpgcheck:禁止进行 gpg check
-y:自动回答为“yes”
-q:静默模式
yum的repo配置文件中可用的变量:
$releasever:当前OS的发行版的主版本号;centos 7.5 , 7为主版本号
$arch:平台(架构)i386 i486 i 586 x64
$basearch:基础平台;全部识别为i386
$YUM0-$YUM9
如何使用光盘当作本地yum仓库:
(1)挂载光盘至某目录,例如/media/cdrom
# mount -r -t iso9660 /dev/cdrom /media/cdrom
(2)创建配置文件
[Centos7]
name=
baseurl
gpgcheck=
enabled=
4、写一个脚本实现列出以下菜单给用户:
(1)disk:show disk info信息
(2)mem: show memory info信息
(3)cpu: show cpu info信息
(*)quit
5、sed用法总结并结合实例演示
sed命令:
模式空间、保持空间
sed [OPTION]... `scrip` [input-file]...
scrip(脚本):
地址定界、编辑命令
常用选项:
-n:不输出模式空间中的内容至屏幕
-e script:实现多点编辑(能同时指定多个编辑命令)
-f /PATH/TO/SED_SCRIPT_FILE
每一行一个编辑命令
-r:支持使用扩展正则表达式
-i [SUFFIX]:直接编辑原文件
地址定界:
(1)空地址(不给地址):对全文进行处理
(2)单地址:
#:指定行
/PATTERN/:被此模式所匹配到的每一行
(3)地址范围
#,#:多少行到多少
(4)编辑命令
d:删除
p:显示模式空间中的内容
a \text:在行后面追加文本“text”,支持使用\n实现多行追加
i \text:在行前面插入文本"text",支持使用\n实现多行插入
c \text:把匹配到的行替换为此处指定的文本“text”
w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中
r /PATH/FORM/SOMEIFLE::读取指定文件的内容至当前文件被模式匹配到的行的下一行,文件合并
=:为模式匹配到的行打印行号
!:条件取反
地址定界!编辑命令
s///:查找替换,其分隔符可自行指定,常用的有s@@@,s###等
替换标记:
g:全局替换
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中
p:显示替换成功的行
高级编辑命令:
h:把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g:把保持空间中的内容覆盖至模式空间中
G:把保持空间中的内容追加至模式空间中
x:把模式空间的内容与保持空间的内容互换
n:读取匹配到的行的下一行至模式空间中(将会覆盖模式空间的内容)
N:读取匹配到的行的下一行至模式空间中(追加至模式空间中)
d:删除模式空间中的行
D:删除多行模式空间中的所有行
6、 用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序
sed -n -r '/\<4[0-9][0-9]\>/p' /var/log/httpd/access_log | cut -d" " -f1 | sort | uniq -c
网友评论