linux程序包管理

对第五周学习的内容进行总结

简述rpm与yum命令的常见选项,并举例

rpm命令

rpm命令用来手动安装rpm格式的程序包,使用格式为

  • rpm [option] path/to/rpmfile
  1. -i安装选项
  • 使用格式rpm -i[installopition] path/to/rpmfile
  • -h选项 : 使用#来显示安装进度
  • -v选项 : 显示安装过程
  • -vv选项 : 显示更详细的安装过程比-v更详细,按需求使用
  • –test选项 : 不进行实际安装操作,而是进行安装环境的测试,可以查看安装是否可以成功
  • –nodeps选项 : 忽略依赖关系,这样即使安装成功,也可能由于依赖关系造成运行问题
  • –replacepkgs选项 : 覆盖安装
  • –force选项 : 强制安装
  • 对于新安装程序包,常用的操作是rpm -ivh path/to/rpmfile
  1. 升级选项
  • -U : 升级安装或全新安装
  • -F : 升级安装
  • 同安装选项一样,常用组合有-Uvh -Fvh
  • 同安装选项一样,也可以使用–test –nodeps选项
  • –oldpackage选项 : 降级安装旧版本程序包 rpm -U –oldpackage path/to/rpmfile
  1. 卸载
  • -e : 卸载已安装的rpm程序,使用 rpm -e packagename
  • 使用-e进行卸载时也可以使用–test –nodeps选项
  • –allmatches选项 : 卸载所有匹配的安装,例如一个rpm程序的多个版本
  • 对于卸载,需要注意的是如果程序包的配置文件在安装后被修改过,则卸载时并不会删除这些文件,而是将它们重命名(加后缀 .rpmsave)
  1. 查询
  • 使用格式rpm -q[queryoption] [packagename] [file]
  • 直接使用rpm -q packagename… : 查询某程序包是否安装,包名可以是多个
  • -i选项 : info显示程序包简要信息 rpm -qi packagename
  • -a选项 : 显示已安装的程序包列表 rpm -qa
  • -f选项 : 后跟一个文件,查询此文件是由哪个程序包生成的 rpm -qf filename
  • -p选项 : 查询某个未安装的程序包,可与i选项连用 rpm -qpi packagename 查询rpm仓库中指定的未安装程序包的简要信息
  • -l选项 : 显示某个程序包生成的文件列表 rpm -ql packagename
  • -c选项 : 显示某程序包生成的配置文件 rpm -qc packagename
  • -d选项 : 显示某程序包生成的帮助文件 rpm -qd packagename
  • –provides选项 : 显示程序包提供的capabilities
  • –requires选项 : 显示程序包所依赖的capabilities
  • –scripts选项 : 查询程序包安装或卸载时执行的脚本,这些脚本可以分为以下4类:
    • preinstall : 程序包安装之前执行的脚本
    • postinstall : 程序包安装完成之后执行的脚本
    • preuninstall : 程序包卸载之前执行的脚本
    • postuninstall : 程序包卸载之后执行的脚本
  1. 校验
  • rpm -V packagename : 验证程序包安装之后生成的文件是否发生了改变
  • 程序包合法性验证
    • 先导入验证密匙文件 rpm –import path/to/key-file
    • 再使用命令验证程序包 rpm -K path/to/packagefile
  1. 创建rpm包管理数据库,创建的数据库文件保存路径为/var/lib/rpm下
  • –initdb : 初始化数据库,当rpm包管理数据库不存在时新建它
  • –rebuilddb : 重建数据库,无论之前数据库是否存在
  • –dbpath DIRECTORY : 可以指明建立的数据库文件保存路径,即改变默认的/var/lib/rpm,例如 rpm –rebuilddb –dbpath /var/rpmdb

yum命令

yum命令可以更智能的管理和安装rpm程序包,它可以自动处理程序包之前的依赖关系,使用起来更加方便。

  1. yum的配置文件
  • 全局配置文件/etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
  // yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,定义配置文件中出现的$basearch表示系统的平台(如i386,
  x86_64这种),$releasever表示OS发行版的主版本号(例如CentOS7.4的主版本号就是7)
keepcache=0
  // 安装完成后是否保留软件包,0为不保留(默认为0),1为保留
debuglevel=2
  // Debug 信息输出等级,范围为0-10,默认为2
logfile=/var/log/yum.log
  // yum 生成的日志所在
pkgpolicy=newest
 // 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的
 repository 中同时存在,yum 应该安装哪一个,如果是newest,则yum会安装最新版本。如果是last,则yum 会将服务器
 id 以默认方式排序,并选择最后的那个服务器上的软件安装。一般都是选newest
