南郑| 荥阳| 贵州| 淮阴| 津市| 五台| 江油| 昆明| manbetx官网 亚洲城游戏平台 靖西| dafabet888娱乐场 泾源| 同江| 神木| 88bf娱乐网 南海镇| 孝感| 北戴河| manbetx娱乐 济源| 屯昌| BR88 贵港| fun78 亚洲城ca88手机网页版 渠县| manbetx万博 海盐| 云浮| 克拉玛依| 忻州| ca88亚洲城电脑版 冠亚娱乐 乾安| 宿松| 恭城| weide888 宣城| 西固| 零陵| 台前| 抚松| 高青| 3344555 韶山| 巴东| 大发888bet 乐天堂娱乐 伊金霍洛旗| 中方| 太仓| 英山| 岑溪| 九州体育 雷波| 乐天堂fun88体育 鄂伦春自治旗| 馆陶| dafabet黄金娱乐场 武平| manbetx88 dafa888bet 蒙山| 宜城| 景德镇| 万州| manbet 赫章| 文水| betway88 乐天堂娱乐 宜川| 凤翔| 宁陕| 亚洲城vip积分登陆 岢岚| 绥滨| 乌审旗| dafa888 BR88 临城| 赣县| 薛城| 红河| weide1946 dafa888经典版网页 沙湾| 玉田| 灌云| 灌云| 长汀| 旬邑| 秦安| 曹县| 闽侯| 郓城| 公安| dafabet888 罗源| 丹棱| 定日| 玉山| 沛县| 高陵| 波密| 雷山| 88bifa 泰宁| 韦德88 襄阳| 万博官网 瓦房店| 宁陕| 井冈山| br88 靖宇| 分宜| 安多| 手机版大发888下载 阿拉尔| 安远| manbetx体育 郴州| 松阳| 肥乡| 惠安| manbetx 万博app怎么样 溆浦| 万博体育官网登录 民丰| 陆河| 满城| 江油| bwin88 神农架林区| 献县| 西盟| dafa888bet网页版 潞西| 大奖88 盈江| manbetx官网 康马| manbetx官网 琼海| 平泉| 昔阳| 汾阳| ca661亚洲城手机版 那坡| 墨竹工卡| 康县| 冠亚娱乐 临洮| 旅顺口| 88bifa.com 李沧| 开县| 吉利| 丹棱| 无棣| 蓝山| fun888 uedbet备用 芜湖市| 普格| bwin 新田| 新都| bwin必赢 格尔木| 仁寿| app.1manbetx.com 平凉| dafa888bet 和顺| 南海| 赵县| 安达| 姚安| 山亭| 万博app 遂川| br88 www.3344555.com uedbet网址 八一镇| 九台| 咸宁| 灵寿| 鄯善| betway必威登陆 金门| 井陉矿| bwin网站 北安| 唐海| 大奖888娱乐 呼玛| 万博app 冠亚娱乐 uedbet娱乐 洛阳| 张家口| 昭通| 万博manbetx官网 uedbet体育 科尔沁右翼前旗| 绥阳| 石屏| 平定| 宁武| 博管理 巴林左旗| 大奖 沂南| 冠亚娱乐 BR88官网 泽普| 甘肃| 新万博体育 88bf娱乐 南华| bwin网站 陈仓| 萧县| 大姚| 平安| 来安| manbetx官网登陆 丹棱| 大发888 杜集| 宝鸡| 扶余| 六安| 神木| 什邡| bwin 韦德1946 优德娱乐88 万博manbet ca661亚洲城手机版 br88冠亚 秭归| manbetx官方 姜堰| 香格里拉| 扎囊| 磁县| 留坝| 江宁| BR88 佛山| 弋阳| 雷波| 吐鲁番| 长治市| betway必威体育 静海| 优德w88 uedbet为什么谢幕 乐安| 百喜登录 甘孜| 海门| 河北| 元江| 芦山| 饶河| 苹果系统手机ag客户端 桂阳| 冠亚br88 BR88 克拉玛依| 姚安| 高阳| 朝天| 大发快3开奖结果历史 和静| 百喜娱乐 深圳| BR88 ca888亚洲城 fun888 manbetx体育 突泉| 伊吾| uedbet倒闭 betway88 万博app信任 1xbet吧 徐闻| 西安| 百喜娱乐 长治县| betway88必威 彭山|

安庆江豚保护区“被瘦身”追踪:针对突出问题即知即改

2018-12-13 14:01 来源:中国经济网陕西

  安庆江豚保护区“被瘦身”追踪:针对突出问题即知即改

  ued体育官网说到十防九空,实际上我们现在十防九不空。另一方面,继续严控过剩行业低效产能增量,重点培育市场自动出清力量和机制。

  第一,严格遵守党的政治纪律和政治规矩。  沈建明介绍,中国地质调查局学习教育总体上是按照区分层次、多种形式,夯实基础、联学联做,牢牢把握住学习教育主体内容的方式进行推进。

    民政部社会组织管理局副局长廖鸿、民政部社会组织服务中心党委书记刘忠祥分别围绕“推动行业协会商会持续健康发展”“深入学习贯彻党的十九大精神,加强行业协会商会党建工作”作了专题讲座。”  近日,新乡市委办公室专门邀请年届八旬的市政协原副主席王玉堂,结合自身工作经历,以“理想信念传统”为主题进行专题辅导。

  出售美债的收入可以用于对国内受损经济实体的补偿、增加“一带一路”沿线的投资以及购买黄金、欧债等。很多自媒体账号所有者对法律制度了解不多,甚至对于自己的言论表达自由,应当遵循什么样的法律规则也不是非常的清楚。

