Linux 软件安装的几种方式
- 源码安装
- 可执行程序(rpm)安装
- 包管理工具(yum, apt-get)安装
源码安装的基本流程
- 首先使用 wget 下载源码包(压缩文件)
- 然后 tar 解压源码包
- 安装
如果使用 wget 下载的文件是 shell 脚本,通常会使用 sh 进行脚本执行安装:
wget xxx.sh | sh
大部分源码程序的安装流程为:
- 如果是configure文件,就执行:
./configure
make
make install
- 如果是Makefile文件,就执行:
make
make install
- 如果是Imake文件,就执行:
xmkmf
make
可执行程序 (rpm)
rpm命令 是RPM软件包的管理工具。rpm原本是 Red Hat Linux
发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
这种软件安装包通常被是一个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀是 .rpm。
- 安装软件: 执行
rpm -ivh rpm 包名
,如:rpm -ivh gcc*
、rpm -ivh make*
、rpm -ivh autoconf*
、rpm -ivh apache-1.3.6.i386.rpm
- 升级软件: 执行
rpm -Uvh rpm 包名
。 - 反安装: 执行
rpm -e rpm 包名
。 - 查询软件包的详细信息: 执行
rpm -qpi rpm 包名
- 查询某个文件是属于那个rpm包的: 执行
rpm -qf rpm 包名
- 查该软件包会向系统里面写入哪些文件: 执行
rpm -qpl rpm 包名
- 查看已安装的软件包位置:
rpm -ql rpm 包名
- 查看指定软件已安装的版本:
rpm -qa | grep docker
安装 rpm 软件包
rpm 软件包的安装可以使用程序 rpm 来完成。执行下面的命令:
rpm -ivh your-package.rpm
其中 your-package.rpm 是你要安装的 rpm 包的文件名,一般置于当前目录下。
卸载 rpm 软件包
使用命令 rpm -e
包名,包名可以包含版本号等信息,但是不可以有后缀 .rpm,比如卸载软件包proftpd-1.2.8-1,可以使用下列格式:
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd
不可以是下列格式:
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1
有时会出现一些错误或者警告:
... is needed by ...
这说明这个软件被其他软件需要,不能随便卸载,可以用 rpm -e —nodeps 强制卸载。
rpm 软件包查找
查看与 rpm 包相关的文件和其他信息
下面所有的例子都假设使用软件包 mysql-3.23.54a-11
rpm -qa # 列出所有安装过的包
rpm -qa | grep sql # 如果要查找所有安装过的包含某个字符串sql的软件包
rpm -q mysql # 获得某个软件包的文件全名
rpm -ql mysql # 列出软件包的安装路径, 注意这里的是不包括 .rpm 后缀的软件包的名称, 也就是说只能用 mysql 或者 mysql-3.23.54a-11, 而不是 mysql-3.23.54a-11.rpm。如果只是想知道可执行程序放到那里去了,也可以用which
一个rpm包中包含哪些文件
- 一个没有安装过的软件包,使用
rpm -qlp ****.rpm
- 一个已经安装过的软件包,还可以使用
rpm -ql ****.rpm
获取关于一个软件包的版本,用途等相关信息
- 一个没有安装过的软件包,使用
rpm -qip ****.rpm
- 一个已经安装过的软件包,还可以使用
rpm -qi ****.rpm
某个程序是哪个软件包安装的,或者哪个软件包包含这个程序
rpm -qf `which 程序名` # 返回软件包的全名
rpm -qif `which 程序名` # 返回软件包的有关信息
rpm -qlf `which 程序名` # 返回软件包的文件列表
rpm -qilf 程序名 # 返回软件包的全名
注意,这里不是引号,而是反撇号,就是键盘左上角的那个键。也可以使用rpm -qilf
,同时输出软件包信息和文件列表。
某个文件是哪个软件包安装的,或者哪个软件包包含这个文件
注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以用于可执行程序,也可以用于普通的任何文件。前提是知道这个文件名。首先获得这个程序的完整路径,可以用 whereis 或者 which,然后使用 rpm -qf
例如:
$ whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
$ rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
$ rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1
conflict 冲突解决
安装过程中可能出现下面的警告或者提示:
... conflict with ...
可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情况下是无法正确安装的可以用 rpm --force -i
强制安装即可
... is needed by ...
... is not installed ...
此包需要的一些软件你没有安装可以用 rpm --nodeps -i
来忽略此信息,也就是说 rpm -i --force --nodeps
可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。