tolerant=0
 // 有1和0两个选项,表示yum 是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经
 安装了,如果你设为1,则yum 不会出现错误信息。默认是0
exactarch=1
  // 有1和0两个选项,设置为1,则yum 只会安装和系统平台匹配的软件包,例如,yum 不会将x64的软件包安装在适合i386的系统中。默认为1
retries=6
 // 网络连接发生错误后的重试次数,如果设为0,则会无限重试。默认值为6
obsoletes=1
  // 这是一个update 的参数,具体可参阅yum(8),简单的说就是相当于upgrade,允许更新旧的RPM包
gpgcheck=1
  // 是否检查gpgkey,1为检查,0为不检查
plugins=1
  // 是否启用插件,默认1为允许,0表示不允许
installonly_limit=5
  // 允许同时安装的程序包个数,这里设置为5个
exclude=selinux*
  // 排除某些软件在升级名单之外,不让它们升级,可以用通配符,列表中各个项目要用空格隔开
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

  • 各repository的配置文件
    文件为/etc/yum.d/*.repo
[base]
  // []中表示此repository的ID,必须唯一不能重复
name=
  // repository的名字
baseurl=
  // repository的路径,支持ftp:// http:// file://
gpgcheck=1
  // 是否进行gpgkey的检查,1为检查,0为不检查
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  // gpgkey的路径
enabled=
  // 是否启用此repository,1为启用,0为不启用。可省略,省略时表示启用
cost=
  // 指明repository的开销,默认为1000,可省略

  1. yum命令的使用
  • yum install package1 [package2]… 从仓库源安装安装程序包
    根据配置文件的默认设置,如果某程序包存在多个版本,可能会默认安装最新的版本,如果需要安装指定版本需要指明package的版本
  • -y选项 安装卸载时可以使用该选项,例如yum install -y packagename 安装时就不需要在交互时手动回答yes了
  • –disablerepo= 安装时禁用某repository
  • –enablerepo= 安装时启用某repository
  • –nogpgcheck 安装时禁止gpgkey校验
  • yum reinstall package1 [package2]… 重新安装程序包(可以覆盖安装)
  • yum update package1 [package2]… 升级安装程序包
  • yum downgrade package1 [package2]… 降级安装程序包
  • yum check-update 检查有哪些升级程序包可用
  • yum {remove | erase} package1 [package2]… 卸载程序包,卸载时会将依赖于指定要卸载的程序包的相关程序包也卸载
  • yum localinstall /path/to/rpmfile … 安装本地的程序包文件,安装时也会智能判断依赖关系
  • yum localupdate /path/to/rpmfile … 升级安装本地的程序包文件
  • yum list [all|available|installed|updates|extras|obsoletes] [glob_exp1]… 查看yum仓库列表,按需求使用选项和glob表达式
  • yum grouplist [hidden] [groupwildcard] 显示包组列表,按需使用选项(如是否显示隐藏和使用组通配符等)
  • yum provides|whatprovides feature1 [feature2]… 查看指定的特性(可以是个文件)是由哪个程序包提供的
  • yum deplist package1 [package2]… 查看指定程序包依赖的capabilities
  • yum info package1 … 显示包简要信息
  • yum groupinfo group1 … 显示包组的简要信息
  • yum groupinstall group1 … 安装包组
  • yum groupupdate group1 … 升级安装包组
  • yum groupremove group1 … 卸载包组
  • yum repolist [all|enabled|disabled] 显示yum仓库列表
  • yum clean [all|packages|metadata|expire-cache|rpmdb|plugins] 清楚yum缓存数据
  • yum makecache 手动创建yum缓存

CentOS下自建yum仓库,分别为网络源和本地源

通过vim命令创建repo文件
网络yum源

~]# vim /etc/yum.repos.d/networks.repo
[networks]
name=networks
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=0

本地yum源

先将CentOS7光盘挂载至/media/cdrom路径下
~]# ls /media/cdrom/
CentOS_BuildTag  EFI  EULA  GPL  images  isolinux  LiveOS  Packages  repodata  RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Testing-7  TRANS.TBL
创建本地repo文件
~]# vim /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///media/cdrom
gpgcheck=0

查看所有yum源验证效果,可以看到上面添加的2个yum源已经成功

~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                                                                                        repo name                                                                             status
epel/7/x86_64                                                                                  Epel                                                                                  12,184
local                                                                                          local                                                                                  9,591
networks/7/x86_64                                                                              networks                                                                               9,591

简述at和crontab命令

at命令

at命令用于设置一次性的任务计划,其只执行一次就结束。

at命令是由atd服务提供的:

  • CentOS6可以使用 service atd start 来启动该服务
  • CentOS7可以使用 systemctl start atd.service 来启动该服务
  1. 命令使用格式 : at [option] TIME
例如添加一个at任务
~]$ at 15:00    # 15点执行该任务
at> ls /etc     # 输入需要执行的任务内容
at> <EOT>       # 使用'键盘ctrl+D'退出任务编辑
job 4 at Sun Dec 31 15:00:00 2017
  • -l选项 : 也可以使用atq,效果等同,都是显示所有当前用户的at任务列表
  • -d选项 : 也可以使用atrm,效果等同,都是删除一个at任务列表中的at任务
  • -c选项 : 打印任务内容到标准输出
  1. TIME的格式
  • HH:MM [date] : 其中的date可以是具体年月日(例如2017-12-31),也可以是英文表示的日子(例如December 31),甚至时间上也可以简化表示(明天下午2点:2pm tomorrow)
  • HH:MM + #(minutes|hours|days|weeks) : 某时刻加一个相对时间表示法(例如2pm + 3days三天后的下午2点)
  1. 实例
~]$ atq    # 显示当前任务列表
4   Sun Dec 31 15:00:00 2017 a sky
5   Sun Dec 31 14:00:00 2017 a sky
6   Mon Jan  1 07:00:00 2018 a sky
~]$ at -d 6   # 删除6号任务
~]$ atq
4   Sun Dec 31 15:00:00 2017 a sky
5   Sun Dec 31 14:00:00 2017 a sky
~]$ at -c 4
#!/bin/sh
# atrun uid=1000 gid=1000
# mail sky 0
umask 2
# 此处省略冗长的环境变量内容
ls /etc  # 任务内容
~]$ at -f scripts/num_sum.sh 2pm + 3 days   # 3天后的下午2点执行脚本文件中的内容
job 7 at Wed Jan  3 14:00:00 2018

crontab命令

crontab可以设置周期性任务计划。它是由crond服务来实现的。

  1. 系统cron任务
  • 它是通过编辑配置文件/etc/crontab来实现的
文件中添加任务的格式
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

  • 时间表示的4个方式
    • 时间位上的*表示每个有效的取值
25 * * * *      # 这就表示每个整点过25分执行一次任务
    • 时间位上出现*/# 表示相应的位上每#个间隔一次
