linux程序包管理(rpm、yum)以及sed的用法

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

测试脚本运行
[root@bogon ~]# bash -x file2.sh
++ date +%Y-%m-%d-%k
+ tar -JPcf /tmp/backups/2019-03-18-23.tar.gz /etc
#每天的12点和0点备份一次
[root@bogon ~]# crontab -l
0 */12 * * * /bin/bash /root/file2.sh

2、rpm包管理功能总结以及实例应用演示。
对于linux而言,安装程序不像windows一样双击即可安装。它分为源码包(需要自行编译安装)系统安装包(RPM包,系统默认包)。 以下说明:
源码包:
顾名思义由程序员直接写好的未经编译的程序代码。
优点:
1、足够开源,有能力的话你可以在源码上任意添加你的需求
2、由于未经编译,所以编译安装时会更贴近你的操作系统,更加稳定
3、可以自定义安装路径、以及需要安装的特性等等。
缺点:
1、安装麻烦,编译安装需要花费很多时间
2、配置环境如果有问题的话,也会出现安装错误
系统安装包:
由系统直接提供的已经编译好的二进制程序包。
优点:
1、由于是编译好的二进制文件,所以安装方便快捷。
2、通过rpm命令即可实现安装、升级、卸载
缺点:
1、各个包之间存在依赖性,如果想安装某一个程序包时,需要安装有依赖关系的程序包
说一下rpm的各个命令

RPM包的命名格式:
例如:zsh-5.0.2-31.el7.x86_64.rpm

zsh程序包名称
5主版本号
0.2次版本号
31第几次制作
el7适用平台
X86_6464位

rpm命令格式:
rpm 【OPTIONS】 【PACKAGE_FILE】

OPTIONS:

-i安装程序
-v显示详细信息
-e卸载程序
-U升级程序
-q查询程序的信息
-V校验
–build , --initdb数据库维护

rpm安装程序子命令
rpm {-i|–install} [install-options] PACKAGE_FILE ….

install-options:选项
-v显示详细信息
-vv显示更详细的信息
-h输出进度条,用#号表示,每个#是2%
–nodeps忽略依赖关系,不建议使用
-replacepkgs重新安装,删除以前安装的程序,在安装

例如:

[root@bogon ~]# rpm -ivh zsh-5.0.2-31.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:zsh-5.0.2-31.el7                 ################################# [100%]


#安装软件包时出现依赖关系的包无法安装,可以使用--nodeps,但是即便安装好也无法使用
[root@bogon ~]# rpm -ivh ImageMagick-devel-6.7.8.9-15.el7_2.i686.rpm 
错误:依赖检测失败:
	ImageMagick = 6.7.8.9-15.el7_2 被 ImageMagick-devel-6.7.8.9-15.el7_2.i686 需要
	bzip2-devel 被 ImageMagick-devel-6.7.8.9-15.el7_2.i686 需要
	freetype-devel 被 ImageMagick-devel-6.7.8.9-15.el7_2.i686 需要
	ghostscript-devel 被 ImageMagick-devel-6.7.8.9-15.el7_2.i686 需要

rpm升级安装子命令:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …

-U升级安装程序,没有老程序包时也会自动安装

rpm {-F|–freshen} [install-options] PACKAGE_FILE …

-F升级安装程序,没有老程序包不会安装

例如:

#安装更新软件包
[root@bogon ~]# rpm -qf /bin/tcsh
tcsh-6.18.01-8.el7.x86_64         #更新前的版本
[root@bogon ~]# rpm -Fvh tcsh-6.18.01-15.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:tcsh-6.18.01-15.el7              ################################# [ 50%]
正在清理/删除...
   2:tcsh-6.18.01-8.el7               ################################# [100%]
[root@bogon ~]# rpm -qf /bin/tcsh
tcsh-6.18.01-15.el7.x86_64        #更新后的版本


rpm卸载子命令:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts][–test] PACKAGE_NAME …

