Ubuntu包管理

[TOC]

写在前面

刚开始使用linux实在是一头雾水,都是看着教程自己在命令行里一行一行敲,成功不成功为什么不成功都不明白,每次用完linux都在想,我是谁,我在哪,我在干什么。。。

这里写图片描述

安装软件也是上网搜,看见apt吧啦吧啦或者yum吧啦吧啦,自己在命令行照着敲一遍,然后回车突突突出现一堆提示信息依赖树触发器什么的,然后有时输入个密码输入个yes,安装完成。又继续默默思考我是谁我在哪我在干什么。。。

这里写图片描述

用了一阵ubuntu有点上手之后就打算了解一下linux的软件安装机制。

不同的理念^1

linux与windows实在有很大的理念差异。不说商业运作,盖茨在微软的发展阶段利用DOS的兼容性迅速打开用户市场,在windows1,windows2之后的成功之作windows3.x又对当时他的竞争对手重拳出击。后来,网络开始普及,windows利用IE的捆绑销售抢占先机,后来其他的很多软件也是捆绑销售。虽然当时微软就有很多的反垄断诉讼,盖茨也通过各种手段处理这些问题。但是不提褒贬,盖茨的确可以称得上是一个“枭雄”,而且他的windows对于pc的普及也的确起到了莫大贡献。

而对于linux走的却是一条截然不同的开放之路(当然linux也有收费的服务,但是这和开源并不矛盾),在这里我主要讲GNU和FSF。我们的主人公是Stallman,在百度百科上可以看见他的介绍是“自由软件运动的精神领袖”,而本人是一个长得很像哈利波特中的海格的一个大叔。由于历史环境原因和其他的种种因素,他一直想成立一个开放的程序员团体来为自由软件而工作,但一直没有成功。

后来1983年他接触到了Unix,觉得这个操作系统的移植性非常好,便将自己的工作环境迁移到Unix下,这是他迈出的第一步。1984年,他开始了GUN项目,这个项目的目的是创建一个自由开放的UNIX
操作系统
,他开始独立着手编写一些免费的Unix来为自己的项目打开知名度。他编写的著名软件有gcc,emacs,bash,成立自由软件基金会,并且为了防止自己苦心经营的GNU为其他的商家做嫁衣,与律师草拟通用公共许可证(GPL),并称之为CopyLeft。这些都在1990年左右完成。

开放源码手动编译

make

这个开放源码最初的目的就是大家一起为一个软件团队工作,形成自由的生态圈,还有就是每个人可以自己改动并供自己使用,也就是可以私人订制。所以我们可以下载源代码,按照自己的喜好阅读并修改源码,然后自行编译安装。
这也就是make程序做的事情,它会根据makefile的参数配置,自动编译链接安装。

Tarball

tarball实际上就是源码的压缩包,也就是我们下载的.tar.gz文件。里面通常会有源代码,程序检测文件(生成makefile)和相关信息(readme等)。

安装自动化

而这个步骤全要用户亲力亲为可能又有些麻烦,懒是科技发展的重要推动力。所以软件厂商便自己编译好了很多二进制文件,只要系统和环境对应,下载之后就能直接安装。但是如果下载了很多软件我想要管理怎么办?下载其中一个软件还需要以来很多别的软件怎么办?想要及时更新怎么办?那么把自己下载的历史信息记录下来,软件也记录自己的版本信息和依赖包,服务器也记录这些信息,这就是软件管理器了。
RedHat主要是是rpm和更高级的yum,Debian主要是dpkg和更高级的apt。其实两者的思想各功能都大同小异,这里只着重介绍dpkg和apt。

源和软件仓库实际上是一个意思,厂商将编译后的二进制文件和软件信息存放至服务器,用户需要安装软件时,包管理器自动分析本机和容器(repository)内的信息,下载需要的包并自动安装,安装后将新安装的软件信息存放至本地数据库。如果有前置软件没有安装,rpm和dpkg会提示安装失败,也可以强制安装,yum和apt会自动安装全部需要的依赖包。更新和卸载也同理。
这些源的位置记录在/etc/apt/sources.list,我们可以手动修改这些文件,但是修改重要系统配置前先备份是一个好习惯(sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup)。

安装位置

而这些软件默认的安装位置就是以下几个位置:
| 位置 | 信息 |
|——-|——|
|/usr/bin|二进制文件|
|/usr/lib|动态函数库文件|
|/usr/share/doc|使用手册和帮助文档|
|/usr/share/man|man page|

而我自己安装软件比如一些IDE或者Hadoop等开源软件的时候,喜欢将该软件的根目录放到/usr/local下,这样安装的好处是卸载方便,直接删除就基本完成了,而且不同的软件泾渭分明,不会说大家的文件混在一起不好找。如果是那样只能使用locate或者find之类的命令辅助查询了。但是这样的不好之处就是导致man命令和一些二进制命令不能直接使用,这也是为什么我们安装完之后需要配置PATH的原因,man命令同理,如果有需要可以在/etc/manpath.config文件中定义,这样就能查询该软件的man手册了。

软件管理

使用包管理器可以方便的查询/更新/安装/卸载等等。例如可以更新全部软件,查看软件的正向或者反向依赖关系(就是依赖谁或者被谁依赖),获取已安装或者未安装的软件信息,检验,缓存等功能。
需要注意的是有时本地数据记录信息损坏或者不一致,我们可以手动更新软件包列表,使用apt-get update

我常用的命令

command info
apt-get update 更新软件包列表
apt-get upgrade 升级
dpkg -l 列出已安装软件
dpkg –status [package] 已安装包的信息
apt-get remove [package] 卸载
apt-get install [package] 安装
apt-cache depends [package] 列出依赖关系
apt-cache rdepends [package] 列出反向依赖关系
apt-cache stats 缓存状态
apt-get autoclean 自动清理

如有错误,欢迎指正。

本站总访问量