专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
OSC开源社区  ·  Bun ... ·  2 天前  
程序员的那些事  ·  OpenAI ... ·  2 天前  
程序员小灰  ·  3个令人惊艳的DeepSeek项目,诞生了! ·  3 天前  
OSC开源社区  ·  2024: 大模型背景下知识图谱的理性回归 ·  5 天前  
程序员小灰  ·  DeepSeek做AI代写,彻底爆了! ·  6 天前  
51好读  ›  专栏  ›  SegmentFault思否

Linux 软件“四”种安装原理详解

SegmentFault思否  · 公众号  · 程序员  · 2017-10-16 08:00

正文

一、Linux软件包分类

1.1 源码包

优点:

  1. 开源,如果有足够的能力, 可以修改源代码

  2. 可以自由选择所需的功能;

  3. 软件是编译安装,所以更加适合自己的系统,更加稳定、效率更高;

  4. 卸载方便;

缺点

  1. 安装过程步骤较多,尤其安装较大的软件集合时(如 LAMP 环境搭建),容易出现拼写错误;

  2. 编译过程时间较长,安装比二进制安装时间长;

  3. 因为是编译安装,安装过程中一旦报错新手很难解决;

注: 对于要求效率的软件,要安装源码包版本,因为是本机编译,更具有兼容性和效率, rpm 包是软件开发者提供的大众版本,可用于不注重效率的应用。

1.2 二进制包( RPM 包)

优点:

  1. 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载;

  2. 安装速度比源码包安装快的多;

缺点:

  1. 经过编译,不再可以看到源代码;

  2. 功能选择不如源码包灵活;

  3. 依赖性;

1.3 yum在线安装

可以方便的解决 RPM 安装依赖文件,一条命令就可以帮用户从网上(本地也可以)找到安装包进行安装。

注: RedHat yum 是收费服务,而 CentOS yum 是免费服务。

1.4 脚本安装包

所谓的脚本安装包如: lnmp/lamp LNMP一键安装包,就是 把复杂的软件包安装过程写成了程序脚本 ,初学者可以执行脚本实现一键安装。但 实际安装的还是 源码包和二进制包

优点: 安装简单、快捷;

缺点: 完全丧失了自定义性;

总结: 其实 Linux 中软件包只有 源码包 二进制(RPM)包 两种软件安装包。

二、RPM命令管理

2.1 RPM包的来源

所有 RPM 包都在 系统光盘 Packages 目录中

2.2 RPM包命名规则

软件包名-软件版本-软件发布的次数-适合的Linux平台-适合的硬件平台-包扩展名

  1. httpd- 2.2.15-15.el6.centsos.1.i686.rpm

  2. httpd软件包名-2.2.15软件版本-15发布的次数-el6.centos适合的Linux平台-i686适应的硬件平台-rpm包扩展名,el6是redhat的企业版

2.3 RPM包依赖性

  1. a、树形依赖:a->b->c    解决方法:从后往前安装

  2. b、环形依赖:a->b->c->a 解决方法:放在一条命令中安装即可

  3. c、模块依赖:库文件依赖,库也叫模块,就是linux当中的函数,它有一个典型的特征,就            

  4.  是以【.so.数字】结尾,它依赖的其实是一个文件,而不是软件包。该文件藏身在某一        

  5.  个软件包当中。我们只要将该文件所在的软件包安装上,该文件也就安装了。解决方法:

  6.  登录www.rpmfind.net网站,输入库文件名称查询到对应的rpm包,然后安装即可。

2.4 yum在线安装

可以方便的解决依赖文件,一条命令就可以帮用户从网上(本地也可以)找到安装包进行安装。

注: RedHat yum 是收费服务,而 CentOS yum 是免费服务。

2.5 RPM安装


rpm -ivh 包全名

  1. -i(install) 安装; -v(verbose) 详细信息; -h(hash) 进度;

2.6 RPM升级和卸载

升级命令

rpm-Uvh 包全名 (要升级到的软件版本),如果没有安装这个软件的任何版本,这个命令可以代替 rpm-ivh

卸载命令

  1. rpm -e 包名(比如Httpd,不需要包全名)

这个命令不同于安装和升级,它可以在任何目录运行,原理是去 /var/lib/rpm 目录中的数据库(如 __db0 )中查找对应的软件包(已经安装过的rpm包都在这些数据库中),然后卸载。 --nodeps 这个选项不管是在安装和卸载的时候,最好都不要使用。

