[Linux]Linux中安装软件的方式?

近日处理安全漏洞时,出现了这样一个问题: 判断某软件组件是通过何种方式安装的。
知道是何种方式安装,才方便做进一步的解决(升级/配置/卸载等操作)

1 解压即用

例如: sublime_text、pycharm、mendeley、TauP、sac等

2 [包管理器+源] 官方源 / 第三方源

【包管理器】官方包管理器 / 非官方包管理器
CentOS 使用 rpm/yum ; Ubuntu 使用 apt/apt-get

官方: 
    源|在线安装: yum / apt-get
    本地安装: rpm / apt

非官方:  Linuxbrew、Gentoo Prefix、pkgsrc
sudo yum install PackageName

3 官方软件包 / 非官方软件包

例如: CentOS中的官方RPM包 / 非官方RPM包

3-1 [方式1] RPM方式安装

sudo rpm -i PackageName.rpm
或
sudo rpm -ivh PackageName.rpm

rpm参数: i表示安装,U表示升级(upgrade),v表示显示安装过程,h表示显示进度

3-2 [方式2] YUM方式安装

yum localinstall xxxpath/*.rpm

yum install VS yum localinstall
【yum localinstall】用来安装本地rpm包的命令,首先rpm包要先下载到本地,然后在本地目录执行yum localinstall *.rpm,yum会自动搜寻依赖关系并安装而rmp -i *.rpm不会自行解决依赖关系,缺少依赖就会报错
【yum install】会去yum仓库查找相应的软件并安装,仓库中的软件都是解决了依赖关系的

4 源码编译

4-1 编译源码——大型软件包

tar -xvf xxxx.tgz
./configure --prefix=/opt/xxxx
make
sudo make install

4-2 编译代码——专业性很强的小代码包的处理方式

mkdir ${HOME}/bin 
echo 'export PATH=${HOME}/bin:$PATH'>> ~/.bashrc

【补充说明1】编译源码

前一节 “编译源码” 主要针对的是一些大型软件包,这一节 “编译代码” 指的是对一些 专业性很强的小代码包的处理方式。比如有些软件包编译之后实际需要的只是一个 二进制文件,这个时候就没有必要安装到 /opt 了,合适的方式是在自己的 HOME 下 建立 bin 目录,并将其路径加入到 .bashrc 中,然后将编译生成的二进制文件复制 到该目录下即可:

mkdir ${HOME}/bin echo 'export PATH=${HOME}/bin:$PATH'>> ~/.bashrc

比如我的 ${HOME}/bin 目录下有如下文件:

distaz :给出地球上两点经纬度,计算震中距和方位角 pssac :在 GMT 中绘制 SAC 文件 rdseed :SEED 格式转 SAC 格式 win2sac_32 、 catwin32 :Hi-net 网站提供的用于处理 Hi-net 数据的程序 st :sublime_text 被安装到 /opt 目录下,在此建立一个软链接,方便在命令行调用 sublime text wlt.pl :校内用于登陆网络通的脚本,在命令行修改网络端口,好 happy fk 、 fk.pl 、 syn 、 trav :Prof. Lupei Zhu 的用于计算合成地震图的程序,源代码有不少,实际需要用的也就这三个可执行文件和一个 perl 脚本。 matlab :指向 matlab 的一个软连接;

不要随便什么二进制文件都往 bin 里放,这里只应放一些常用的命令或很通用的工具。

【补充说明2】自成系统的软件

有一类软件,其拥有众多模块或包,为了管理这众多的模块,就需要拥有一个自己的模块 / 包管理器。
这其中以 TeX、Perl 和 Python 为代表。
对于这一类软件,其众多的模块是最大的优势,也是最值得利用的资源,因而我通常会选择手动安装它们,原因如下:
系统的源中不可能包含该软件的所有模块; 系统的源中该软件的模块的更新要远远滞后于最新版本;

当然,即便是使用系统自带的版本,也依然可以用该软件自带的包管理器来安装模块。但将导致:

部分模块用系统的 yum 管理,部分模块用软件自带的包管理器管理; yum 安装的模块一般版本较老,软件的包管理器要安装的大多是最新版本;

这一方面会导致模块管理的混乱,另一方面用软件自带的包管理其安装模块时,可能会依赖于其他模块的最新版本,若该模块是通过系统 yum 安装的较旧的版本,则可能导致模块的安装失败。

因而,对于这类软件,一般单独安装,并用各自的包管理器管理模块:

TeXLive:通过 TeXLive iso 镜像文件安装,使用其自带的 tlmgr 管理包 Perl:通过 plenv 安装最新版本的 Perl,使用 plenv 自带的 cpanm 安装模块 Python:通过 pyenv 安装最新版本的 Python,使用 Python 自带的 pip 安装模块

5 小结

解压即安装
	>包管理器安装(yum/apt-get; 系统源 优于 第三方源) 【 yum install -y <softwareName> 】
		>软件成品包安装(rpm/apt; 系统包 优于 第三方包) 【 rpm -ivh xxx.rpm 】
			>源码编译安装 【 tar -xvf xxxx.tgz | ./configure --prefix=/opt/xxxx | make | make install 】

解压即安装>系统源>第三方源>RPM包>第三方包管理器(Linuxbrew)>源码编译

X 参考文献

原文地址:https://www.cnblogs.com/johnnyzen/p/13852342.html