1. 程式人生 > 實用技巧 >[Linux]Linux中安裝軟體的方式?

[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 參考文獻