rpm 安装包安装的位置是由软件包开发者决定的,安装后的位置会非常凌乱,所以最好是使用 rpm-e 命令卸载。

相对于二进制安装,源码安装是指定安装目录了,卸载的时候只需要删除对应的目录就可以完全的卸载,不留一点残余。

2.7 RPM包查询

1.查询是否安装

  1. rpm -q  包名

  2. rpm -qa

q ==> query a ==> all

查询所有已经安装的RPM包

  1. rpm -qa | grep httpd

grep 后跟正则表达式, find 后跟通配符

2. 查询软件包详细信息

  1. rpm -qi 包名

  2. rpm -qip 包全名

i ==> infomation

p ==> package : 查询 未安装包 信息

有时遇到问题, 可根据未安装包信息中所提供的网站进行查询资料

3. 查询包中文件安装位置

  1. rpm -ql 包名

l ==> list -p ==> package : 查询未安装包信息

可查看包作者欲将包安装的位置

RPM 包默认安装位置


4. 查询系统文件属于哪个 RPM 包

  1. rpm -qf 系统文件名

f ==> file : 查询系统文件属于哪个软件包

该文件必须是通过 RPM 包安装的

5. 查询软件包的依赖性

  1. rpm -qR 包名

R ==> requires : 查询软件包的依赖性 p ==> package : 查询未安装包的信息

2.8 RPM 包校验

  1. rpm -V 已安装的包名

-V ==> (verify) : 校验指定RPM包中的文件 执行 rpm -V httpd 后, 无任何提示, 代表该文件没有被做任何修改

判断本地的 apache 与官方给出的是否一致, 从而判断是否被人修改 修改文件 /etc/httpd/conf/httpd.conf , 在注释行添加任意内容后, 再次执行 提示 : S.5....T. c /etc/httpd/conf/httpd.conf

验证内容中的8个信息:

  1. S : 文件大小是否改变

  2. M : 文件的类型或文件的权限( rwx )是否被改变

  3. 5 : 文件MD5 校验和是否改变( 可以看成文件内容是否改变 )

  4. D : 设备的主从代码是否改变

  5. L : 文件路径是否改变

  6. U : 文件的属主( 所有者 ) 是否改变

  7. G : 文件的属组是否改变

  8. T : 文件的修改时间是否改变

验证内容中的文件类型:

  1. c (config file) : 配置文件

  2. d (documentation) : 普通文档

  3. g (ghost file) : "鬼"文件, 很少见, 就是该文件不应该被这个RPM包包含

  4. L (license file) : 授权文件

  5. r (read me) : 描述文件

  6. MD5校验

作用: 用来校验文件的完整性(文件内容是否被改变)。

例如, 在官网下载的游戏, 官方会给出MD5校验码, 将下载的游戏通过专用的MD5校验工具校验后生成一份MD5校验码, 对比两份校验码是否一致, 不一致则说明,下载的文件可能丢包, 可能文件损坏, 可能被其他人动过手脚一直木马等。

三、yum在线安装

3.1 yum源文件

yum的优点: 将所有软件包放到官方服务器上,当进行 yum 在线安装时,可以 自动解决依赖性问题 。( rpm缺点 :安装过程中, rpm 包依赖性太强)。

redhat yum 在线安装需要付费, CentOS 不需要。

在【 /etc/yum.repos.d/ 】目录中,默认有4个yum源文件,其中【 CentOS-Base.repo 】是基本 yum 源文件,如果我们能上网,那它是默认生效的,而其他的都是默认不生效的。


mirrorlist和baseurl一个是主站点,一个是辅助站点,这两个有一个就行。可以找一个163或清华大学的yum源更换。

  • gpgcheck:一般都要开启,开启后安装时会验证rpm包是否是官方的,以保证系统安全。

  • gpgkey:默认系统安装后,在目录【/etc/pki/rpm-gpg】下都会存在数字证书。注:前面的【file://】表示文件协议,后面的【/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6】是数字证书的位置。

  1.    [root@CentOS6 ~]# cd /etc/pki/rpm-gpg

  2.    [root@CentOS6 rpm-gpg]# ll

总用量 16

  1.    -rw-r--r--. 1 root root 1706 1127 2013 RPM-GPG-KEY-CentOS-6

  2.    -rw-r--r--. 1 root root 1730 1127 2013 RPM-GPG-KEY-CentOS-Debug-6

  3.    -rw-r--r--. 1 root root 1730 1127 2013 RPM-GPG-KEY-CentOS-Security-6

  4.    -rw-r--r--. 1 root root 1734 1127 2013 RPM-GPG-KEY-CentOS-Testing-6

