包管理简介

Linux 上的应用程序一般是以源码形式或者编译后的二进制格式提供给用户使用。对于以源码形式提供的应用程序,用户需要借助于编译器,自行编译成二进制格式才能使用。而即便是编译后的二进制包,用户也需要根据安装文档将应用程序的二进制程序、库文件、配置文件和帮助文件等文件复制到指定路径下。这个过程十分繁琐。面对这个恼人的问题,Linux 业界人士怎么能忍得下去,千呼万唤始出来,终于诞生了程序包管理器。

有了程序包管理器之后,应用程序提供者可将应用程序的二进制程序、库文件。配置文件、帮助文件等以特定形式组织成一个或有限几个“包”文件(不同程序包管理器的组织形式不同)。用户可下载打包好的程序包文件,然后通过程序包管理器的命令实现应用程序的安装,而不再需要手动的复制程序文件到指定的路径下,这些工作都交由程序包管理器来完成了。

最开始研发出的程序包管理器是 Debian 的dpt,全名是 Debian Package Tool,后更名为 dpkg,其程序包的后缀是.deb。后来 RedHat 也研发出了程序包管理器 RedHat Package Manager,简称rpm,其程序包后缀为.rpm。在RedHat的推动下,rpm成为了Linux程序包管理器中的事实上的标准。RedHat对强大后的rpm进行了重新的解释,rpm的全称变为“rpm is Package Manager”。SUSE使用的程序包管理器也是rpm,但它的程序包与RedHat的是不兼容的。此外,Gentoo也有自己的程序包管理器ports。

包基础知识

包名

一个 rpm 包的名称分为包全名和包名,包全名如 httpd-2.2.15-39.el6.centos.x86_64.rpm,包全名中各部分的意义如下:

httpd       包名
2.2.15 版本号,版本号格式[ 主版本号.[ 次版本号.[ 修正号 ] ] ]
39 软件发布次数
el6.centos 适合的操作系统平台以及适合的操作系统版本
x86_64 适合的硬件平台,硬件平台根据cpu来决定,有i386、i586、i686、x86_64、noarch或者省略,noarch或省略表示不区分硬件平台
rpm 软件包后缀扩展名

使用 rpm 工具管理包时,如果要操作未安装的包,则使用包全名,如安装包,查看未安装包的信息等;如果要操作已安装的 rp m包,则只需要给定其包名即可,如查询已装包生成了哪些文件,查看已装包的信息等。

而对于 yum 工具来说,只需给定其包名即可,若有需要,再指定版本号,如明确指明要安装1.6.10版本的 tree 工具,如:

yum install tree-1.6.10

主包和子包

对于一个程序而言,在制作rpm包时,很多时候都将其按功能分割成多个子包,如客户端程序包、服务端程序包等。

以 mysql为例,它分有以下几个包:

* mysql-server.x86_64
* mysql.x86_64
* mysql-bench.x86_64
* mysql-libs.x86_64
* mysql-devel.x86_64

其中 mysql-server.x86_64 是提供服务的主包,mysql.x86_64 是客户端主包,mysql-bench 是用于对 MySQL 进行压力测试的包,mysql-libs 和 mysql-devel 分别是库文件包和头文件包。后两者是提供给其他需要联合 mysql 的程序使用的,仅就实现 mysql 服务而言,只需安装 mysql-serve r即可。

而源码编译安装的包会包含所有功能包,也就是说编译安装一个程序后,它的客户端工具、服务提供程序、库文件、头文件等等都已经安装了。

rpm 管理包工具安装、升级和卸载的功能都很少使用。对于安装来说,它需要人为解决包的依赖关系,这是极其令人恶心的事对于升级来说,基本上都会使用 yum 工具进行安装和升级,而卸载行为在 Linux上很少出现,大不了直接覆盖重装。所以我们这里重点关注 yum 管理包工具的使用。

yum 管理包

yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。基於 RPM 包管理,能够从指定的服务器自动下载 RPM 包 并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

