Linux系统中安装软件的三种方法
在Linux系统中安装软件有三种方法:源代码安装、RPM包安装、YUM安装。

源码安装:由于在Linux系统中使用的绝大多数软件都是开源软件,软件作者在发布软件时直接提供的就是软件的源代码。用户在取得应用软件的源码文件后,可以根据自身需求对软件进行修改或定制,然后在自己的系统上重新编译,即可生成能在该系统上执行的程序文件。通过源码安装,用户可以获得最新的应用程序,可以定制更灵活、丰富的功能,而且使软件可以跨越计算机平台,在所有版本的Linux系统中都能使用。但源码安装方式过于复杂,耗时又长,对用户的软件开发能力要求也比较高。

RPM(RedHat Packet Manager)的软件包管理系统:RPM是一种已经编译并封装好的软件包,用户可以直接安装使用。通过RPM,用户可以更加轻松方便地管理系统中的所有软件。RPM软件包只能在使用RPM机制的Linux操作系统中使用,如RHEL、Fdeora、Suse等。在Linux世界中,还有另外一种名为DEB的软件包管理机制,可以在Debian、Ubuntu等系统中使用。相比较而言,还是RPM安装包应用更为广泛,基本已成为Linux系统中软件安装包事实上的标准。
YUM(Yellow dog Updater,Modified)安装:RPM软件包之间存在着复杂的依赖关系。在多数情况下,一个软件都是由多个相互依赖的RPM软件包组成的,而大部分的RPM包又有相互之间的依赖关系。例如,安装A软件需要B软件的支持,而安装B软件又需要C软件的支持,那么在安装A软件之前,必须先安装C软件,再安装B软件,最后才能安装A,有时甚至还可能会出现死循环。YUM安装是一个基于RPM却胜于RPM的软件管理工具,它的最大优点是可以自动解决RPM软件包间的依赖性问题,从而可以更轻松的管理Linux系统中的软件。从RHEL5开始,Red Hat就推荐用yum作为软件安装的首选方式。
可以同时配置多个资源库(Repository) ,简洁的配置文件(/etc/yum.conf) ,自动解决增加或删除rpm包时遇到的倚赖性问题,使用方便,保持与RPM数据库的一致性


RPM

RPM(redhat package manager)软件包是将程序源代码经过编译和封装以后形成的包文件,在软件包里会封装软件的程序、配置文件、帮助手册等组件。yum是目前在RHEL系统中安装软件的首选方式,传统的rpm则主要是用作查询,如查询系统中是否已经安装了某个软件等

RHEL6基础二十二之RHEL软件包管理①rpm_第1张图片

RPM软件包的安装与卸载

RHEL6基础二十二之RHEL软件包管理①rpm_第2张图片

RHEL6基础二十二之RHEL软件包管理①rpm_第3张图片

[root@justin Packages]# rpm -ivh --test zsh-4.3.10-5.el6.i686.rpm
warning: zsh-4.3.10-5.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
[root@justin Packages]#

卸载软件建议使用rpm,尽量不使用yum来卸载,因为yum卸载时候会把依赖的包一起卸载可能导致其他软件无法正常使用

[root@localhost ~]# rpm -e --nodeps `rpm -qa|grep java`


rpm包一般都有默认的安装路径,命令放在/usr/bin或/usr/sbin下,库在/usr/lib下,数据文件在/usr/share/下,比如在安装JDK (Java Development Kit)或JRE (Java Runtime Environment)时,这个RedHat package文件的默认安装路径是/usr/java

[root@localhost ~]# rpm -qpi jdk-8u151-linux-x64.rpm 
Name        : jdk1.8                       Relocations: /usr/java 
Version     : 1.8.0_151                         Vendor: Oracle Corporation
Release     : fcs                           Build Date: Wed 06 Sep 2017 10:38:06 AM CST
Install Date: (not installed)               Build Host: sc11137389.us.oracle.com
Group       : Development/Tools             Source RPM: jdk1.8-1.8.0_151-fcs.src.rpm
Size        : 289862450                        License: http://java.com/license
Signature   : (none)
Packager    : Java Software 
URL         : URL_REF
Summary     : Java Platform Standard Edition Development Kit
Description :
The Java Platform Standard Edition Development Kit (JDK) includes both
the runtime environment (Java virtual machine, the Java platform classes
and supporting files) and development tools (compilers, debuggers,
tool libraries and other tools).

The JDK is a development environment for building applications, applets
and components that can be deployed with the Java Platform Standard
Edition Runtime Environment.
[root@localhost ~]#

这个JDK是默认要装在/usr/java 下的,如果是Relocations: (not relocatable)不能重定位,是无法修改安装目录的,只有去掉 --prefix参数了


要更改默认路径

rpm -i --badreloc --relocate /usr/java=/home/java


badreloc是强制把文件安装到你想要的地方。

relocate就是只把应该装到oldpath下的文件安装到newpath,实现将一部分文件安装到其它的路径,而不是把所有的这个包的文件都替换。

但是无论是prefix还是relocate都不见得可以真正可以用,因为有的包或者文件不允许装到其他路径


软件包信息查看

RHEL6基础二十二之RHEL软件包管理①rpm_第4张图片

如:

    查看某个文件时由哪个软件包生成:rpm -qf 文件名