3.2 光盘yum源搭建:

1、挂载光盘 mkdir /media或mnt/cdrom:建立挂载点; mount /dev/cdrom /media或mnt/cdrom:挂载光盘;

2、使网络yum源失效:

cd/etc/yum.repos.d/:进入yum源目录; mv CentOS-Base.repo CentOS-Base.repo.bak:修改Yum源文件后缀名,使其失效;(判断yum源是根据后缀名repo来实现的,修改后缀名则可以使该yum源失效)

3、使光盘yum源生效: vim CentOS-Media.repo baseurl=file:///mnt或media/cdrom:地址为光盘挂载地址,如果有多余的光盘挂载点,需要注释掉不存在或不需要使用的光盘挂在地址; enabled=1:把enabled=0改为enabled=1,使该yum源配置生效;

4、命令:yum list:该命令可验证目前使用的yum源有哪些可用的rpm包;

3.3 yum命令

1.查询

  1. yun list --查询所有可用软件包列表

  2. yum search 关键字 --搜索服务器上所有和关键字相关的包

2.安装

  1. yum -y install 包名 (-y 自动回答yes)

  2. yum安装只写包名即可! eg:yum -y install gcc --c语言编译器

3.升级/卸载

升级: yum-y update包名

  1. -update:升级;

  2. -y:自动回答yes;

卸载: yum-y remove包名

  1. -remove:卸载;

  2. -y:自动回答yes;

!!!服务器使用最小化安装,用什么软件安装什么,尽量不要卸载!!!

4.yum软件组管理命令 yum grouplist:列出所有可用的软件列表; yum groupinstall 软件组名:安装指定软件组,组名可以由grouplist查询出来; yum gourpremove 软件组名:卸载指定软件组;

①LANG=en US:切换至英文;(临时生效) ②LANG=zh CN.utf8:切换至中文;(临时生效)

四、源码包安装

4.1 源码包与RPM包区别

安装之前的区别: 概念上的区别 安装之后的区别: 安装位置不同


4.2 安装位置不同带来的影响

4.2.1 rpm包安装位置

rpm 包安装的服务可以使用系统服务管理命令( service )来管理, 例如: RPM 包安装的 apache 的启动方法是:

  1. /etc/rc.d/init.d/httpd start

  2. service httpd start

请注意: rpm 包安装也是可以指定安装位置的, service 命令是 redhat 的专有命令,所以 /etc/rc.d/init.d/XXXX start 是最标准的启动方式。如果为 rpm 包指定了安装目录,抱歉,两个启动方法都不能用了。

4.2.2 源码包安装位置

安装在指定位置当中,一般是:

  1. /usr/local/软件名/

源码包安装的服务, 只能用绝对路径进行服务的管理。

4.2.3 总结

1、源码包是不能使用【 service 】命令来启动服务,因为源码包的安装位置由用户指定,放在哪并不统一。而rpm包安装后,通常都是放在【 /etc/rc.d/init.d 】目录中的,而【 service 】命令执行时,会自动搜索该目录,所以 rpm 包安装的服务可以使用【 service 】命令。 2、综上所述,安装位置不同,启动方法是有区别的。 3、使用绝对路径启动程序的方法是通用的,通常软件包中会写上启动程序的方法的。 4、如果将源码包安装后的启动程序复制到【 /etc/rc.d/init.d 】目录中,则也是可以使用【 service 】命令执行的。 5、源码包一定要指定安装目录,不指定的话,会和 rpm 一样安装的到处都是,但是,不能用-e卸载了。一般指定目录是 /usr/local (可以看出 Windows ProgramFiles )。同时,源码包不能用 service 命令启动的,原因在于, service 命令是搜索 /etc/rc.d/init.d/ 目录来启动服务的。

4.3 源码包安装步骤


4.3.1 安装准备和源码包获取

1、由于源码都是 c 语言写的,所以要先安装 c 语言编译器: gcc

2、从官方网站下载源码包,若是下载到了 windows 上面,可以使用 winSCP 传到 linux 上。 注:若已安装了二进制包,则源码包也是可以继续安装的,因为两者安装目录不一样。但是,并不建议这样做,因为端口会冲突。

对于要求效率的软件,要安装源码包版本,因为是本机编译,更具有兼容性和效率,







请到「今天看啥」查看全文