/etc/yum.conf

/etc/yum.conf是yum的默认文件,里面配置的也是全局默认项。

[root@server2 ~]# cat /etc/yum.conf

[main]
cachedir=/var/cache/yum/$basearch/$releasever # 缓存目录
keepcache=0 # 是否保留缓存,设置为1时,安装包时所下载的包将不会被删除
debuglevel=2 # 调试信息的级别
logfile=/var/log/yum.log # 日志文件位置
exactarch=1 # 设置为1将只会安装和系统架构完全匹配的包
obsoletes=1 # 是否允许更新旧的包
gpgcheck=1 # 是否要进行gpg check
plugins=1 # 是否允许使用yum插件
installonly_limit=5
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 # 指定基准包,yum会根据这个包判断发行版本

yum 仓库配置

配置文件为 /etc/yum.conf 和 /etc/yum.repos.d/中的".repo"文件,其中 /etc/yum.conf配置的是仓库的默认项,一般配置yum源都是在 /etc/yum.repos.d/*.repo中配置。注意,该目录中任意repo文件都会被读取。

默认 /etc/yum.repos.d/下会有以下几个仓库文件,除了CentOS-Base.repo,其他的都可以删掉,基本没用。

[marklogzhu@VM_0_15_centos /]$ ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Epel.repo

repo文件的配置格式如下:

[root@xuexi yum.repos.d]# vim CentOS-Base.repo

[base]      # 仓库ID,ID必须保证唯一性
name # 仓库名称,可随意命名
mirrorlist # 该地址下包含了仓库地址列表,包含一个或多个镜像站点,和baseurl使用一个就可以了
#baseurl # 仓库地址。网络上的地址则写网络地址,本地地址则写本地地址,格式为“file://”后接路径,如file:///mnt/cdrom
gpgcheck=1 # 指定是否需要签名,1表示需要,0表示不需要
gpgkey= # 签名文件的路径
enable # 该仓库是否生效,enable=1表示生效,enable=0表示不生效
cost= # 开销越高,优先级越低 【repo配置文件中可用的宏:】
$releasever:程序的版本,对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6.5 则替换为6
$arch:系统架构
$basharch:系统基本架构,如i686,i586等的基本架构为i386
$YUM0-9:在系统定义的环境变量,可以在yum中使用

修改 yum 默认仓库

因为某些因素,访问国外的资源有时候很慢,我们这边配置成国内的仓库源,这里采用网易 yum 源。

  1. 备份 /etc/yum.repos.d/CentOS-Base.repo 文件
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  1. 下载对应版本 repo 文件, 放入 /etc/yum.repos.d/
sudo wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
sudo mv CentOS7-Base-163.repo etc/yum.repos.d/CentOS-Base.repo
  1. 生成缓存
yum clean all
yum makecache

yum 命令

语法
yum [options] [command] [package ...]
  • options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
  • command:要进行的操作。
  • package操作的对象。
常用命令
  • 1.列出所有可更新的软件清单命令:yum check-update
  • 2.更新所有软件命令:yum update
  • 3.仅安装指定的软件命令:yum install <package_name>
  • 4.仅更新指定的软件命令:yum update <package_name>
  • 5.列出所有可安裝的软件清单命令:yum list
  • 6.删除软件包命令:yum remove <package_name>
  • 7.查找软件包 命令:yum search
  • 8.清除缓存命令:
    • yum clean packages: 清除缓存目录下的软件包
    • yum clean headers: 清除缓存目录下的 headers
    • yum clean oldheaders: 清除缓存目录下旧的 headers
    • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers
实例

安装 vim

[marklogzhu@VM_0_15_centos /]$ sudo yum install vim
[sudo] password for marklogzhu:
Loaded plugins: fastestmirror, langpacks
epel | 3.2 kB 00:00:00
(1/2): epel/7/x86_64/updateinfo | 933 kB 00:00:00
(2/2): epel/7/x86_64/primary | 3.6 MB 00:00:01
Determining fastest mirrors
epel 12647/12647
Nothing to do

Liunx学习总结(五)--包管理的更多相关文章

  1. Linux学习笔记(五) 账号管理

    1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...

  2. Linux学习之RPM包管理-yum管理(十七)

    Linux学习之RPM包管理-yum管理 目录 IP地址配置 网络yum源 yum命令 光盘yum源搭建 IP地址配置 IP+子网掩码就可以在局域网(内网)使用. IP+子网掩码+网关+DNS就可以访 ...

  3. Linux学习之RPM包管理-rpm命令管理(十六)

    Linux学习之RPM包管理-rpm命令管理 目录 简介 RPM包依赖性 包全名与包名 rpm软件包安装 rpm软件包卸载 升级降级rpm软件包 rpm软件包的查询 rpm软件包校验 简介 RPM是R ...

  4. linux 学习笔记 TAR包管理

    >显示gong.tar 文件内容 #tar tf gong.tar ./epuinfo.txt ./smart/ ./smart/smartsuite-2.1-2.i386.rpm ./smar ...

  5. Git学习笔记五--分支管理

    为什么要引入分支? 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部 ...

  6. Linux System Programming 学习笔记(五) 进程管理

    1. 进程是unix系统中两个最重要的基础抽象之一(另一个是文件) A process is a running program A thread is the unit of activity in ...

  7. Liunx学习笔记(三) 文件权限

    一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...

  8. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

  9. 【程序包管理】篇章3:CentOS平台下软件包安装方法总结

    1.软件包安装前的学习:程序包管理的基础知识 2.程序包安装的方法介绍: rpm文件的二进制包安装:Linux程序包管理之rpm安装总结 yum安装:Linux程序包管理之yum源安装 链接:本地yu ...

随机推荐

  1. Visual Studio 2015 WinForm应用程序打包教程

    最近开发了一个小软件.由于需要打包.网上找了一些资料.然后整合了起来.希望对大家有所帮助.不全面请见谅. 本人开发工具用的是Visual Studio 2015  打包控件 InstallShield ...

  2. python课堂整理15---map, filter,reduce函数

    一.map函数 处理序列(可迭代对象)中的每一个元素,得到的结果是一个‘列表’(其实是个迭代器),该‘列表’元素个数及位置与原来一样 理解下面这段代码: num_l = [1, 2, 4, 6] de ...

  3. Java集合系列(一):集合的定义及分类

    1. 集合的定义 什么是集合呢? 定义:集合是一个存放对象的引用的容器. 在Java中,集合位于java.util包下. 2. 集合和数组的区别(面试常问) 提到容器,就会想起数组,那么集合和数组的区 ...

  4. 从flink-example分析flink组件(3)WordCount 流式实战及源码分析

    前面介绍了批量处理的WorkCount是如何执行的 <从flink-example分析flink组件(1)WordCount batch实战及源码分析> <从flink-exampl ...

  5. Java初中级程序员面试题宝典

    Java基础部分 &与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假:但是&&当第一个条件不成之后,后面的条件都 ...

  6. React入门理解demo

    1.React文档结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  7. Extjs的textfield的颜色设置和出现的问题笔记

    Ext.getCmp('alarmsLevelVal').setFieldStyle('background-color:#ff0000;background-p_w_picpath: none; ' ...

  8. 安装MySQL5.7 安装环境:CentOS7 64位 MINI版,

    安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo ...

  9. 深入Apache NiFi 之源码学习

    前言 要问 Hortonworks 这家公司最有产品力的产品是什么,我觉得是 Apache NiFi.去年Cloudera 和 Hortonworks 合并之后,以 Cloudera 为主,两家公司进 ...

  10. 【React踩坑记四】React项目中引入并使用js-xlsx上传插件(结合antdesign的上传组件)

    最近有一个前端上传并解析excel/csv表格数据的需求. 于是在github上找到一个14K star的前端解析插件 github传送门 官方也有,奈何实在太过于浅薄.于是做了以下整理,避免道友们少 ...