有人认为,清爽同志关系从互称同志开始,互称同志理所应当,应该成为自觉、成为常态。

    规矩,是做人做事的基本规则。

    于春生强调,税务总局党委第一轮巡视首先是政治巡视,必须坚守政治巡视定位;同时要突出“专”的特点,紧扣主题,紧盯被巡视党委落实国税地税征管体制改革政治责任进行“再监督,再发现”。本案中,奚明强向公安部申请公开的三个文件及其具体内容,是公安部作为刑事司法机关履行侦查犯罪职责时制作的信息,依法不属于《政府信息公开条例》第二条所规定的政府信息。

    党的十一届三中全会等反映党中央推进改革开放重大时间节点、重大历史事件、重大决策部署的历史照片,拉开中国农村改革大幕的安徽小岗村18位农民按下包产到户“红手印”的雕塑,长征系列运载火箭、天宫号空间站等模型,体现40年来经济建设、政治建设、文化建设、社会建设、生态文明建设历史性成就与变革的实物和资料,呈现全面推进国防和军队现代化、推动全方位对外开放、加强和改进党的建设等图片……逼真的实物模型、详实的图片图表、丰富的视频资料,吸引了习近平等领导同志的目光,他们不时停下脚步仔细观看,听取工作人员讲解,并询问有关情况。

  凡是党章规定党员必须做到的,领导干部要首先做到;凡是党章规定党员不能做的,领导干部要带头不做。  要事难事看担当。

    新华社上海11月16日电中央宣传部16日向全社会公开发布王逸平的先进事迹,追授他“时代楷模”称号。

  wofacaidafa888  新组建的各省税务局在税务总局和省委、省政府领导下,把握改革节奏、创新工作方法、科学精细施工,充分发挥党建引领作用,压实联合党委主体责任,建立起一套运转高效的组织机制体系、制度规范体系和沟通交流信息体系,扎实推进“改好省局树样板”与“市县推进全覆盖”各项工作有力有序有效开展。

    在开班仪式上,李和风指出,本次培训班是我院历史上第一次组织对全院民主党派基层组织负责人的培训。对出口国际市场尤其是出口重点地区的首台套、首版次、首批次产品加大应用示范支持力度,可最高按照专项支持比例30%上限给予支持。

  BR88 ca88亚洲城手机版 3344555开奖结果

  安庆江豚保护区“被瘦身”追踪:针对突出问题即知即改

 
责编:
|
|
51CTO旗下网站
|
|
移动端

带你了解包管理器的进化

Linux 较早采用了维护一个中心化的软件仓库来发布软件更新这种做法,用户可以在这个软件仓库里查找并安装软件。在这篇文章里, 笔者将回顾在 Linux 上的如何进行软件安装的历史,以及现代操作系统如何保持更新以应对软件安全漏洞(CVE)不断的曝光。

作者:Steve Ovens来源:Linux中国|2018-12-13 16:51

带你了解包管理器的进化

包管理器在 Linux 软件管理中扮演了重要角色。这里对一些主要的包管理器进行了对比。

今天,每个可计算设备都会使用某种软件来完成预定的任务。在软件开发的上古时期,为了找出软件中的“虫”和其它缺陷,软件会被严格的测试。在近十年间,软件被通过互联网来频繁分发,以试图通过持续不断的安装新版本的软件来解决软件的缺陷问题。在很多情况下,每个独立的应用软件都有其自带的更新器。而其它一些软件则让用户自己去搞明白如何获取和升级软件。

Linux 较早采用了维护一个中心化的软件仓库来发布软件更新这种做法,用户可以在这个软件仓库里查找并安装软件。在这篇文章里, 笔者将回顾在 Linux 上的如何进行软件安装的历史,以及现代操作系统如何保持更新以应对软件安全漏洞(CVE)不断的曝光。

那么在包管理器出现之前在 Linux 上是如何安装软件的呢?

曾几何时,软件都是通过 FTP 或邮件列表(LCTT 译注:即通过邮件列表发布源代码的补丁包)来分发的(最终这些发布方式在互联网的迅猛发展下都演化成为一个个现今常见的软件发布网站)。(一般在一个 tar 文件中)只有一个非常小的文件包含了创建二进制的说明。你需要做的是先解压这个包,然后仔细阅读当中的 README 文件, 如果你的系统上恰好有 GCC(LCTT 译注:GNU C Compiler)或者其它厂商的 C 编译器的话,你得首先运行 ./configure 脚本,并在脚本后添加相应的参数,如库函数的路径、创建可执行文件的路径等等。除此之外,这个配置过程也会检查你操作系统上的软件依赖是否满足安装要求。如果缺失了任何主要的依赖,该配置脚本会退出不再继续安装,直到你满足了该依赖。如果该配置脚本正常执行完毕,将会创建一个 Makefile 文件。

当有了一个 Makefile 文件时, 你就可以接下去执行 make 命令(该命令由你所使用的编译器提供)。make 命令也有很多参数,被称为 make 标识flag,这些标识能为你的系统优化最终生成出来的二进制可执行文件。在计算机世界的早期,这些优化是非常重要的,因为彼时的计算机硬件正在为了跟上软件迅速的发展而疲于奔命。今日今时,编译标识变得更加通用而不是为了优化哪些具体的硬件型号,这得益于现代硬件和现代软件相比已经变得成本低廉,唾手可得。