0 8 * */3 *     # 表示每间隔3天的8:00执行一次
    • 时间位上#-# 表示连续时间
30 1-3 * * *     # 表示每天1:30, 2:30, 3:30分别执行
    • 时间位上#,# 表示离散的时间点
15 9 * * 3,5     # 表示周3和周5的9:15执行
  • command执行的结果,默认会以邮件的形式发送给用户,如果不想接收邮件,可以使用输出重定向command &> /dev/null
  1. 用户cron任务
  • 用户的cron任务配置文件: /var/spool/cron/路径下与用户同名的文件
  • 使用crontab命令来编辑用户cron任务
    • crontab -e : 直接进入编辑文件
    • crontab -l : 列出已经定义的所有任务
    • crontab -r : 清空列表中的所有任务
制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
~]$ crontab -e
10 3,5 * * 3 /bin/date +"\%F \%H:\%M:\%S"
~]$ crontab -l
10 3,5 * * 3 /bin/date +"\%F \%H:\%M:\%S"

简述sed常用操作命令,并举例

sed是一种行编辑器,它可以使用正则表达式进行模式匹配。它在处理文本时,会逐行进行处理,先将当前处理的行存储在一个临时缓冲区“模式空间”(pattern space)中,接着用sed命令进行处理,处理完成后,默认将结果送至标准输出,然后在继续处理下一行,直至文本的末尾。默认操作下sed不会改变文件的内容,如果想保存sed处理后的结果,可以使用输出重定向。

 

linux程序包管理
sed.png
  1. 命令格式
    sed [options] ‘command’ file(s)
    sed [options] -f scriptfile file(s)
  2. 参数
  • -e script1 -e script2 : -e选项可以指定多条命令执行
  • -f scriptfile : -f选项可以从文件中读取命令执行操作,同样可以指定多个文件处理
  • -n选项 : 仅显示sed命令处理后的结果
  • -r选项 : 支持扩展的正则表达式
  • -i选项 : 直接修改源文件
  1. sed命令
