大多数现代的类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件。软件通常都是存放在存储库中,并通过包的形式进行分发。处理包的工作被称为包管理。包提供了操作系统的基本组件,以及共享的库、应用程序、服务和文档。包管理系统除了安装软件外,它还提供了工具来更新已经安装的包。包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可。
包管理系统:简要概述
1、大多数包系统都是围绕包文件的集合构建的。包文件通惘度谋裆常是一个存档文件,它包含已编译的二进制文件和软件的其他资源,以及安装脚本。包文件同时也包含有价值的垌桠咛虞元数据,包括它们的依赖项,以及安装和运行它们所需的其他包的列表。虽然这些包管理系统的功能和优点大致相同,但打包格式和工具却因平台而异:操作系统格式工具Debian.debapt,apt-cache,apt-get,dpkgUbuntu.debapt,apt-cache,apt-get,dpkgCentOS.rpmyumFedora.rpmdnfFreeBSDPorts,.txzmake,pkgDebian 及其衍生版,如 Ubuntu、Linux Mint 和 Raspbian,它们的包格式是.deb。APT 这款先进的包管理工具提供了大多数常见的操作命令:搜索存储库、安装软件包及其依赖项,并管理升级。在本地系统中,我们还可以使用dpkg程序来安装单个的deb文件,APT 命令作为底层dpkg的前端,有时也会直接调用它。最近发布的 debian 衍生版大多数都包含了apt命令,它提供了一个简洁统一的接口,可用于通常由apt-get和apt-cache命令处理的常见操作。这个命令是可选的,但使用它可以简化一些任务。CentOS、Fedora 和其它 Red Hat 家族成员使用 RPM 文件。在 CentOS 中,通过yum来与单独的包文件和存储库进行交互。在最近的 Fedora 版本中,yum已经被dnf取代,dnf是它的一个现代化的分支,它保留了大部分yum的接口。FreeBSD 的二进制包系统由pkg命令管理。FreeBSD 还提供了Ports集合,这是一个存在于本地的目录结构和工具,它允许用户获取源码后使用 Makefile 直接从源码编译和安装包。
更新包列表
1、大多数系统在本地都会有一个和远程存储库对应的包数据库,在安装或升级包之前最好更新一下这个数据库。另外,yum和dnf在执行一些操作之前也会自动检查更新。当然你可以在任何时候对系统进行更新。系统命令Debian / Ubuntusudo apt-get updatesudo apt updateCentOSyum check-updateFedoradnf check-updateFreeBSD Packagessudo pkg updateFreeBSD Portssudo portsnap fetch update
更新已安装的包
1、在没有包系统的情况下,想确保机器上所有已安装的软件都保持在最新的状态是一个很艰巨的逻晶诚湮任务。你将不得不跟踪数百个不同包的上游趑虎钾缫更改和安全警报。虽然包管理器并不能解决升级软件时遇到的所有问题,但它确实使你能够使用一些命令来维护大多数系统组件。在 FreeBSD 上,升级已安装的 ports 可能会引入破坏性的改变,有些步骤还需要进行手动配置,所以在通过portmaster更新之前最好阅读下/usr/ports/UPDATING的内容。系统命令说明Debian / Ubuntusudo apt-get upgrade只更新已安装的包sudo apt-get dist-upgrade可能会增加或删除包以满足新的依赖项sudo apt upgrade和apt-get upgrade类似sudo apt full-upgrade和apt-get dist-upgrade类似CentOSsudo yum updateFedorasudo dnf upgradeFreeBSD Packagessudo pkg upgradeFreeBSD Portsless /usr/ports/UPDATING使用less来查看 ports 的更新提示(使用上下光标键滚动,按 q 退出)。cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a安装portmaster然后使用它更新已安装的 ports
搜索某个包
1、大多数发行版都提供针对包集合的图形化或菜单驱动的工具,我们可以分类浏览软件,这也是一个发现新软件的好方法。然而,查找包最快和最有效的方法是使用命令行工具进行搜索。系统命令说明Debian / Ubuntuapt-cache searchsearch_stringapt searchsearch_stringCentOSyum searchsearch_stringyum search allsearch_string搜索所有的字段,包括描述Fedoradnf searchsearch_stringdnf search allsearch_string搜索所有的字段,包括描述FreeBSD Packagespkg searchsearch_string通过名字进行搜索pkg search -fsearch_string通过名字进行搜索并返回完整的描述pkg search -Dsearch_string搜索描述FreeBSD Portscd /usr/ports && make search name=package通过名字进行搜索cd /usr/ports && make search key=search_string搜索评论、描述和依赖
查看某个软件包的信息
1、在安装软件包之前,我们可以通过仔细阅读包的描述来获得很多有用的信息。除了人类可读的文本之外,这些内容通常包括像版本号这样的元数据和包的依赖项列表。系统命令说明Debian / Ubuntuapt-cache showpackage显示有关包的本地缓存信息apt showpackagedpkg -spackage显示包的当前安装状态CentOSyum infopackageyum deplistpackage列出包的依赖Fedoradnf infopackagednf repoquery --requirespackage列出包的依赖FreeBSD Packagespkg infopackage显示已安装的包的信息FreeBSD Portscd /usr/ports/category/port&& cat pkg-descr
从存储库安装包
1、知道包名后,通常可以用一个命令来安装它及其依擅糗菰怅赖。你也可以一次性安装多个包,只需将它们全部列出来即可。系统 命令 说明Debian / Ubuntusudo apt-get installpackagesudo apt-get installpackage1 package2 ...安装所有列出来的包sudo apt-get install -ypackage在apt提示是否继续的地方直接默认yessudo apt installpackage显示一个彩色的进度条CentOSsudo yum installpackagesudo yum installpackage1 package2 ...安装所有列出来的包sudo yum install -ypackage在yum提示是否继续的地方直接默认yesFedorasudo dnf installpackagesudo dnf installpackage1 package2 ...安装所有列出来的包sudo dnf install -ypackage在dnf提示是否继续的地方直接默认yesFreeBSD Packagessudo pkg installpackagesudo pkg installpackage1 package2 ...安装所有列出来的包FreeBSD Portscd /usr/ports/category/port&& sudo make install从源码构建安装一个 port
从本地文件系统安装一个包
1、对于一个给定的操作系统,有时有些软件官方并没有提供相应的包,那么开发人员或供应商将需要提供包文件的下载。你通常可以通过 web 浏览器检索这些包,或者通过命令行curl来检索这些信息。本文所有概念都可以从《Linux就该这么学》中找到详细的解释!将包下载到目标系统后,我们通常可以通过单个命令来安装它。在 Debian 派生的系统上,dpkg用来处理单个的包文件。如果一个包有未满足的依赖项,那么我们可以使用gdebi从官方存储库中检索它们。在 CentOS 和 Fedora 系统上,yum和dnf用于安装单个的文件,并且会处理需要的依赖。系统 命令 说明Debian / Ubuntusudo dpkg -ipackage.debsudo apt-get install -ygdebi && sudo gdebipackage.deb安装gdebi,然后使用gdebi安装package.deb并处理缺失的依赖CentOSsudo yum installpackage.rpmFedorasudo dnf installpackage.rpmFreeBSD Packagessudo pkg addpackage.txzsudo pkg add -fpackage.txz即使已经安装的包也会重新安装
删除一个或多个已安装的包
1、由于包管理器知道给定的软件包提供了哪些文件,因此如果某个软件不再需要了,它通常可以干净利落地从系统中清除这些文件。系统 命令 说明Debian / Ubuntusudo apt-get removepackagesudo apt removepackagesudo apt-get autoremove删除不需要的包CentOSsudo yum removepackageFedorasudo dnf erasepackageFreeBSD Packagessudo pkg deletepackagesudo pkg autoremove删除不需要的包FreeBSD Portssudo pkg deletepackagecd /usr/ports/path_to_port&& make deinstall卸载 port
apt 命令
1、Debian 家族发行版的管理员通常熟悉apt-get和apt-cache。较少为人所知的是简化的apt接口,它是专为交互式使用而设计的。传统命令等价的apt命令apt-get updateapt updateapt-get dist-upgradeapt full-upgradeapt-cache searchstringapt searchstringapt-get installpackageapt installpackageapt-get removepackageapt removepackageapt-get purgepackageapt purgepackage虽然apt通常是一个特定操作的快捷方式,但它并不能完全替代传统的工具,它的接口可能会随着版本的不同而发生变化,以提高可用性。如果你在脚本或 shell 管道中使用包管理命令,那么最好还是坚持使用apt-get和apt-cache。
获取帮助
1、除了基于 web 的文档,请记住我们可以通过 shell 从 Unix 手册页(通常称为 man 页面)中获得大多数的命令。比如要阅读某页,可以使用man:man page在man中,你可以用箭头键导航。按/搜索页面内的文本,使用q退出。系统 命令 说明Debian / Ubuntuman apt-get更新本地包数据库以及与包一起工作man apt-cache在本地的包数据库中搜索man dpkg和单独的包文件一起工作以及能查询已安装的包man apt通过更简洁,用户友好的接口进行最基本的操作CentOSman yumFedoraman dnfFreeBSD Packagesman pkg和预先编译的二进制包一起工作FreeBSD Portsman ports和 Ports 集合一起工作