最后,在 make 完成之后, 你需要运行 make install (或 sudo make install)(LCTT 译注:依赖于你的用户权限) 来“真正”将这个软件安装到你的系统上。可以想象,为你系统上的每一个软件都执行上述的流程将是多么无聊费时,更不用说如果更新一个已经安装的软件将会多复杂,多么需要精力投入。(LCTT 译注:上述流程也称 CMMI 安装, 即Configure、Make、Make Install)

那么软件包是什么?

软件包package(LCTT 译注:下文简称“包”)这个概念是用来解决在软件安装、升级过程中的复杂性的。包将软件安装升级中需要的多个数据文件合并成一个单独的文件,这将便于传输和(通过压缩文件来)减小存储空间(LCTT 译注:减少存储空间这一点在现在已经不再重要),包中的二进制可执行文件已根据开发者所选择的编译标识预编译。包本身包括了所有需要的元数据,如软件的名字、软件的说明、版本号,以及要运行这个软件所需要的依赖包等等。

不同流派的 Linux 发行版都创造了它们自己的包格式,其中最常用的包格式有:

  • .deb:这种包格式由 Debian、Ubuntu、Linux Mint 以及其它的变种使用。这是最早被发明的包类型。
  • .rpm:这种包格式最初被称作红帽包管理器Red Hat Package Manager(LCTT 译注: 取自英文的首字母)。使用这种包的 Linux 发行版有 Red Hat、Fedora、SUSE 以及其它一些较小的发行版。
  • .tar.xz:这种包格式只是一个软件压缩包而已,这是 Arch Linux 所使用的格式。

尽管上述的包格式自身并不能直接管理软件的依赖问题,但是它们的出现将 Linux 软件包管理向前推进了一大步。

软件仓库到底是什么?

多年以前(当智能电话还没有像现在这样流行时),非 Linux 世界的用户是很难理解软件仓库的概念的。甚至今时今日,大多数完全工作在 Windows 下的用户还是习惯于打开浏览器,搜索要安装的软件(或升级包),下载然后安装。但是,智能电话传播了软件“商店”(LCTT 译注: 对应 Linux 里的软件仓库)这样一个概念。智能电话用户获取软件的方式和包管理器的工作方式已经非常相近了。些许不同的是,尽管大多数软件商店还在费力美化它的图形界面来吸引用户,大多数 Linux 用户还是愿意使用命令行来安装软件。总而言之,软件仓库是一个中心化的可安装软件列表,上面列举了在当前系统中预先配置好的软件仓库里所有可以安装的软件。下面我们举一些例子来说在各个不同的 Linux 发行版下如何在对应的软件仓库里搜寻某个特定的软件(输出有截断)。

在 Arch Linux 下使用 aurman

  1. user@arch ~ $  aurman -Ss kate
  2.  
  3. extra/kate 18.04.2-2 (kde-applications kdebase)
  4.     Advanced Text Editor
  5. aur/kate-root 18.04.0-1 (11, 1.139399)
  6.     Advanced Text Editor, patched to be able to run as root
  7. aur/kate-git r15288.15d26a7-1 (1, 1e-06)
  8.     An advanced editor component which is used in numerous KDE applications requiring a text editing component

在 CentOS 7 下使用 yum

  1. [user@centos ~]$ yum search kate
  2.  
  3. kate-devel.x86_64 : Development files for kate
  4. kate-libs.x86_64 : Runtime files for kate
  5. kate-part.x86_64 : Kate kpart plugin

在 Ubuntu 下使用 apt

  1. user@ubuntu ~ $ apt search kate
  2. Sorting... Done
  3. Full Text Search... Done
  4.  
  5. kate/xenial 4:15.12.3-0ubuntu2 amd64
  6.   powerful text editor
  7.  
  8. kate-data/xenial,xenial 4:4.14.3-0ubuntu4 all
  9.   shared data files for Kate text editor
  10.  
  11. kate-dbg/xenial 4:15.12.3-0ubuntu2 amd64
  12.   debugging symbols for Kate
  13.  
  14. kate5-data/xenial,xenial 4:15.12.3-0ubuntu2 all
  15.   shared data files for Kate text editor

最好用的包管理器有哪些?

如上示例的输出,包管理器用来和相应的软件仓库交互,获取软件的相应信息。下面对它们做一个简短介绍。

基于 PRM 包格式的包管理器

更新基于 RPM 的系统,特别是那些基于 Red Hat 技术的系统,有着非常有趣而又详实的历史。实际上,现在的 YUM 版本(用于 企业级发行版)和 DNF(用于社区版)就融合了好几个开源项目来提供它们现在的功能。

Red Hat 最初使用的包管理器,被称为 RPM红帽包管理器Red Hat Package Manager),时至今日还在使用着。不过,它的主要作用是安装本地的 RPM 包,而不是去在软件仓库搜索软件。后来开发了一个叫 up2date 的包管理器,它被用来通知用户包的最新更新,还能让用户在远程仓库里搜索软件并便捷的安装软件的依赖。尽管这个包管理器尽职尽责,但一些社区成员还是感觉 up2date 有着明显的不足。

现在的 YUM 来自于好几个不同社区的努力。1999-2001 年一群在 Terra Soft Solution 的伙计们开发了黄狗更新器Yellowdog Updater(YUP),将其作为 Yellow Dog Linux 图形安装器的后端。杜克大学Duke University喜欢这个主意就决定去增强它的功能,它们开发了黄狗更新器--修改版Yellowdog Updater, Modified(YUM),这最终被用来帮助管理杜克大学的 Red Hat 系统。Yum 壮大的很快,到 2005 年,它已经被超过一半的 Linux 市场所采用。今日,几乎所有的使用 RPM 的的 Linux 都会使用 YUM 来进行包管理(当然也有一些例外)。

使用 YUM

