[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 軟件包管理
-
安裝一個(gè) rpm 包:
rpm -ivh alacarte-0.10.0-1.fc6.noarch.rpmrpm 安裝參數(shù) 含義 -i 安裝 -v 顯示 rmp正在執(zhí)行的工作 -h 顯示安裝進(jìn)度 --force 強(qiáng)制安裝,即使覆蓋屬于其他包的文件也要安裝 —nodeps 當(dāng)要安裝的 rpm 包依賴其他包時(shí),即使其他包沒(méi)有安裝,也要安裝這個(gè)包 -
升級(jí)一個(gè) rpm 包
rpm -Uvh filename ## 更新一個(gè)軟件包 -
卸載一個(gè) rpm 包
rmp -e filename $ sudo rpm -e -vv --test xorg-xll-devel ## 模擬卸載 # # 因?yàn)閱渭兊男遁d可能存在軟件包的相互依賴問(wèn)題 # --test: 模擬刪除軟件包的全過(guò)程,但并不是真的卸載 # -VV: 要求 RPM 輸出完整的調(diào)試信息 # -
查詢一個(gè)包是否安裝
rpm -q rpm 包名(這里的包名,是不帶有平臺(tái)信息以及后綴名的) -
得到一個(gè) rpm 包的相關(guān)信息
rpm -qi 包名(同樣不需要加平臺(tái)信息與后綴名) -
列出一個(gè) rpm 包安裝的文件
rpm -ql 包名 -
列出某一個(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)限)。