–allmatches卸载所有匹配指定名称的程序包的版本
–nodeps卸载时不考虑依赖关系
–test仅测试卸载,不真正卸载
[root@bogon ~]# rpm -evh --test zsh
准备中...                          ################################# [100%]
[root@bogon ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
/bin/zsh

rpm查询子命令!!!!非常重要!!!!
rpm {-q|–query} [select-options] [query-options]

select-options选项
-a查询所有已安装过的程序包
-f查询文件是由哪个程序包安装生成
-p , --package PACKAGE_FILE查询未安装程序的信息
–whatprovides CAPABILITY根据指定包的特性查询是由哪个包生成
–whatequires CAPABILITY指定包的特性来查询被哪个包所依赖

例如:

[root@bogon ~]# rpm -qf /bin/zsh
zsh-5.0.2-31.el7.x86_64

#-qp
[root@bogon ~]# rpm -qp zsh-5.0.2-31.el7.x86_64.rpm 
zsh-5.0.2-31.el7.x86_64


query-options选项
–changelog查询已安装程序包的日志
-l,–list查询程序安装后的文件列表
-i,–info查询程序包安装后的版本号,大小,等等
-d,–docfiles查询程序安装的文档
-c,–configfiles查询指定程序包提供的文档
-R,–requires查询指定程序的依赖的关系
–provides查询指定程序的所有CAPABILITY
–scripts查询指定程序的运行脚本

示例:

[root@bogon ~]# rpm -q --changelog zsh
* 五 5月 04 2018 Kamil Dudka <kdudka@redhat.com> - 5.0.2-31
- fix defects detected by Coverity related to CVE-2017-18206 and CVE-2018-1083

* 四 5月 03 2018 Kamil Dudka <kdudka@redhat.com> - 5.0.2-30
- fix stack-based buffer overflow in utils.c:checkmailpath() (CVE-2018-1100)
- fix stack-based buffer overflow in gen_matches_files() (CVE-2018-1083)
- fix stack-based buffer overflow in exec.c:hashcmd() (CVE-2018-1071)
- avoid crash when copying empty hash table (CVE-2018-7549)
- fix buffer overrun in xsymlinks (CVE-2017-18206)
- fix NULL dereference in cd (CVE-2017-18205)
.....

[root@bogon ~]# rpm -qi zsh
Name        : zsh
Version     : 5.0.2
Release     : 31.el7
Architecture: x86_64
Install Date: 2019年03月18日 星期一 13时16分58秒
Group       : System Environment/Shells
Size        : 5854390
License     : MIT
Signature   : RSA/SHA256, 2018年11月12日 星期一 22时49分55秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : zsh-5.0.2-31.el7.src.rpm
Build Date  : 2018年10月31日 星期三 00时48分17秒
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://zsh.sourceforge.net/
Summary     : Powerful interactive shell
Description :
The zsh shell is a command interpreter usable as an interactive login
shell and as a shell script command processor.  Zsh resembles the ksh
shell (the Korn shell), but includes many enhancements.  Zsh supports
command line editing, built-in spelling correction, programmable
command completion, shell functions (with autoloading), a history
mechanism, and more.

[root@bogon ~]# rpm -ql zsh
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
/usr/lib64/zsh
/usr/lib64/zsh/5.0.2
....

[root@bogon ~]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc


[root@bogon ~]# rpm -qd zsh
/usr/share/doc/zsh-5.0.2/BUGS
/usr/share/doc/zsh-5.0.2/CONTRIBUTORS
/usr/share/doc/zsh-5.0.2/FAQ
.....

校验:
rpm {-V|–verify} [select-options] [verify-options]

当对某个程序的某一个文件进行修改时,校验程序时会出现提示。示例:

[root@bogon ~]# vim /usr/share/zsh/5.0.2/functions/zfcd     #对程序的某个文件进行修改
[root@bogon ~]# rpm -V zsh
S.5....T.    /usr/share/zsh/5.0.2/functions/zfcd

S.5…T.字段解释
S文件大小
M权限
5md5加密算法
D主次设备号不匹配
L符号链接不匹配
U属主修改
G属组修改
T时间戳修改
P某些特性被修改

最后:
rpm包在安装时要去验证包来源的合法性以及完整性,已Centos7为例,密钥的位置放在/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7。使用rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 即可。

3、yum的配置和使用总结以及yum私有仓库的创建。
yum是rpm包的前端程序,它有效的解决了各个rpm包之间的依赖关系。
它的工作模式简单来说:
1、通过配置文件来确定访问仓库是本地或者互联网
2、访问仓库查询并复制一份儿rpm包到本地缓存下来。
3、对rpm包进行分析是否存在依赖包并查询自身需要的rpm包
4、安装rpm包
注意:当对rpm包进行分析时,yum只是提取了rpm包以及依赖包的元数据地址,并对其排列。安装时首先安装的是各个依赖关系的包。

yum仓库的配置文件:

/etc/yum/yum.conf为所有仓库提供公共配置
/etc/yum.repos.d/*.repo为仓库的指向提供配置

yum仓库的服务器地址类型:

ftp://  http://  file:///(本地协议)

yum仓库的定义:
**yum的repo(仓库)配置文件中可用的变量:
$releasever:当前os的发行版的主版本号
$arch:平台
$basearch:基础平台

  示例:
  1 [base]       #  repo_id  ,注意:base只能有一个,多个无效
  2 name=Centos7-OS     #仓库名字
  3 baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/   #仓库指向的访问地址,此处就是使用的变量
  4         http://mirrors.163.com/centos/$releasever/os/$basharch/
  5         http://mirrors.ustc.edu.cn/centos/$releasever/os/$basharch/
  6 gpgcheck=1        #执行校验
  7 enabled=1         #执行此仓库
  8 enablegroups={1|0}   是否指定组来批量指定程序包

yum用法:
yum [options] [command] [package …]

options选项
–nogpgcheck禁止密钥检测
-y所有回答都设置成yes
-q静默模式
–diablerepo=repoidglob临时禁用指定的repo仓库
–enablerepo=repoidglob临时启用指定的repo仓库
–noplugis禁止所有插件
command命令选项
repolist显示仓库列表
list显示程序包,默认显示全部
list [all|glob1][glob2]显示出全部程序包或者匹配通配符的程序包
list [available|updates|installed]显示出可安装、升级和已安装的程序包
install安装程序包
reinstall重新安装程序包
update升级程序包
downgrade降级程序包
remove卸载程序包
info显示程序包信息
clean[ packages | metadata | expire-cache | rpmdb | plugins | all ]清理缓存
deplist显示程序包的依赖关系
search “string1”搜手指定的程序包
grouplist显示包组的程序包列表
groupinstall安装包组的程序包
groupupdate升级包组的程序包
groupremove卸载包组的程序包
groupinfo显示包组的程序包的信息

创建私有库:

   # 将光盘挂载至/mnt/media目录下
[root@bogon ~]# mount -r /dev/sr0 /mnt/media
#将光盘的程序复制到tmp目录下
[root@bogon ~]# cp -r /mnt/media/Packages/ /tmp/centos7
#创建一个本地的仓库
[root@bogon ~]# cat /etc/yum.repos.d/local.repo 
[local]
name=centos7
baseurl=file:///tmp/centos7
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
#实现本地安装:

[root@bogon yum.repos.d]# yum install ftp
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 ftp.x86_64.0.0.17-66.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

==========================================================================================================================
 Package                  架构                        版本                               源                          大小
==========================================================================================================================
正在安装:
 ftp                      x86_64                      0.17-66.el7                        local                       61 k

事务概要
==========================================================================================================================
安装  1 软件包

总下载量:61 k
安装大小:96 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : ftp-0.17-66.el7.x86_64                                                                                1/1 
  验证中      : ftp-0.17-66.el7.x86_64                                                                                1/1 

已安装:
  ftp.x86_64 0:0.17-66.el7                                                                                                

完毕!

   

4、写一个脚本实现列出以下菜单给用户:
(1)disk:show disk info信息

(2)mem: show memory info信息

(3)cpu: show cpu info信息

(*)quit

cat <<EOF
(1)disk:show disk info
(2)mem: show memory info
(3)cpu: show cpu info
(*)quit
EOF
#
read -p "input disk or mem or cpu or quit:" option
#
if [[ $option == "disk" ]];then
	fdisk -l /dev/sda
elif [[ $option == "mem" ]];then
 	free -hm
elif [[ $option == "cpu" ]];then
	lscpu
elif [[ $option == "quit" ]];then
	exit 1;
else
	echo "Wrong input,try again"
	exit 2;
fi

5、sed用法总结并结合实例演示
sed是一款非交互性文本流编辑器,它的工作原理:
每一个文本文件都有多行内容,sed依次将每行的内容提取出来并保存至模式空间中。随后在模式空间中匹配所指定的正则表达式。如果被sed指定的正则表达式匹配,则输出至标准输出中或进行编辑操作后输出至标准输出。
注意:所有被sed指定的正则表达式匹配的内容或者编辑后的内容,都被缓存至保存空间中。并不会对原文件造成修改
sed用法:
sed [OPTION]…‘script’[input-file]…

OPTION常用选项
-n不输出至保存空间的
-e script , --expression=script多点编辑
-f每一行编辑命令组成的脚本
-r, --regexp-extended支持正则表达式
-i直接编辑原文件

script:地址定界以及编辑命令选项

script地址定界选项
不给任何地址时,表示对全文进行处理
#表示指定行
/pattern/被指定模式匹配到的行
# ,#表示第#行和第#行
# ,+#从第#行向下数#行 例如3 +5 就是3,4,5,6,7,8总共6行
#, /pattern/从第#行开始,第一次被模式匹配到的内容
$表示最后一行
~步进地址,例如:1~2:1,3,5…所有奇数行

编辑命令:

script编辑命令选项
d直接删除整行
p显示空间的内容
a \text实现在行后面追加文本信息“text”,输入\n实现多行内容追加
i \text实现在行前面追加文本信息“text”,输入\n实现多行文本插入
c \text把匹配到的行替换为此处指定的文本“text”
w /path/to/somefile将模式空间中匹配到的行保存至指定的文件中
r/path/from/somefile将指定文件中的内容至当前文件被模式匹配到的行的后面。文件合并
=为模式空间中匹配到的行打印行号
取反条件,需要写在匹配模式的后面

查找替换:
s/// :与vim末行命令下的查找方式一样,可自由定义分隔符,如s@@@ s###等

g全文替换
w /path/to/somefile将结果保存在指定的文件中
p显示替换成功的行

示例:

#地址定界
#显示第三行的内容,-n表示不输出模式空间中的内容,p是打印出来
[root@bogon ~]# sed -n '3'p /etc/fstab
# /etc/fstab

#显示第3行到第5行的内容
[root@bogon ~]# sed -n '3,5'p /etc/fstab
# /etc/fstab
# Created by anaconda on Tue Feb 26 16:32:37 2019
#

#显示从第3行向下数2行的内容
[root@bogon ~]# sed -n '3,+2'p /etc/fstab
# /etc/fstab
# Created by anaconda on Tue Feb 26 16:32:37 2019
#

#显示从第2行开始打印出第一个字符是#号的行
[root@bogon ~]# sed -n '2,/^#/p' /etc/fstab 
#
# /etc/fstab

#打印出最后一行
[root@bogon ~]# sed -n '$p' /etc/fstab 
UUID="2015-12-09-22-36-30-00" /mnt/media              iso9660	defaults      0 0


编辑命令示例:

#删除含有UUID的行
[root@bogon ~]# sed '/UUID/d' /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Feb 26 16:32:37 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos_bogon-root /                       xfs     defaults        0 0
/dev/mapper/centos_bogon-home /home                   xfs     defaults        0 0
/dev/mapper/centos_bogon-swap swap                    swap    defaults        0 0

#在第4行后面添加hello,newline的内容
[root@bogon ~]# sed '4a\hello\nnewline' /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Feb 26 16:32:37 2019
hello
newline
#


#在第一行前加入hello、newline的信息
[root@bogon ~]# sed '1i\hello\nnewline' /etc/fstab 
hello
newline

#

#将匹配到的内容输出至a.txt文件中
[root@bogon ~]# sed '/UUID/w ./a.txt' /etc/fstab 
[root@bogon ~]# cat a.txt 
UUID=d45e2480-ac8a-47cf-881a-0982ceb22548 /boot                   xfs     defaults        0 0
UUID="2015-12-09-22-36-30-00" /mnt/media              iso9660	defaults      0 0


查找替换练习:

 练习1:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;
[root@bogon ~]# sed 's@^[[:space:]]\+@@' grub2.cfg 
练习2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
[root@bogon ~]#sed 's@^#[[:space:]]*@@' /etc/fstab
练习3:输出一个绝对路径给sed命令,取出其目录,其行为类似于dirnam
[root@bogon ~]# echo '/mnt/media/Packages/' | sed  's@[^/]\+/\?$@@'

6、 用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序
#!/bin/bash

nginx_log=’/usr/local/nginx/logs/mynginx.log’

code_400_num=$(grep -o ‘[4|5][0-9][0-9]’ ${nginx_log} | wc -l)

code_400_sort=$(grep ‘[4|5][0-9][0-9]’ ${nginx_log} | sort

echo $code_400_num
echo $code_400_sort
此处完全抄写

7、 使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包
我使用的是本地的仓库,配置文件为

[root@bogon ~]# cat /etc/yum.repos.d/local.repo 
    [local]
    name=centos7
    baseurl=file:///tmp/cetos7
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    enabled=1

使用yum install均可安装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值