为了能让 YUM 正常工作,比如从一个软件仓库里下载和安装包,仓库说明文件必须放在 /etc/yum.repos.d/ 目录下且必须以 .repo 作为扩展名。如下是一个示例文件的内容:

  1. [local_base]
  2. name=Base CentOS  (local)
  3. baseurl=http://7-repo.apps.home.local/yum-repo/7/
  4. enabled=1
  5. gpgcheck=0

这是笔者本地仓库之一,这也是为什么 gpgcheck 值为 0 的原因。如果这个值为 1 的话,每个包都需要被密钥签名,相应的密钥(的公钥)也要导入到安装软件的系统上。因为这个软件仓库是笔者本人维护的且笔者信任这个仓库里的包,所以就不去对它们一一签名了。

当一个仓库文件准备好时,你就能开始从远程软件仓库开始安装文件了。最基本的命令是 yum update,这将会更新所有已安装的包。你也不需要用特殊的命令来更新仓库本身,所有这一切都已自动完成了。运行命令示例如下:

  1. [user@centos ~]$ sudo yum update
  2. Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager
  3. local_base                             | 3.6 kB  00:00:00    
  4. local_epel                             | 2.9 kB  00:00:00    
  5. local_rpm_forge                        | 1.9 kB  00:00:00    
  6. local_updates                          | 3.4 kB  00:00:00    
  7. spideroak-one-stable                   | 2.9 kB  00:00:00    
  8. zfs                                    | 2.9 kB  00:00:00    
  9. (1/6): local_base/group_gz             | 166 kB  00:00:00    
  10. (2/6): local_updates/primary_db        | 2.7 MB  00:00:00    
  11. (3/6): local_base/primary_db           | 5.9 MB  00:00:00    
  12. (4/6): spideroak-one-stable/primary_db |  12 kB  00:00:00    
  13. (5/6): local_epel/primary_db           | 6.3 MB  00:00:00    
  14. (6/6): zfs/x86_64/primary_db           |  78 kB  00:00:00    
  15. local_rpm_forge/primary_db             | 125 kB  00:00:00    
  16. Determining fastest mirrors
  17. Resolving Dependencies
  18. --> Running transaction check

如果你确定想让 YUM 在执行任何命令时不要停下来等待用户输入,你可以命令里放 -y 标志,如 yum update -y

安装一个新包很简单。首先,用 yum search 搜索包的名字。

  1. [user@centos ~]$ yum search kate
  2.  
  3. artwiz-aleczapka-kates-fonts.noarch : Kates font in Artwiz family
  4. ghc-highlighting-kate-devel.x86_64 : Haskell highlighting-kate library development files
  5. kate-devel.i686 : Development files for kate
  6. kate-devel.x86_64 : Development files for kate
  7. kate-libs.i686 : Runtime files for kate
  8. kate-libs.x86_64 : Runtime files for kate
  9. kate-part.i686 : Kate kpart plugin

当你找到你要安装的包后,你可以用 sudo yum install kate-devel -y 来安装。如果你安装了你不需要的软件,可以用 sudo yum remove kdate-devel -y 来从系统上删除它,默认情况下,YUM 会删除软件包以及它的依赖。

有些时候你甚至都不清楚要安装的包的名称,你只知道某个实用程序的名字。(LCTT 译注:可以理解实用程序是安装包的子集)。例如,你想找实用程序 updatedb(它是用来创建/更新由 locate 命令所使用的数据库的),直接试图安装 updatedb 会返回下面的结果:

  1. [user@centos ~]$ sudo yum install updatedb
  2. Loaded plugins: fastestmirror, langpacks
  3. Loading mirror speeds from cached hostfile
  4. No package updatedb available.
  5. Error: Nothing to do

你可以搜索实用程序来自哪个包:

  1. [user@centos ~]$ yum whatprovides *updatedb
  2. Loaded plugins: fastestmirror, langpacks
  3. Loading mirror speeds from cached hostfile
  4.  
  5. bacula-director-5.2.13-23.1.el7.x86_64 : Bacula Director files
  6. Repo        : local_base
  7. Matched from:
  8. Filename    : /usr/share/doc/bacula-director-5.2.13/updatedb
  9.  
  10. mlocate-0.26-8.el7.x86_64 : An utility for finding files by name
  11. Repo        : local_base
  12. Matched from:
  13. Filename    : /usr/bin/updatedb

笔者在前面使用星号的原因是 yum whatprovides 使用路径去匹配文件。笔者不确定文件在哪里,所以使用星号去指代任意路径。

当然 YUM 还有很多其它的可选项。这里笔者希望你能够自己查看 YUM 的手册来找到其它额外的可选项。

时髦的 YumDandified Yum(DNF)是 YUM 的下一代接班人。从 Fedora 18 开始被作为包管理器引入系统,不过它并没有被企业版所采用,所以它只在 Fedora(以及变种)上占据了主导地位。DNF 的用法和 YUM 几乎一模一样,它主要是用来解决性能问题、晦涩无说明的API、缓慢/不可靠的依赖解析,以及偶尔的高内存占用。DNF 是作为 YUM 的直接替代品来开发的,因此这里笔者就不重复它的用法了,你只用简单的将 yum 替换为 dnf 就行了。

使用 Zypper

Zypper 是用来管理 RPM 包的另外一个包管理器。这个包管理器主要用于 SUSE(和 openSUSE),在MeeGoSailfish OSTizen 上也有使用。它最初开发于 2006 年,已经经过了多次迭代。除了作为系统管理工具 YaST 的后端和有些用户认为它比 YUM 要快之外也没有什么好多说的。