a\ 在当前行下面插入文本
i\ 在当前行上面插入文本
c\ 把选定的行改为新的文本
= 打印行号
d 删除,删除选择的行
D 删除模板块的第一行
! 表示其后面的命令对所有没有前面的条件匹配的行发生作用
s 替换指定字符
g 表示行内全面替换
h 拷贝模板块的内容到内存中的缓冲区
H 追加模板块的内容到内存中的缓冲区
g 获得内存缓冲区的内容,并替代当前模板块中的文本
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面
x 互换当前模式空间和内存缓冲区的内容
n 读取下一个输入行进入模式空间
N 追加下一个输入行到模式空间现有数据的后面
p 打印模板块的行
P(大写) 打印模板块的第一行
w file 把处理过的结果写入文件
r file 读取文件内容并追加进入模式空间

关于n, N这两个命令的执行方式是容易搞错的地方,可以参考下面的图示

 

linux程序包管理
sed_n1.png

 

linux程序包管理
sed_n2.png

 

linux程序包管理
sedN2.png
  1. sed处理文本示例
仅显示以"#"开头的行
~]$ sed -n '/^#/p' /etc/fstab
在所有"#"后添加"*"
~]$ sed 's/\(#\)/\1*/g' /etc/fstab
删除第5行及其之后的所有行
~]$ sed '5,$d' /etc/fstab
删除每一行开头的"#"并删除文件中的空白行
~]$ sed -e 's/^#//g' -e '/^[[:space:]]*$/d' /etc/fstab
-r选项使用扩展正则表达式,"&"表示每一个匹配到的内容
~]$ echo "this is a test line" | sed -r 's/\w+/[&]/g'
[this] [is] [a] [test] [line]
将issue文件的内容添加到fstab文件每一个以"#"开头的行之后
~]$ sed '/^#/r /etc/issue' /etc/fstab
将this is a test添加到以"#"开头的行之后
~]$ sed '/^#/a\this is a test' /etc/fstab
将this is a test添加到以"#"开头的行之前
~]$ sed '/^#/i\this is a test' /etc/fstab
打印以"#"开头的行的行号
~]$ sed '/^#/=' /etc/fstab
为文件每一行添加行号
~]$ sed = /etc/fstab | sed 'N;s/\n/: /g'
1: 
2: #
3: # /etc/fstab

删除文件的偶数行
~]$ sed 'n;d' /etc/fstab
仅输出文件最后2行
~]$ sed 'N;$!D' /etc/fstab

关于难点N的处理逻辑的实例解析
~]$ cat ./123
1
2
3
4
5
~]$ sed 'N;P' ./123
1
1
2
3
3
4
5
~]$ sed -n 'N;P' ./123
1
3
  / 从上面的多次处理结果可以得出sed从首行开始每次有2行进入模式空间进行处理,
  P命令打印空间中的第1行,当读取到最后一行第5行时,由于没有下一行了所以无法
  执行N命令,于此同时分号后面的P命令也没有被执行

将文件的所有行逆序输出
~]$ sed '1!G;h;$!d' ./123
5
4
3
2
1

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90765

(0)
skysky
上一篇 2018-01-01
下一篇 2018-01-01

相关推荐

  • shell脚本终结篇——数组

    数组定义: 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组名和索引: 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅仅是数值格式,自定义格式的数组即为关联数组,bash4.0版本之后开始支持 bash的数组支持稀疏格式(索引不连续) 声明数组: declare -a ARRAY_NAM…

    Linux干货 2016-08-24
  • vsftpd, samba, nfs, mariadb

    2018/2/13 11:45 第十一周

    2018-02-13
  • 脚本练习

    注:以下脚本练习实验都是以root用户身份执行的,若普通用户运行需要另加相应的权限 1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。 [root@fengl bin]# vim systeminfo.sh [roo…

    Linux干货 2016-08-15
  • Linux iptables配置应用

                    Linux iptables配置应用 概述:    Linux的防火墙体系主要工作在网络层,只对tcp/ip数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux的防火墙体系基于内核编码实现,因…

    系统运维 2016-11-18
  • iptables初探

    iptables 简述 基础知识 命令使用 简述 iptables是什么?netfilter又是什么? iptables是位于用户控件的一个防火墙规则控制管理工具。netfilter是位于内核中的真正的防火墙,由五个钩子函数(hooks)而组成。 iptables的作用是什么? 用来添加,删除,管理netfilter规则。 netfilter的作用是什么? …

    2016-05-31
  • 第八周作业(网络、bash脚本)

    1-3,计算机网络基础博客已总结,简要补充 协议的分层 为了使那些比较复杂的网络协议更加简单化。ISO根据各通信协议的功能将网络体系分成七层。 在这个分层中,下层为上一层提供服务。上下层之间进行交互时所遵循的约定叫做“接口”。同层之间的交互所遵循的约定叫做“协议” 说的更形象一点,两个中国人打电话这个通信。就可以分为两层,同层之间的叫协议,我说汉语,你也说汉…

    Linux干货 2016-12-18