包管理
包管理
随着我们在Linux
上花费更多的时间,我们看到它的软件格局非常动态。事情在不断变化。大多数顶级Linux
发行版本每六个月发布一次新版本,并且每天都会进行许多单独的程序更新。为了跟上软件的飞速发展,我们需要良好的软件包管理工具
。
在本文中,我们将介绍一些用于软件包管理的命令行工具。尽管所有主要发行版都提供了功能强大且复杂的图形程序来维护系统,但是了解命令行程序也很重要。他们可以执行许多(或不可能)图形任务完成的任务。
包装系统
不同的发行版使用不同的包装系统,通常,用于一个发行版的包装与另一发行版不兼容。 大多数发行版都属于包装技术的两个阵营:Debian“.deb
”阵营和Red Hat“ .rpm
”阵营。 有一些的例外,例如Gentoo
,Slackware
和Foresight
,但大多数无外乎这两种:
几乎所有用于Linux
系统的软件都可以在Internet
上找到。 大部分将由供应商以软件包文件的形式提供,其余将以可手动安装的源代码形式提供。
打包文件
软件包文件是构成软件包的文件的压缩集合。一个包可能包含许多程序和支持这些程序的数据文件。软件包文件还包含有关软件包的元数据,例如软件包及其内容的文本描述。此外,许多软件包都包含安装前和安装后脚本,这些脚本在软件包安装之前和之后执行配置任务。
软件包文件是软件包维护者创建的,通常是(但并非总是)发行商的雇员。软件包维护者从上游提供程序(程序的作者)以源代码的形式获取软件,对其进行编译,并创建软件包元数据和任何必要的安装脚本。软件包维护者通常会对原始源代码进行修改,以改善程序与Linux发行版其他部分的集成。
软件仓库
尽管某些软件项目选择执行自己的打包和分发,但当今大多数软件包都是由分发供应商和感兴趣的第三方创建的。在中央存储库中,分发包的用户可以使用软件包,其中可能包含成千上万个软件包,每个软件包都是专门为分发而构建和维护的。
发行版可以为软件开发生命周期的不同阶段维护几个不同的存储库。例如,通常会有一个“测试”
存储库,其中包含刚刚构建的包。发行版通常会有一个“开发”
存储库,该存储库中保存着要包含在发行版下一个主要版本中的在制品软件包。
发行版可能还具有相关的第三方存储库。由于法律原因(例如专利或DRM反规避问题),发行软件中通常不包含这些软件。也许最著名的情况是加密的情况DVD支持,在美国不合法。第三方存储库在不适用软件专利和反规避法律的国家/地区运营。这些存储库通常完全独立于它们支持和使用的发行版他们必须了解它们,并手动将它们包含在软件包管理系统的配置文件中。
依赖关系
程序很少“独立
”; 相反,他们依靠其他软件组件的存在来完成工作。 常见的活动(例如输入/输出)由许多程序共享的例程处理。 这些例程存储在称为共享库
,它为多个程序提供基本服务。 如果程序包需要共享资源(例如共享库),则称其具有依赖项。 现代软件包管理系统都提供了某种依赖方法,解决方案以确保在安装软件包时也安装了其所有依赖项。
高级打包工具
软件包管理系统通常由两种工具组成:处理诸如安装和删除软件包文件
之类的任务的低级工具,以及执行元数据搜索和依赖关系
解析的高级工具。 在本文中,我们将研究Debian
风格的系统(例如Ubuntu
)提供的工具以及最近的Red Hat
产品使用的工具。 尽管所有Red Hat
风格的发行版都依赖于相同的低级程序(rpm
),但它们使用不同的高级工具。 在我们的讨论中,我们将介绍Fedora
,Red Hat Enterprise Linux
和CentOS
使用的高级程序yum
。 其他Red Hat
风格的发行版提供具有可比功能的高级工具。
Distributions | lLow-Level Tools | High-Level Tools |
---|---|---|
Debian-Style | dpkg | apt - get , aptitude |
Fedora , Red Hat Enterprise Linux , CentOS | rpm | yum |
查找软件包
在存储库中查找软件包使用高级工具搜索存储库元数据,基于可以基于其名称或说明上。
Style | Commands |
---|---|
Debian | apt - get update , apt - cache search search_string |
Red Hat | yum search search_string |
从源安装软件包
Style | Command |
---|---|
Debian | apt - get update , apt - get install package_name |
Red Hat | yum install package_name |
从本地软件包安装软件
Style | Command |
---|---|
Debian | dpkg - - install package_file |
Red Hat | rpm - i package_file |
由于此技术使用低级rpm程序来执行安装,不执行任何依赖项解析。如果rpm发现缺少依赖,rpm将退出并显示错误。
移除包
Style | Command |
---|---|
Debian | apt - get remove package_name |
Red Hat | yum erase packages_name |
Example:
[root@iZerb5rob3dcf6Z ~]# yum insatll nginx
[root@iZerb5rob3dcf6Z ~]# yum erase nginx
从仓库升级
Style | Command |
---|---|
Debian | apt - get update , apt - get upgrade |
Red Hat | yum update |
从包文件升级
Style | Command |
---|---|
Debian | dpkg - - install package_file |
Red Hat | rpm - U package_file |
列出已安装的软件包
Style | Command |
---|---|
Debian | dpkg - - list |
Red Hat | rpm -qa |
Example:
[root@iZerb5rob3dcf6Z ~]# rpm -qa
audit-2.8.5-4.el7.x86_64
setup-2.8.71-10.el7.noarch
parted-3.1-31.el7.x86_64
ncurses-libs-5.9-14.20130511.el7_4.x86_64
......
确认包是否安装
Style | Command |
---|---|
Debian | dpkg - - status package_name |
Red Hat | rpm -a package_name |
显示已安装软件包信息
Style | Command |
---|---|
Debian | apt - cach show package_name |
Red Hat | yum info package_name |
[root@iZerb5rob3dcf6Z ~]# yum info openssh-clients-7.4p1-21.el7.x86_64
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
已安装的软件包
名称 :openssh-clients
架构 :x86_64
版本 :7.4p1
发布 :21.el7
......
查找哪个包安装了文件
Style | Command |
---|---|
Red Hat | rpm - af file_name |
Debian | dpkg - - search file_name |
示例:要查看哪个软件包在Red Hat
系统上安装了/usr/bin/vim
文件:
[root@iZerb5rob3dcf6Z ~]# rpm -qf /usr/bin/vim
vim-enhanced-7.4.629-6.el7.x86_64