Zypper 使用与 YUM 非常相像。它被用来搜索、更新、安装和删除包,简单的使用命令如下:

  1. zypper search kate
  2. zypper update
  3. zypper install kate
  4. zypper remove kate

主要的不同来自于使用 Zypper 的系统在添加软件仓库的做法上,Zypper 使用包管理器本身来添加软件仓库。最通用的方法是通过一个 URL,但是 Zypper 也支持从仓库文件里导入。

  1. suse:~ # zypper addrepo http://download.videolan.org/pub/vlc/SuSE/15.0 vlc
  2. Adding repository 'vlc' [done]
  3. Repository 'vlc' successfully added
  4.  
  5. Enabled     : Yes
  6. Autorefresh : No
  7. GPG Check   : Yes
  8. URI         : http://download.videolan.org/pub/vlc/SuSE/15.0
  9. Priority    : 99

你也能用相似的手段来删除软件仓库:

  1. suse:~ # zypper removerepo vlc
  2. Removing repository 'vlc' ...................................[done]
  3. Repository 'vlc' has been removed.

使用 zypper repos 命令来查看当前系统上的软件仓库的状态:

  1. suse:~ # zypper repos
  2. Repository priorities are without effect. All enabled repositories share the same priority.
  3.  
  4. #  | Alias                     | Name                                    | Enabled | GPG Check | Refresh
  5. ---|---------------------------|-----------------------------------------|---------|-----------|--------
  6.  1 | repo-debug                | openSUSE-Leap-15.0-Debug                | No      | ----      | ----  
  7.  2 | repo-debug-non-oss        | openSUSE-Leap-15.0-Debug-Non-Oss        | No      | ----      | ----  
  8.  3 | repo-debug-update         | openSUSE-Leap-15.0-Update-Debug         | No      | ----      | ----  
  9.  4 | repo-debug-update-non-oss | openSUSE-Leap-15.0-Update-Debug-Non-Oss | No      | ----      | ----  
  10.  5 | repo-non-oss              | openSUSE-Leap-15.0-Non-Oss              | Yes     | ( p) Yes  | Yes    
  11.  6 | repo-oss                  | openSUSE-Leap-15.0-Oss                  | Yes     | ( p) Yes  | Yes    

zypper 甚至还有和 YUM 相同的功能:搜索包含文件或二进制的包。和 YUM 有所不同的是,它在命令行里使用破折号(但是这个搜索方法现在被废除了……)

  1. localhost:~ # zypper what-provides kate
  2. Command 'what-provides' is replaced by 'search --provides --match-exact'.
  3. See 'help search' for all available options.
  4. Loading repository data...
  5. Reading installed packages...
  6.  
  7. S  | Name | Summary              | Type      
  8. ---|------|----------------------|------------
  9. i+ | Kate | Advanced Text Editor | application
  10. i  | kate | Advanced Text Editor | package  

YUM、DNF 和 Zypper 三剑客拥有的功能比在这篇小文里讨论的要多得多,请查看官方文档来得到更深入的信息。

基于 Debian 的包管理器

作为一个现今仍在被积极维护的最古老的 Linux 发行版之一,Debian 的包管理系统和基于 RPM 的系统的包管理系统非常类似。它使用扩展名为 “.deb” 的包,这种文件能被一个叫做 dpkg 的工具所管理。dpgkrpm 非常相似,它被设计成用来管理在存在于本地(硬盘)的包。它不会去做包依赖关系解析(它会做依赖关系检查,不过仅此而已),而且在同远程软件仓库交互上也并无可靠的途径。为了提高用户体验并便于使用,Debian 项目开始了一个软件项目:Deity,最终这个代号被丢弃并改成了现在的 高级打包工具Advanced Pack Tool(APT)。

在 1998 年,APT 测试版本发布(甚至早于 1999 年的 Debian 2.1 发布),许多用户认为 APT 是基于 Debian 系统标配功能之一。APT 使用了和 RPM 一样的风格来管理仓库,不过和 YUM 使用单独的 .repo 文件不同,APT 曾经使用 /etc/apt/sources.list 文件来管理软件仓库,后来的变成也可以使用 /etc/apt/sources.d 目录来管理。如同基于 RPM 的系统一样,你也有很多很多选项配置来完成同样的事情。你可以编辑和创建前述的文件,或者使用图形界面来完成上述工作(如 Ubuntu 的“Software & Updates”),为了给所有的 Linux 发行版统一的待遇,笔者将会只介绍命令行的选项。 要想不直接编辑文件内容而直接增加软件仓库的话,可以用如下命令:

  1. user@ubuntu:~$ sudo apt-add-repository "deb http://APT.spideroak.com.bjsjzh.cn/ubuntu-spideroak-hardy/ release restricted"

这个命令将会在 /etc/apt/sources.list.d 目录里创建一个 spideroakone.list 文件。显而易见,文件里的内容依赖于所添加的软件仓库,如果你想加一个个人软件包存档Personal Package Archive(PPA)的话,你可以用如下的办法:

  1. user@ubuntu:~$ sudo apt-add-repository ppa:gnome-desktop

注意: Debian 原生并不支持本地 PPA 。

在添加了一个软件仓库后,需要通知基于 Debian 的系统有一个新的仓库可以用来搜索包,可以运行 apt-get update 来完成:

  1. user@ubuntu:~$ sudo apt-get update
  2. Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB]
  3. Hit:2 http://APT.spideroak.com/ubuntu-spideroak-hardy release InRelease
  4. Hit:3 http://ca.archive.ubuntu.com/ubuntu xenial InRelease
  5. Get:4 http://ca.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]              
  6. Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [517 kB]
  7. Get:6 http://security.ubuntu.com/ubuntu xenial-security/main i386 Packages [455 kB]      
  8. Get:7 http://security.ubuntu.com/ubuntu xenial-security/main Translation-en [221 kB]    
  9. ...
  10.  
  11. Fetched 6,399 kB in 3s (2,017 kB/s)                                          
  12. Reading package lists... Done

