13. Linux 軟件包管理

[TOC]

軟件包管理

  • 軟件包管理是指系統(tǒng)中一種安裝和維護(hù)軟件的方法。
  • Linux 系統(tǒng)中幾乎所有的軟件都可以在互聯(lián)網(wǎng)上找到。
  • 不同的 Linux 發(fā)行版使用不同的打包系統(tǒng),一般而言,大多數(shù)發(fā)行版分別屬于兩大包管理技術(shù)陣營(yíng):
包管理系統(tǒng) 發(fā)行版(部分列表)
Debian Style (.deb) Debian, Ubuntu, Xandros, Linspire
Red Hat Style (.rpm) Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS

包文件

在包管理系統(tǒng)中,軟件的基本單元是包文件。包文件是一個(gè)構(gòu)成軟件包的文件壓縮集合。

資源庫(kù)

  • 大多數(shù)軟件包是由發(fā)行商和感興趣的第三方創(chuàng)建的。系統(tǒng)發(fā)行版的用戶可以在一個(gè)中心資源庫(kù)中得到這些軟件包。
  • 因軟件開(kāi)發(fā)生命周期不同階段的需要,一個(gè)系統(tǒng)發(fā)行版可能維護(hù)著幾個(gè)不同的資源庫(kù)。
  • 一個(gè)系統(tǒng)發(fā)行版可能也會(huì)擁有相關(guān)第三方的資源庫(kù)。

依賴性

現(xiàn)代的軟件包管理系統(tǒng)都提供了一些依賴項(xiàng)解析方法,以此來(lái)確保當(dāng)安裝軟件包時(shí),也安裝了其所有的依賴程序。

上層和底層軟件包工具

軟件包管理系統(tǒng)通常由兩種工具類型組成:

  • 底層工具用來(lái)處理這些任務(wù),比方說(shuō)安裝和刪除軟件包文件;
  • 上層工具,完成元數(shù)據(jù)搜索和依賴解析;

包管理工具

發(fā)行版 底層工具 上層工具
Debian-Style dpkg apt-get, aptitude
Fedora, Red Hat Enterprise Linux, CentOS rmp yum

查找資源庫(kù)中的軟件包

使用上層工具來(lái)搜索資源庫(kù)元數(shù)據(jù),可以根據(jù)軟件包的名字和說(shuō)明來(lái)定位它。

風(fēng)格 命令
Debian apt-get update; apt-cache search search_string
Red Hat yum search search_string

示例:

從資源中安裝一個(gè)軟件包

上層工具允許從一個(gè)資源庫(kù)中下載一個(gè)軟件包,并經(jīng)過(guò)完全依賴解析來(lái)安裝它。

風(fēng)格 命令
Debian apt-get update; apt-get install package_name
Red Hat yum install package_name

示例:

通過(guò)軟件包文件來(lái)安裝軟件

如果從某處而不是從資源庫(kù)中下載了一個(gè)軟件包文件,可以使用底層工具來(lái)直接(沒(méi)有經(jīng)過(guò)依賴解析)安裝它。

風(fēng)格 命令
Debian dpkg --install package_file
Red Hat rpm -i package_file

卸載軟件

風(fēng)格 命令
Debian apt-get remove package_name
Red Hat yum erase package_name

經(jīng)過(guò)資源庫(kù)來(lái)更新軟件包

最常見(jiàn)的軟件包管理任務(wù)是保持系統(tǒng)中的軟件包都是最新的。上層工具僅需一步就能完成這個(gè)至關(guān)重要的任務(wù)。

風(fēng)格 命令
Debian apt-get update; apt-get upgrade
Red Hat yum erase package_name

經(jīng)過(guò)軟件包文件來(lái)升級(jí)軟件

風(fēng)格 命令
Debian dpkg --install package_file
Red Hat rpm -U package_file

列出所安裝的軟件包

風(fēng)格 命令
Debian dpkg --list
Red Hat rpm -qa

確定是否安裝了一個(gè)軟件包

風(fēng)格 命令
Debian dpkg --status package_name
Red Hat rpm -q package_name

顯示所安裝的軟件包的信息

如果知道了所安裝軟件包的名字,使用以下命令可以顯示這個(gè)軟件包的說(shuō)明信息:

風(fēng)格 命令
Debian dpkg --status package_name
Red Hat rpm -q package_name

查找安裝了某個(gè)文件的軟件包

確定哪個(gè)軟件包對(duì)所安裝的某個(gè)特殊文件負(fù)責(zé),使用下表中的命令:

風(fēng)格 命令
Debian dpkg --search file_name
Red Hat rpm -qf file_name

例如:在 Red Hat 系統(tǒng)中,查看哪個(gè)軟件包安裝了 / usr/bin/vim 這個(gè)文件:

$ rpm -qf /usr/bin/vim

DEB 軟件包管理

  • DEB 軟件包管工具主要用于 Debain 和 Ubuntu 版本。
  • DEB 格式的軟件包通常以 .deb 結(jié)尾。