例如查看semanage命令由哪个安装包生成:

[root@Zabbix_server home]# which semanage
/usr/sbin/semanage
[root@Zabbix_server home]# rpm -qf /usr/sbin/semanage 
policycoreutils-python-2.0.83-19.39.el6.i686
[root@Zabbix_server home]#

    查看软件包在系统中生成的所有文件的位置:rpm -ql 软件包名

[root@Zabbix_server home]# rpm -ql policycoreutils-python
/usr/bin/audit2allow
/usr/bin/audit2why
/usr/bin/chcat
/usr/bin/sandbox
/usr/bin/sepolgen-ifgen
/usr/bin/sepolgen-ifgen-attr-helper

    查看软件包配置文件所在位置:rpm -qc 软件包名 

[root@Zabbix_server home]# rpm -qc httpd
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf/httpd.conf

    查看软件包的安装信息:rpm -qi

[root@Zabbix_server home]# rpm -qi httpd
Name        : httpd                        Relocations: (not relocatable)
Version     : 2.2.15                            Vendor: CentOS
Release     : 30.el6.centos                 Build Date: Fri 04 Apr 2014 07:55:03 AM CST
Install Date: Wed 23 Jul 2014 06:59:33 AM CST      Build Host: c6b10.bsys.dev.centos.org
Group       : System Environment/Daemons    Source RPM: httpd-2.2.15-30.el6.centos.src.rpm
Size        : 2905719                          License: ASL 2.0
Signature   : RSA/SHA1, Fri 04 Apr 2014 08:04:37 AM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem 
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
[root@Zabbix_server home]#

    查看软件包安装到哪里:rpm -qpl 软件包名

查看软件是否安装

[root@justin Packages]# rpm -q vsftpd
vsftpd-2.2.2-11.el6.i686
[root@justin Packages]# rpm -qa vsftpd
vsftpd-2.2.2-11.el6.i686
[root@justin Packages]# rpm -e vsftpd
[root@justin Packages]# rpm -q vsftpd
package vsftpd is not installed
[root@justin Packages]# rpm -qa vsftpd
[root@justin Packages]# rpm -qa | wc -l
1104
[root@justin Packages]#

查看已安装软件的信息

RHEL6基础二十二之RHEL软件包管理①rpm_第5张图片

查询已经安装的软件包文件列表

RHEL6基础二十二之RHEL软件包管理①rpm_第6张图片

如何查看rpm包里有什么内容
rpm -qlp
如何查看rpm包的安装脚本
rpm -qp --scripts
如何查看rpm包的依赖性关系
rpm -qp --requires
如何查看rpm包详细信息
rpm -qi
如何安装rpm包
rpm -ivh
如何更新软件
rpm -Uvh
如何卸载软件
rpm -e
如何在安装过程中指定相对安装路径
rpm -ivh --nodeps --force --root=你指定的路径
如何在安装过程中忽略依赖性关系
rpm -ivh --nodeps --force
如何查看rpm包的更新记录
rpm -qp --changelog
如何重新编译rpm包
rpm -ba spec配置文件


在Linux中安装软件时,会自动分门别类地向相应的目录中复制对应的程序文件,并进行相关设置。在Linux系统中,典型的应用程序通常由以下几部分组成:

文件类型
保存位置
普通执行程序文件
/usr/bin
服务器执行和管理程序文件 /usr/sbin
应用程序配置文件 /etc/
日志文件
/var/log
应用程序文档文件 /usr/share/doc
应用程序帮助手册文件 /usr/share/man

查询文件由哪个程序生成

[root@justin Packages]# rpm -qf /etc/vsftpd/
vsftpd-2.2.2-11.el6.i686
[root@justin Packages]# rpm -qf /etc/passwd
setup-2.8.14-16.el6.noarch
[root@justin Packages]# rpm -qf /usr/share/
filesystem-2.4.30-3.el6.i686
[root@justin Packages]#

说明:当系统中的某个程序文件损坏或丢失时,通过“rpm -qf”的查询结果,可以重新安装相应的软件包

[root@justin Packages]# which touch
/bin/touch
[root@justin Packages]# rpm -qf /bin/touch
coreutils-8.4-19.el6.i686
[root@justin Packages]# rm -rf /bin/touch
[root@justin Packages]# touch file1
-bash: touch: command not found
[root@justin Packages]# rpm -i coreutils-8.4-19.el6.i686.rpm
warning: coreutils-8.4-19.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
    package coreutils-8.4-19.el6.i686 is already installed
[root@justin Packages]# rpm -i coreutils-8.4-19.el6.i686.rpm --force
warning: coreutils-8.4-19.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
[root@justin Packages]# touch file1
touch: 无法创建"file1": 只读文件系统
[root@justin Packages]# init 6
[root@justin Packages]#
Connection closed by foreign host.
Type `help' to learn how to use Xshell prompt.
Xshell:\>
Connecting to 10.15.72.194:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Tue Oct 29 22:34:02 2013 from 10.15.72.73
[root@justin ~]# touch file1
[root@justin ~]#

安装coreutils时候提示已经安装,这时候需要用到参数--force强制重新安装下,重新强制安装成功后使用touch命令会提示无法创建,只读的文件系统,只时候需要重启下系统就可以了

查询软件包配置文件信息

[root@justin Packages]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
[root@justin Packages]#