现在新的软件仓库已经在你的系统里安装并更新好了,你可以用 apt-cache 来搜索你想要的包了。

  1. user@ubuntu:~$ apt-cache search kate
  2. aterm-ml - Afterstep XVT - a VT102 emulator for the X window system
  3. frescobaldi - Qt4 LilyPond sheet music editor
  4. gitit - Wiki engine backed by a git or darcs filestore
  5. jedit - Plugin-based editor for programmers
  6. kate - powerful text editor
  7. kate-data - shared data files for Kate text editor
  8. kate-dbg - debugging symbols for Kate
  9. katepart - embeddable text editor component

要安装 kate,简单的运行下面的命令:

  1. user@ubuntu:~$ sudo apt-get install kate

要是删除一个包,使用 apt-get remove

  1. user@ubuntu:~$ sudo apt-get remove kate

要探索一个包的话,APT 并没有提供一个类似于 yum whatprovides 的功能,如果你想深入包内部去确定一个特定的文件的话,也有一些别的方法能帮你完成这个目标,

如: 用 dpkg

  1. user@ubuntu:~$ dpkg -S /bin/ls
  2. coreutils: /bin/ls

或者: apt-file

  1. user@ubuntu:~$ sudo apt-get install apt-file -y
  2. user@ubuntu:~$ sudo apt-file update
  3. user@ubuntu:~$ apt-file search kate

yum whatprovides 不同的是,apt-file search 的问题是因为自动添加了通配符搜索而输出过于详细(除非你知道确切的路径),最终在结果里包括了所有包含有 “kate” 的结果。

  1. kate: /usr/bin/kate
  2. kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katebacktracebrowserplugin.so
  3. kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katebuildplugin.so
  4. kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katecloseexceptplugin.so
  5. kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katectagsplugin.so

上面这些例子大部分都使用了 apt-get。请注意现今大多数的 Ubuntu 教程里都径直使用了 apt。 单独一个 apt 设计用来实现那些最常用的 APT 命令的。apt 命令看上去是用来整合那些被分散在 apt-getapt-cache 以及其它一些命令的的功能的。它还加上了一些额外的改进,如色彩、进度条以及其它一些小功能。上述的常用命令都能被 apt 替代,但是并不是所有的基于 Debian 的系统都能使用 apt 接受安全包补丁的,你有可能要安装额外的包的实现上述功能。

基于 Arch 的包管理器

Arch Linux 使用称为 packman 的包管理器。和 .deb 以及 .rpm 不同,它使用更为传统的 LZMA2 压缩包形式 .tar.xz 。这可以使 Arch Linux 包能够比其它形式的压缩包(如 gzip)有更小的尺寸。自从 2002 年首次发布以来, pacman 一直在稳定发布和改善。使用它最大的好处之一是它支持 Arch Build System,这是一个从源代码级别构建包的构建系统。该构建系统借助一个叫 PKGBUILD 的文件,这个文件包含了如版本号、发布号、依赖等等的元数据,以及一个为编译遵守 Arch Linux 需求的包所需要的带有必要的编译选项的脚本。而编译的结果就是前文所提的被 pacman 所使用的 .tar.xz 的文件。

上述的这套系统技术上导致了 Arch 用户仓库Arch User Respository(AUR)的产生,这是一个社区驱动的软件仓库,仓库里包括有 PKGBUILD 文件以及支持补丁或脚本。这给 Arch Linux 带了无穷无尽的软件资源。最为明显的好处是如果一个用户(或开发者)希望他开发的软件能被广大公众所使用,他不必通过官方途径去在主流软件仓库获得许可。而不利之处则是它必须将依赖社区的流程,类似于 Docker Hub、 Canonical 的 Snap Packages(LCTT 译注: Canonical 是 Ubuntu 的发行公司),或者其它类似的机制。有很多特定于 AUR 的包管理器能被用来从 AUR 里的 PGKBUILD 文件下载、编译、安装,下面我们来仔细看看怎么做。

使用 pacman 和官方软件仓库

Arch 的主要包管理器:pacman,使用标识位而不是像 yumapt 一样使用命令词。例如,要搜索一个包,你要用 pacman -Ss 。和 Linux 上别的命令一样,你可以找到 pacman 的手册页和在线帮助。pacman 大多数的命令都使用了同步(-S)这个标识位。例如:

  1. user@arch ~ $ pacman -Ss kate
  2.  
  3. extra/kate 18.04.2-2 (kde-applications kdebase)
  4.     Advanced Text Editor
  5. extra/libkate 0.4.1-6 [installed]
  6.     A karaoke and text codec for embedding in ogg
  7. extra/libtiger 0.3.4-5 [installed]
  8.     A rendering library for Kate streams using Pango and Cairo
  9. extra/ttf-cheapskate 2.0-12
  10.     TTFonts collection from dustimo.com
  11. community/haskell-cheapskate 0.1.1-100
  12.     Experimental markdown processor.