$ dpkg --help    ## 幫助文檔
$ sudo dpkg --install xxx    ## 安裝軟件包
$ sudo dpkg --remove xxx     ## 卸載軟件包

RPM 軟件包管理

  1. 安裝一個(gè) rpm 包:

    rpm -ivh alacarte-0.10.0-1.fc6.noarch.rpm
    
    rpm 安裝參數(shù) 含義
    -i 安裝
    -v 顯示 rmp正在執(zhí)行的工作
    -h 顯示安裝進(jìn)度
    --force 強(qiáng)制安裝,即使覆蓋屬于其他包的文件也要安裝
    —nodeps 當(dāng)要安裝的 rpm 包依賴其他包時(shí),即使其他包沒(méi)有安裝,也要安裝這個(gè)包
  2. 升級(jí)一個(gè) rpm 包

    rpm -Uvh filename    ## 更新一個(gè)軟件包
    
  3. 卸載一個(gè) rpm 包

    rmp -e filename
    
    $ sudo rpm -e -vv --test xorg-xll-devel  ## 模擬卸載
    #
    # 因?yàn)閱渭兊男遁d可能存在軟件包的相互依賴問(wèn)題
    # --test: 模擬刪除軟件包的全過(guò)程,但并不是真的卸載
    # -VV:    要求 RPM 輸出完整的調(diào)試信息
    #
    
  4. 查詢一個(gè)包是否安裝

    rpm -q rpm 包名(這里的包名,是不帶有平臺(tái)信息以及后綴名的)
    
  5. 得到一個(gè) rpm 包的相關(guān)信息

    rpm -qi 包名(同樣不需要加平臺(tái)信息與后綴名)
    
  6. 列出一個(gè) rpm 包安裝的文件

    rpm -ql 包名
    
  7. 列出某一個(gè)文件屬于哪個(gè) rpm 包

    rpm -qf 文件的絕對(duì)路徑
    

APT 軟件包管理工具

??????

高級(jí)軟件包工具(Advanced Package Tool,APT):自動(dòng)檢測(cè)軟件依賴問(wèn)題、自動(dòng)下載和安裝所有文件、自動(dòng)更新整個(gè)系統(tǒng)上所有的軟件包。

  • apt-get: 執(zhí)行和軟件包安裝有關(guān)的所有操作;
  • apt-cahce: 查找軟件包相關(guān)信息;
  • 安裝源:所有 apt-get 用于下載軟件的地址,目錄:/ect/apt/source.list

從 Internet 更新當(dāng)前系統(tǒng)軟件包的信息:

sudo apt-get update        # 檢查當(dāng)前 apt-get 緩存中的軟件包信息(只檢查,不更新)
sudo apt-get -y upgrade    # 更新已安裝的軟件包
sudo apt-get dist-upgrade  # Installs updates (new ones)

apt-get 軟件包升級(jí)命令

  • update - 從服務(wù)器更新可用的軟件包列表。
  • upgrade - 根據(jù)列表,更新已安裝的軟件包。upgrade 不會(huì)刪除在列表中已經(jīng)沒(méi)有的軟件包,也不會(huì)安裝有依賴需求但尚未安裝的軟件包。
  • full-upgrade - 根據(jù)列表,更新已安裝的軟件包。full-upgrade 可能會(huì)為了解決軟件包沖突而刪除一些已安裝的軟件包。
  • dist-upgrade - 根據(jù)列表,更新已安裝的軟件包。dist-upgrade 可能會(huì)為了解決軟件包沖突而刪除一些已安裝的軟件包,也可能會(huì)為了解決軟件包依賴問(wèn)題安裝新的軟件包。

apt-get 常用命令

命令 描述
apt-get install 下載并安裝軟件包
apt-get upgrade 下載并安裝在本系統(tǒng)上已有的軟件包的最新版本
apt-get remove 卸載特定的軟件包
apt-get source 下載特定的軟件源代碼
apt-get clean 刪除所有已下載的包文件
apt-get -h 列出 apt-get 的完整用法

安全升級(jí) apt/apt-get

# 關(guān)閉 HTTP 重定向功能進(jìn)行安全升級(jí)
$ sudo apt update -o Acquire::http::AllowRedirect=false
$ sudo apt upgrade -o Acquire::http::AllowRedirect=false

參考:20190123 - Linux 包管理器 apt/apt-get 發(fā)現(xiàn)遠(yuǎn)程代碼執(zhí)行漏洞

示例:安裝 node.js

# 安裝 node.js v8.11.2
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs

# 要從 npm 編譯和安裝原生插件,您可能還需要安裝構(gòu)建工具
$ sudo apt-get install -y build-essential 

# 檢查當(dāng)前版本
$ nodejs -v      
v8.11.2
$ npm -v
5.6.0
# 更新 npm
$ npm i -g npm

$ sudo apt-get upgrade nodejs    ## 更新
$ sudo apt-get remove nodejs     ## 卸載

nodejs 安裝在系統(tǒng)環(huán)境 /usr/bin 目錄下,之后使用 npm -g 安裝其他插件也會(huì)安裝到 /usr/lib/node_modules(需要使用sudo權(quán)限)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容