标签:软件包安装 所有者 tool oca 文档 local 反向 软件集 作者
源码包就是各种源代码文件组合而成的压缩包,因为 Linux 是开源的,所以源码包中的源代码是可以查看甚至修改的,用户可以根据自己所需要的功能进行安装。但是源码包在安装的时候需要编译,即从源代码 abcd
编译成机器语言 0101
,这个过程需要花费很长的时间。
在 Windows 中的程序都是经过编译的,并且一般认为编译是不可逆的,即反编译(0101->abcd
是非常困难的),即使能勉强完成,也会丢失部分代码。也正因为这个原因,在 Windows 中需要用到某个程序,如果该程序向你收费,你也只能乖乖交钱,除非你不用。这也就是 Linux 开源的魅力所在!
源码包有如下优点:
- 开源,如果有足够的能力,可以修改源码包中的源代码;
- 可以根据自己的需求选择安装特定功能;
- 软件是编译安装,所以更加适合自己的系统,更加稳定高效;
- 卸载方便,只需要把安装目录删除,就能不留痕迹。
源码包有如下缺点:
- 安装过程步骤多,尤其是安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误;
- 编译过程会比较长,所以安装的过程也比二进制包安装时间长;
- 对新手不太友好,因为是编译安装,所以一旦报错,新手很难解决。
二进制包是已经编译好了的包,二进制包中的数据都计算机能直接识别的 0101
,所以安装起来就省去了编译环节,这样可以节省很多时间。在 Linux 中,Redhat 系列的二进制包一般都是 rpm 包,而 Ubuntu 系列的二进制包一般都是 deb 包。
二进制包有如下优点:
- 包管理系统简单,只需要敲几个命令就能实现包的安装,升级,查询和卸载;
- 安装速度比源码包快得多;
二进制包有如下优点:
- 经过编译,不可以再看到源代码,不能根据自己的需求决定安装哪些功能;
- 功能的选择不如源码包灵活
- 效率不如源码包
- 依赖性
对于一些复杂的环境搭建(如LAMP),太过于繁琐,有大神就写出了该环境的安装脚本,只需要运行该脚本,所有的东西都能装上。虽然给脚本安装包另外分了一个类,但是脚本安装包实际上还是安装源码包和二进制包。
脚本安装包有如下优点:
- 安装简单,方便,只需要运行脚本,就能安装脚本包含的所有软件,也不会报错。
脚本安装包有如下缺点:
- 完全丧失自定义性,不能按照自己的需求安装需要的功能,安装的功能完全由脚本编写者帮你决定。
如果是服务器,推荐源码包安装。因为服务器要被成千上万的人访问,源码包执行效率高。
如果是个人设备,推荐 RPM 包,当然也看个人自己的爱好了,想装什么包就装什么包,谁特么管你。
RPM包来源与光盘中,所以要先挂载光盘,才可以进行后面的步骤。挂载的示例如下:
创建挂载点并挂载:
mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom/
所有的 RPM 包都在 /mnt/cdrom/Packages/ 中,可用
ls
命令查看,如下图所示:
与挂载相关的内容,可以参考我的另一篇博客:
Linux基础二(挂载、关机重启与系统等级)
知道了挂载后,还不能直接安装 RPM 包,还必须具备一些关于 RPM 包的准备知识(命名规则和依懒性)
如下所示:
httpd-2.2.15-29.el6.centos.x86_64.rpm
其中:
httpd 为包名
2.2.15 为版本号;
29 为软件发布的次数
el6.centos 为其适合的Linux平台
x86_64 为其适合的硬件平台
rpm 是包的扩展名
包全名指的是完整的包名,包名是开头的第一个单词。
在上面的例子中:
httpd
为包名;
httpd-2.2.15-29.el6.centos.x86_64.rpm
是包全名
- 包全名:在操作没有安装的包的时候(安装和升级),要使用包全名,并且要注意路径(绝对路径或相对路径)
- 包名:已经安装了该软件之后,后续对该包的操作(卸载和查询)使用包名就可以了。当使用包名的时候,实际上是去搜索
/var/lib/rpm/
中的数据库__db.001到__db.004
(里面是乱码)
- 树形依赖:a->b->c
解决:装c再装b再装a- 环形依赖:a->b->c->a
解决:将a、b、c三个包放在一个命令里安装- 模块依赖:也叫库依赖。
最恶心,依赖以.so.n(n为数字)结尾的库文件,该库文件是 /mnt/cdrom/Packages 目录下的某一个rpm包中的文件,要先安装该包
解决:如何判断在哪个包中,查询 www.rpmfind.net
命令:
rpm -ivh 包全名
选项:
-i:安装(install)
-v:显示详细信息(verbose)
-h:显示进度(hash)
--nodeps:不检测依赖性(不要用)
用 rpm 命令来安装软件时要注意其依赖性。可以根据 2.2 节中的思路来进行安装。
示例:安装 httpd
1. 进入挂载目录:cd /mnt/cdrom/Packages/ 2. 安装 httpd:rpm -ivh http-tab(2次tab) 3. 经过 2. 后会提示几个 rpm 包,其中: 1. httpd-2.2.15-29.centos.x86_64.rpm 为主包 2. httpd-devel-* 为库包 3. httpd-manual-* 为文档包 4. httpd-tools-* 为工具包 4. 一般先安装主包,再安装附加包
注意:有两个100% 才算完成,第一个100% 是准备成功,第二个100% 出现才算安装成功
命令:
rpm -Uvh 包全名
选项:
-U:升级(Upgrade)
--nodeps:不检测依赖性(不要用)
升级相当于安装一个版本更新的安装包,你也可以用升级命令来安装新包。
命令:
rpm -e 包名
选项:
-e:卸载(erase)
--nodeps:不检测依赖性(不要用)
说明:
- 卸载时只需输入包名即可,因为该软件包在安装的时候已经写入
/var/lib/rpm/
中的数据库中了- 卸载命令依然存在依赖性,按照安装时的反序卸载即可
- rpm 包在安装时没有指定安装位置,安装位置是该rpm包作者定义好的默认位置(如下图所示),会分布在磁盘的各个部分,若要手工删除不方便,所以才有了卸载命令。
- 而源码包没有卸载命令,因为源码包在安装过程中可以指定安装位置,只要把软件包安装位置所在目录删除就会将软件彻底删除。
命令:
rpm –q 包名 // 查询指定软件包是否安装
rpm –qa // 查询所有已安装的软件包
rpm –qi 包名 // 查询指定包名的详细信息(里面只有帮助网站有点用)
rpm –qip 包全名 // 查询指定未安装包的详细信息(注意路径)
rpm –ql 包名 // 查询指定软件包都安装在哪些位置了
rpm –qf 系统文件名 // 查询该系统文件属于哪一个软件(必须是已经安装了的软件生成的文件才能反向追查)
rpm -qR 包名 // 查看软件包的依赖关系 (–p 未安装的软件包)
选项:
-q:查询(query)
-a:所有(all)
-i:信息(information)
-p:包(package)
-l:位置(local)
-f:文件(file)
在查询的时候可以灵活应用管道符搭配 grep 命令使用
命令:
rpm –V 已安装的包名 // 校验指定rpm包中的文件
选项:
-V (verify) 校验
示例:
rpm -V httpd
如果文件未被修改,则不会出现任何提示,若文件被修改,则会出现以下提示:
其中,验证内容(即文件前面的 9 个.
和一个c
)分别代表:
S:文件的大小是否被改变
M:文件的类型或文件的权限是否被改变
5:文件的MD5校验和是否改变(可看成是文件内容是否改变)
D:设备的主从代码是否改变
L:文件路径是否改变
U:文件的属主(所有者)是否改变
G:文件的属组是否改变
T:文件的修改时间是否改变
c:这个字符所占的位置有以下意义:
c:配置文件
d:普通文档
g:鬼文件,很少见,就是该文件不应该被这个 RPM 包所包含
L:授权文件
r:描述文件
当某一个软件的某一个配置文件被误删除了,可以通过来提取命令来将该文件从 RPM 包提取出来。
TODO
TODO
标签:软件包安装 所有者 tool oca 文档 local 反向 软件集 作者
原文地址:http://www.cnblogs.com/myyd/p/7868608.html