Arch 也使用和别的包管理器类似的软件仓库。在上面的输出中,搜索结果前面有标明它是从哪个仓库里搜索到的(这里是 extra/community/)。同 Red Hat 和 Debian 系统一样,Arch 依靠用户将软件仓库的信息加入到一个特定的文件里:/etc/pacman.conf。下面的例子非常接近一个仓库系统。笔者还打开了 [multilib] 仓库来支持 Steam:

  1. [options]
  2. Architecture = auto
  3.  
  4. Color
  5. CheckSpace
  6.  
  7. SigLevel    = Required DatabaseOptional
  8. LocalFileSigLevel = Optional
  9.  
  10. [core]
  11. Include = /etc/pacman.d/mirrorlist
  12.  
  13. [extra]
  14. Include = /etc/pacman.d/mirrorlist
  15.  
  16. [community]
  17. Include = /etc/pacman.d/mirrorlist
  18.  
  19. [multilib]
  20. Include = /etc/pacman.d/mirrorlist

你也可以在 pacman.conf 里指定具体的 URL。这个功能可以用来确保在某一时刻所有的包来自一个确定的地方,比如,如果一个安装包存在严重的功能缺陷并且很不幸它恰好还有几个包依赖,你能及时回滚到一个安全点,如果你已经在 pacman.conf 里加入了具体的 URL 的话,你就用用这个命令降级你的系统。

  1. [core]
  2. Server=https://archive.archlinux.org/repos/2017/12/22/$repo/os/$arch

和 Debian 系统一样,Arch 并不会自动更新它的本地仓库。你可以用下面的命令来刷新包管理器的数据库:

  1. user@arch ~ $ sudo pacman -Sy
  2.  
  3. :: Synchronizing package databases...
  4.  core                                                                     130.2 KiB   851K/s 00:00 [##########################################################] 100%
  5.  extra                                                                   1645.3 KiB  2.69M/s 00:01 [##########################################################] 100%
  6.  community                                                                  4.5 MiB  2.27M/s 00:02 [##########################################################] 100%
  7.  multilib is up to date

你可以看到在上述的输出中,pacman 认为 multilib 包数据库是更新到最新状态的。如果你认为这个结果不正确的话,你可以强制运行刷新:pacman -Syy。如果你想升级你的整个系统的话(不包括从 AUR 安装的包),你可以运行 pacman -Syu

  1. user@arch ~ $ sudo pacman -Syu
  2.  
  3. :: Synchronizing package databases...
  4.  core is up to date
  5.  extra is up to date
  6.  community is up to date
  7.  multilib is up to date
  8. :: Starting full system upgrade...
  9. resolving dependencies...
  10. looking for conflicting packages...
  11.  
  12. Packages (45) ceph-13.2.0-2  ceph-libs-13.2.0-2  debootstrap-1.0.105-1  guile-2.2.4-1  harfbuzz-1.8.2-1  harfbuzz-icu-1.8.2-1  haskell-aeson-1.3.1.1-20
  13.               haskell-attoparsec-0.13.2.2-24  haskell-tagged-0.8.6-1  imagemagick-7.0.8.4-1  lib32-harfbuzz-1.8.2-1  lib32-libgusb-0.3.0-1  lib32-systemd-239.0-1
  14.               libgit2-1:0.27.2-1  libinput-1.11.2-1  libmagick-7.0.8.4-1  libmagick6-6.9.10.4-1  libopenshot-0.2.0-1  libopenshot-audio-0.1.6-1  libosinfo-1.2.0-1
  15.               libxfce4util-4.13.2-1  minetest-0.4.17.1-1  minetest-common-0.4.17.1-1  mlt-6.10.0-1  mlt-python-bindings-6.10.0-1  ndctl-61.1-1  netctl-1.17-1
  16.               nodejs-10.6.0-1  
  17.  
  18. Total Download Size:      2.66 MiB
  19. Total Installed Size:   879.15 MiB
  20. Net Upgrade Size:      -365.27 MiB
  21.  
  22. :: Proceed with installation? [Y/n]

在前面提到的降级系统的情景中,你可以运行 pacman -Syyuu 来强行降级系统。你必须重视这一点:虽然在大多数情况下这不会引起问题,但是这种可能性还是存在,即降级一个包或几个包将会引起级联传播的失败并会将你的系统处于不一致的状态(LCTT 译注:即系统进入无法正常使用的状态),请务必小心!

运行 pacman -S kate 来安装一个包。

  1. user@arch ~ $ sudo pacman -S kate
  2.  
  3. resolving dependencies...
  4. looking for conflicting packages...
  5.  
  6. Packages (7) editorconfig-core-c-0.12.2-1  kactivities-5.47.0-1  kparts-5.47.0-1  ktexteditor-5.47.0-2  syntax-highlighting-5.47.0-1  threadweaver-5.47.0-1
  7.              kate-18.04.2-2
  8.  
  9. Total Download Size:   10.94 MiB
  10. Total Installed Size:  38.91 MiB
  11.  
  12. :: Proceed with installation? [Y/n]

你可以运行 pacman -R kate 来删除一个包。这将会只删除这个包自身而不会去删除它的依赖包。

  1. user@arch ~ $ sudo pacman -S kate
  2.  
  3. checking dependencies...
  4.  
  5. Packages (1) kate-18.04.2-2
  6.  
  7. Total Removed Size:  20.30 MiB
  8.  
  9. :: Do you want to remove these packages? [Y/n]

如果你想删除没有被其它包依赖的包,你可以运行 pacman -Rs

  1. user@arch ~ $ sudo pacman -Rs kate
  2.  
  3. checking dependencies...
  4.  
  5. Packages (7) editorconfig-core-c-0.12.2-1  kactivities-5.47.0-1  kparts-5.47.0-1  ktexteditor-5.47.0-2  syntax-highlighting-5.47.0-1  threadweaver-5.47.0-1
  6.              kate-18.04.2-2
  7.  
  8. Total Removed Size:  38.91 MiB
  9.  
  10. :: Do you want to remove these packages? [Y/n]

在笔者看来,Pacman 是搜索一个指定实用程序中的包名的最齐全的工具。如上所示,YUM 和 APT 都依赖于‘路径’去搜索到有用的结果,而 Pacman 则做了一些智能的猜测,它会去猜测你最有可能想搜索的包。

  1. user@arch ~ $ sudo pacman -Fs updatedb
  2. core/mlocate 0.26.git.20170220-1
  3.     usr/bin/updatedb
  4.  
  5. user@arch ~ $ sudo pacman -Fs kate
  6. extra/kate 18.04.2-2
  7.     usr/bin/kate
使用 AUR

有很多流行的 AUR 包管理器助手。其中 yaourtpacaur 颇为流行。不过,这两个项目已经被 Arch Wiki 列为“不继续开发以及有已知的问题未解决”。因为这个原因,这里直接讨论 aurman,除了会搜索 AUR 以及包含几个有帮助的(其实很危险)的选项之外,它的工作机制和 pacman 极其类似。从 AUR 安装一个包将会初始化包维护者的构建脚本。你将会被要求输入几次授权以便让程序继续进行下去(为了简短起见,笔者截断了输出)。

  1. aurman -S telegram-desktop-bin
  2. ~~ initializing aurman...
  3. ~~ the following packages are neither in known repos nor in the aur
  4. ...
  5. ~~ calculating solutions...
  6.  
  7. :: The following 1 package(s) are getting updated:
  8.    aur/telegram-desktop-bin  1.3.0-1  ->  1.3.9-1
  9.  
  10. ?? Do you want to continue? Y/n: Y
  11.  
  12. ~~ looking for new pkgbuilds and fetching them...
  13. Cloning into 'telegram-desktop-bin'...
  14.  
  15. remote: Counting objects: 301, done.
  16. remote: Compressing objects: 100% (152/152), done.
  17. remote: Total 301 (delta 161), reused 286 (delta 147)
  18. Receiving objects: 100% (301/301), 76.17 KiB | 639.00 KiB/s, done.
  19. Resolving deltas: 100% (161/161), done.
  20. ?? Do you want to see the changes of telegram-desktop-bin? N/y: N
  21.  
  22. [sudo] password for user:
  23.  
  24. ...
  25. ==> Leaving fakeroot environment.
  26. ==> Finished making: telegram-desktop-bin 1.3.9-1 (Thu 05 Jul 2018 11:22:02 AM EDT)
  27. ==> Cleaning up...
  28. loading packages...
  29. resolving dependencies...
  30. looking for conflicting packages...
  31.  
  32. Packages (1) telegram-desktop-bin-1.3.9-1
  33.  
  34. Total Installed Size:  88.81 MiB
  35. Net Upgrade Size:       5.33 MiB
  36.  
  37. :: Proceed with installation? [Y/n]

依照你所安装的包的复杂性程度的高低,有时你将会被要求给出进一步的输入,为了避免这些反复的输入,aurman 允许你使用 --noconfirm--noedit 选项。这相当于说“接受所有的预定设置,并相信包管理器不会干坏事”。使用这两个选项时请务必小心!!,虽然这些选项本身不太会破坏你的系统,你也不能盲目的接受他人的脚本程序。

总结

这篇文章当然只能触及包管理器的皮毛。还有很多别的包管理器笔者没有在这篇文章里谈及。有些 Linux 发布版,如 Ubuntu 或 Elementary OS,已经在图形版的包管理器的开发上有了长远的进展。

如果你对包管理器的更高级功能有进一步的兴趣,请在评论区留言,笔者很乐意进一步的写一写相关的文章。

附录

  1. # search for packages
  2. yum search <package>
  3. dnf search <package>
  4. zypper search <package>
  5. apt-cache search <package>
  6. apt search <package>
  7. pacman -Ss <package>
  8.  
  9. # install packages
  10. yum install <package>
  11. dnf install <package>
  12. zypper install <package>
  13. apt-get install <package>
  14. apt install <package>
  15. pacman -Ss <package>
  16.  
  17. # update package database, not required by yum, dnf and zypper
  18. apt-get update
  19. apt update
  20. pacman -Sy
  21.  
  22. # update all system packages
  23. yum update
  24. dnf update
  25. zypper update
  26. apt-get upgrade
  27. apt upgrade
  28. pacman -Su
  29.  
  30. # remove an installed package
  31. yum remove <package>
  32. dnf remove <package>
  33. apt-get remove <package>
  34. apt remove <package>
  35. pacman -R <package>
  36. pacman -Rs <package>
  37.  
  38. # search for the package name containing specific file or folder
  39. yum whatprovides *<binary>
  40. dnf whatprovides *<binary>
  41. zypper what-provides <binary>
  42. zypper search --provides <binary>
  43. apt-file search <binary>
  44. pacman -Sf <binary> 

【编辑推荐】

  1. 用于与非Linux用户一同工作的Linux命令行工具
  2. 在Linux中如何以人性化的方式显示数据
  3. 如何在Linux中切换相同程序的不同版本
  4. 11个步骤完美排查Linux机器是否已经被入侵
  5. 使用Ptrace去拦截和仿真Linux系统调用
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
大家都在看
猜你喜欢

读 书 +更多

游戏关卡设计

《半条命》作者倾心写就 暴雪总裁等业内专家强力推荐 盛大公司专业团队翻译 一起来创造引人入胜的游戏体验吧! 任何精彩游戏的核心部分...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