版權聲明:本文章參考《Linux man pages》做了修改,增添了一部分內容。未經作者允許,嚴禁用於商業出版,否則追究法律責任。網絡轉載請註明出處,這是對原創者的起碼的尊重!!!
起初 GNU/Linux 的世界中只有.tar.gz。如果用戶要使用一個軟件,那就必須自己編譯。當 Debian 誕生以後,一種能管理操作系統中已安裝的軟件包的系統顯得很有必要,這個系統被命名爲‘dpkg’。‘軟件包’一詞在此第一次出現在 GNU/Linux。不久之後,紅帽公司創建了他們自己的包管理系統‘rpm’。
GNU/Linux 的創造者們很快又陷入了新的窘境。他們希望通過一種快捷、實用而且高效的方式來安裝軟件包,並能自動處理相互之間的依賴關係,還要在軟件包升級過程中維護好配置文件。Debian 又一次充當了開路先鋒的角色,她首創了 APT(Advanced Packaging Tool,高級軟件包管理工具)。這一工具後來被 Conectiva 移植到紅帽公司的 rpm 包管理系統。在其他一些發行版中,我們也能看到 APT 的身影。”
distribution | 軟件管理機制 | 本地管理指令 | 在線管理機制 | 在線管理指令 |
---|---|---|---|---|
Red Hat/Fedora | RPM | rpm | YUM | yum |
Debian/Ubuntu | DPKG | dpkg | APT | apt套件 |
1 在線管理機制
1.1 APT
1.1.1 重要的相關目錄和文件
/etc/apt/sources.list
存放的是軟件源站點, 當你執行sudo apt-get update
時,Ubuntu 就去這些站點下載軟件包列表到/var/lib/apt/lists/
目錄中。/etc/apt/sources.list.d/
該文件夾下的文件是第三方軟件的源,可以分別存放不同的第三源地址,只需“擴展名”爲list即可,/var/cache/apt/archives/
目錄是在用apt-get install
安裝軟件時,軟件包的臨時存放路徑/var/cache/apt/archives/partial/
傳輸中軟件包。/var/lib/dpkg/available
文件的內容是軟件包的描述信息, 該軟件包括當前系統所使用的 Debian 安裝源中的所有軟件包,其中包括當前系統中已安裝的和未安裝的軟件包./var/lib/apt/lists/
使用apt-get update
命令會從/etc/apt/sources.list
的源站點中下載軟件列表,並保存到該目錄,執行apt-get
安裝或升級時,會訪問該目錄的軟件列表文件,以獲取包信息。/var/lib/apt/lists/partial/
傳輸中的源的狀態信息。/etc/apt/apt.conf
APT配置文件/etc/apt/apt.conf.d/
APT 配置文件,存放各個單獨的配置/etc/apt/preferences
版本首選項/etc/apt/preferences.d/
版本首選項, 存放各個單獨的版本首選項
1.1.2 工作原理
Ubuntu採用集中式的軟件倉庫機制,將各式各樣的軟件包分門別類地存放在軟件倉庫中,進行有效地組織和管理。然後,將軟件倉庫置於許許多多的鏡像服務器中,並保持基本一致。這樣,所有的Ubuntu用戶隨時都能獲得最新版本的安裝軟件包。因此,對於用戶,這些鏡像服務器就是他們的軟件源(Reposity)。
然而,由於每位用戶所處的網絡環境不同,不可能隨意地訪問各鏡像站點。爲了能夠有選擇地訪問,在Ubuntu系統中,使用軟件源配置文件/etc/apt/sources.list
列出最合適訪問的鏡像站點地址。
無論用戶使用哪些手段配置APT軟件源,只是修改了配置文件/etc/apt/sources.list
,目的只是告知軟件源鏡像站點的地址。但那些所指向的鏡像站點所具有的軟件資源並不清楚,若每安裝一個軟件包,就在服務器上尋找一遍,效率是很低的。因而,就有必要爲這些軟件資源列個清單(建立索引文件),以便本地主機查詢。
索引文件的包信息主要有:Package、Architecture、Multi-Arch、Version、Priority、Section、Origin、Maintainer、Original-Maintainer、Bugs、Installed-Size、Provides、Depends、Breaks、Filename、Size、MD5sum、SHA1、SHA256、Homepage、Description、Task、Description-md5: 、Supported、conflict
用戶可以使用apt-get update
命令更新軟件包列表。在Ubuntu 中,apt-get update
命令會掃描每一個軟件源服務器,併爲該服務器所具有軟件包資源建立索引文件,存放在本地的/var/lib/apt/lists/
目錄中。使用apt-get執行安裝、更新操作時,都將依據這些索引文件,獲取相應包的信息,然後向軟件源服務器申請資源。同時,APT能夠檢查Linux系統中的軟件包依賴關係,大大簡化了Ubuntu用戶安裝和卸載軟件包的過程。
使用apt-get install
安裝軟件包大體分爲4步:
第一步,掃描本地存放的軟件包更新列表(由apt-get update
命令刷新更新列表,也就是/var/lib/apt/lists/
),找到最新版本的軟件包;
第二步,進行軟件包依賴關係檢查,找到支持該軟件正常運行的所有軟件包;
第三步,從軟件源所指的鏡像站點中,下載相關軟件包;
第四步,解壓軟件包,並自動完成應用程序的安裝和配置。
。
不過,APT並不是指某個命令,而是一組命令:
常用APT命令 | 作用 |
---|---|
apt-add-repository | 添加或者刪除源站點 |
apt-cache | 查詢軟件包信息; |
apt-cdrom | 將CD-ROM加入軟件源配置文件。 |
apt-config | 用於讀取APT配置文件的簡單工具; |
apt-extracttemplates | 提取一個或多個軟件包的配置腳本和模板文件成 |
apt-file | 查到軟件包所含的文件和安裝的位置 |
apt-ftparchive | 生成APT用來訪問分發源的索引文件。 |
apt-get | 管理軟件包,包括安裝、卸載、升級等操作; |
apt-key | 管理apt認證包時使用的密鑰。 |
apt-mark | 作爲一個統一的前端來設置一個包的各種設置 |
apt-mirror | 創建鏡像站點 |
apt-proxy | 用於搭建APT代理服務器; |
apt-sortpkgs | 採用索引文件(源索引或包索引)對記錄的包行排序 |
apt | apt-get、apt-cache、apt-config常用命令的高級接口 |
apturl | 通過點擊URL安裝軟件 |
aptitude | 整合dselect和apt-get的功能 |
aptoncd | 是將安裝的軟件包備份到光盤或ISO映像的簡單方法 |
1.1.3 設置APT源
在安裝Linux時,系統會根據用戶所選擇的國家/時區,推薦合適的軟件源地址。通常,用戶使用默認的/etc/apt/sources.list
文件就可以。不過,當用戶發現更合適的軟件源鏡像站點時,可以重新設置APT源。sources.list 條目格式:
DebType Repository_URL Distribution Component1 Component2……
DebType表示Deb軟件包類型
- deb表示二進制軟件包
- deb-src表示源碼包;
Repository URL表示軟件包所在倉庫的地址。我們可以更換倉庫來提高下載速度。
Distribution表示發行版本,發行版有兩種分類方法:
- 第一類是發行版的具體代號,如 xenial, trusty, precise 等;
- 第二類則是發行版的發行類型,如 oldstable, stable, testing 和 unstable。
- 另外,在發行版後還可能有進一步的指定,如 xenial-updates, trusty-security, stable-backports 等。
Component表示軟件包組件類別
- Debian
- main——包含符合 DFSG指導原則的自由軟件包,而且這些軟件包不依賴不符合該指導原則的軟件包。這些軟件包被視爲 Debian 髮型版的一部分。
- contrib——包含符合 DFSG 指導原則的自由軟件包,不過這些軟件包依賴不在 main 分類中的軟件包。
- non-free——包含不符合 DFSG 指導原則的非自由軟件包。
- Ubuntu
- main——官方支持的自由軟件。
- restricted——官方支持的非自由的軟件。
- universe——非官方支持的自由軟件。
- multiverse——非官方支持的非自由軟件。
- Debian
1.1.4 添加刪除倉庫——apt-add-repository
命令:apt-add-repository [OPTIONS] REPOSITORY
功能:將一個APT倉庫添加到/etc/apt/sources.list
或/etc/apt/sources.list.d/
中或刪除已存在的存儲庫。
常用選項 | 描述 |
---|---|
-m | 將大量調試信息打印到命令行中 |
-r | 刪除指定的存儲庫 |
-y | 假設所有查詢都是 |
-k | 使用自定義密鑰服務器URL而不是默認值 |
-s | 允許從存儲庫下載源包 |
更多信息 | http://linux.51yip.com/search/apt-add-repository 和 man 手冊 |
http://man.linuxde.net/apt-add-repository |
1.1.5 查詢軟件包信息——apt-cache
命令:apt-cache subcommand [options] [pkg_list]
功能:apt-cache在APT的包緩存上執行各種操作。 apt-cache不會改變系統狀態,但會提供操作以從軟件包元數據中生成感興趣的結果。元數據是通過apt-get update
命令獲取和更新的。
常用子命令 | 描述 |
---|---|
gencaches | 創建APT的包緩存。 |
showpkg pkg | 獲取二進制軟件包的常規描述信息 |
showsrc pkg | 獲取源碼包的詳細描述信息 |
show pkg | 獲取二進制軟件包的詳細描述信息 |
stats | 獲取軟件源的基本統計信息 |
dump | 獲取軟件源中所有軟件包的簡要信息 |
dumpavail | 獲取當前中已安裝的所有軟件包的描述信息 |
unmet | 獲取所有未滿足的依賴關係 |
search | 根據正則表達式檢索軟件包 |
depends pkg | 獲取該軟件包的依賴信息 |
rdepends pkg | 獲取所有依賴於該軟件包的軟件包 |
pkgnames | 列出所有已安裝軟件包的名字 |
policy | 獲取軟件包當前的安裝狀態 |
常用選項 | 描述 |
-p | 軟件包的緩存 |
-s | 源代碼包的緩存 |
-q | 關閉進度獲取 |
-i | 獲取重要的依賴關係,僅與unmet命令一起使用 |
-n | 只搜索包名,不搜索描述 |
-f | 搜索時顯示完整的包信息 |
-c file | 指定配置文件 |
-o strings | 設置配置選項 |
更多信息 | http://linux.51yip.com/search/apt-cache 和 man 手冊 |
http://man.linuxde.net/apt-cache |
1.1.5 將CD-ROM加入源—apt-cdrom
命令:apt-cdrom subcommands [-d|-r|-m|-f|-a|-h|-c config_name ]
功能:用於檢查Ubuntu安裝光盤,也可將安裝光盤作爲軟件源添加到軟件源配置文件中
常用子命令 | 描述 |
---|---|
ident | 用於掃描Ubuntu安裝光盤, |
add | 用於向/etc/apt/sources.list 文件添加CD-ROM配置項。 |
常用選項 | 描述 |
-d | 指定CD-ROOM的掛載點 |
-r | 爲一個已經識別CD-ROM改名 |
-m | 聲明CD-ROOM無掛載點 |
-f | 快速模式,不檢查軟件包文件 |
-a | 完整掃描模式 |
-c file | 指定配置文件 |
-o strings | 設置配置選項 |
更多信息 | http://linux.51yip.com/search/apt-cdrom 和 man 手冊 |
http://man.linuxde.net/apt-cdrom |
1.1.6 軟件管理——apt
、apt-get
1.1.6.1 apt與apt-get的關係
在基於 Debian 的 Linux 發行版中,有各種工具可以與 APT 進行交互,以方便用戶安裝、刪除和管理的軟件包。apt-get 便是其中一款廣受歡迎的命令行工具,另外一款較爲流行的是 Aptitude 這一命令行與 GUI 兼顧的小工具。
apt套件包含許多工具,如apt-cache、apt-config 等。這些命令都比較低級又包含衆多功能,普通的 Linux 用戶也許永遠都不會使用到。換種說法來說,就是最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache 和 apt-config這三條命令當中。
apt 命令的引入就是爲了解決命令過於分散的問題,它包括了 apt-get 命令出現以來使用最廣泛的功能選項,以及 apt-cache 和 apt-config 命令中很少用到的功能。
在使用 apt 命令時,用戶不必再由 apt-get 轉到 apt-cache 或 apt-config,而且 apt更加結構化,併爲用戶提供了管理軟件包所需的必要選項。
簡單來說就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令選項的集合。
1.1.6.2 apt命令的特點
- 用戶可以在同一地方集中得到所有必要的工具,不必再由 apt-get 轉到 apt-cache 或 apt-config
- apt具有更精減但足夠的命令選項,而且參數選項的組織方式更爲有效。
- 命令安裝或刪除程序時有進度條。
- 在更新存儲庫數據庫時提示用戶可升級的軟件包個數。
1.1.6.3 軟件管理命令——apt-get
命令:apt-get subconmmand [options]
功能:apt-get命令本身並不具有管理軟件包功能,只是提供了一個軟件包管理的命令行平臺。在這個平臺上使用更豐富的子命令,完成具體的管理任務。
常用子命令 | 描述 |
---|---|
update | 下載更新軟件包列表信息 |
upgrade | 將系統中所有軟件包升級到最新的版本 |
dist-upgrade | 發佈版升級 |
dselect-upgrade | 根據dselect的選擇來進行軟件包升級 |
install | 下載所需軟件包並進行安裝配置 |
remove | 卸載軟件包,但保留配置文件 |
purge | 卸載軟件包和配置文件 |
autoremove | 根據依賴關係卸載軟件包和卸載不需要或不滿足依賴關係的軟件包 |
source | 下載源碼包 |
build-dep | 爲源碼包構建所需的編譯環境 |
clean | 刪除緩存區中所有已下載的包文件 |
autoclean | 刪除緩存區中老版本的已下載的包文件 |
check | 檢查系統中依賴關係的完整性 |
download | 下載二進軟件包到當前文件夾 |
常用選項 | 描述 |
-d | 僅下載軟件包,而不安裝或解壓 |
-f | 修復系統中存在的軟件包依賴性問題 |
-m | 當發現缺少關聯軟件包時,仍試圖繼續執行 |
-q | 將輸出作爲日誌保留,不獲取命令執行進度 |
–purge | 與remove子命令一起使用,完全卸載軟件包,等效於purge子命令 |
–reinstall | 與install子命令一起使用,重新安裝軟件包 |
-b | 在下載完源碼包後,編譯生成相應的軟件包 |
-s | 不做實際操作,只是模擬命令執行結果 |
-y | 對所有詢問都作肯定的回答,apt-get不再進行任何提示 |
-u | 獲取已升級的軟件包列表 |
-V | 顯示安裝、升級過程 |
-u | 顯示要升級的包 |
更多信息 | http://linux.51yip.com/search/apt-get 和 man 手冊 |
http://man.linuxde.net/apt-get |
1.1.6.4 軟件管理高級命令——apt
命令:apt subconmmand [options] [pkg]
功能:apt命令本身並不具有管理軟件包功能,只是提供了一個軟件包管理的命令行平臺。在這個平臺上使用更豐富的子命令,完成具體的管理任務。
常用命令 | 描述 |
---|---|
install | 下載所需軟件包並進行安裝配置 |
remove | 移除軟件包,但保留配置文件 |
autoremove | 根據依賴關係卸載軟件包和卸載不需要或不滿足依賴關係的軟件包 |
purge | 移除軟件包及配置文件 |
search | 搜索應用程序 |
show | 顯示軟件包詳細信息 |
update | 刷新存儲庫索引 |
upgrade | 升級所有可升級的軟件包 |
full-upgrade | 在升級軟件包時自動升級依賴包 |
list | 列出包,–installed,已安裝;–upgradable可升級; –all-versions所有版本 |
edit-sources | 編輯源文件 |
更多信息 | http://linux.51yip.com/search/apt 和 man 手冊 |
http://man.linuxde.net/apt |
1.1.6.5 apt與apt-get對照表
apt 命令 | 取代的命令 | 命令的功能 |
---|---|---|
apt install 包名 |
apt-get install 包名 |
安裝軟件 |
apt remove 包名 |
apt-get remove 包名 |
移除軟件,保留配置 |
apt autoremove |
apt-get autoremove |
自動卸載軟件 |
apt purge 包名 |
apt-get purge 包名 |
移除軟件包及配置文件 |
apt search 包名 |
apt-cache search 包名 |
搜索應用程序 |
apt show 包名 |
apt-cache show 包名 |
顯示軟件包詳細信息 |
apt update |
apt-get update |
刷新存儲庫索引 |
apt upgrade |
apt-get upgrade |
升級所有可升級的軟件包 |
apt full-upgrade |
apt-get dist-upgrade |
升級軟件和依賴包 |
apt list –installed |
dpkg -l |
列出已安裝的軟件 |
apt list –upgradable |
apt-get -u upgrade –assume-no |
列出可升級的軟件 |
apt edit-sources |
vim /etc/apt/sources.list |
編輯源文件 |
1.1.7 配置APT——apt-config
命令:apt-config [–empty] [–format ‘%f “%v”;%n’] [-o=config_string] [-c=config_file] {shell | dump | {-v | –version} | {-h | –help}}
功能:apt-config用於設置APT或讀取APT配置文件
常用子命令 | 描述 |
---|---|
shell | 從shell腳本中獲取配置信息 |
dump | 顯示配置信息 |
常用選項 | 描述 |
–empty | 輸出中包含值爲空的選項 |
–no-empty | 輸出中不包含值爲空的選項 |
–format ‘%f “%v”;%n’ | 定義每個配置選項的輸出。%t輸出選項名,%f輸出完整的層次結構名稱,%v輸出選項值。%n將被替換爲換行符,而%N將被替換爲製表符。 %可以使用%%打印。 |
-c file | 指定配置文件 |
-o | 設置配置選項,語法是-o Foo::Bar=bar |
更多信息 | http://linux.51yip.com/search/apt-config 和 man 手冊 |
http://man.linuxde.net/apt-config |
1.2 YUM
redhot/centos使用yum
來安裝、卸載、搜索、查看應用程,會把所有的依賴包都一起安裝。
sudo yum install:安裝rpm軟件包;
sudo yum update:更新rpm軟件包;
sudo yum check-update:檢查是否有可用的更新rpm軟件包;
sudo yum remove:刪除指定的rpm軟件包;
sudo yum list:顯示軟件包的信息;
sudo yum search:檢查軟件包的信息;
sudo yum info:顯示指定的rpm軟件包的描述信息和概要信息;
sudo yum clean:清理yum過期的緩存;
sudo yum shell:進入yum的shell提示符;
sudo yum resolvedep:顯示rpm軟件包的依賴關係;
sudo yum sudo yum localinstall:安裝本地的rpm軟件包;
sudo yum localupdate:顯示本地rpm軟件包進行更新;
sudo yum deplist:顯示rpm軟件包的所有依賴關係。
2 本地管理機制
2.1 dpkg命令
dpkg安裝deb包
Ubuntu軟件包格式爲deb,安裝方法如下:
sudo dpkg -i package.deb
dpkg的詳細使用方法,網上有很多,下面簡單列了幾個:
dpkg -i package.deb 安裝包
dpkg -r package 刪除包
dpkg -P package 刪除包(包括配置文件)
dpkg -L package 列出與該包關聯的文件
dpkg -l package 顯示該包的版本
dpkg –unpack package.deb 解開 deb 包的內容
dpkg -S keyword 搜索所屬的包內容
dpkg -l 列出當前已安裝的包
dpkg -c package.deb 列出 deb 包的內容
dpkg –configure package 配置包
根據Ubuntu中文論壇上介紹,使用apt-get方法安裝的軟件,所有下載的deb包都緩存到了/var/cache/apt/archives目錄下了,所以可以把常用的deb包備份出來,甚至做成ISO工具包、刻盤,以後安裝Ubuntu時就可以在沒有網絡環境的情況下進行了。下面的命令是拷貝archives這個目錄到/var/cache/apt/目錄下,替換原有的archives
enadmin@ubuntu-server:~/ftp$ sudo cp -r archives/ /var/cache/apt/
2.2 rpm
3 源代碼安裝
如果要使用make安裝的話,那麼必須得安裝build-essential這個依賴包。源碼安裝大致可以分爲三步驟:
./configure
——配置編譯選項,選項可通過 –help 查詢。也有某些程序無需執行此步。make
——編譯:一旦配置通過,可即刻使用make指令來執行源代碼的編譯過程。- 安裝
make install
——直接安裝:如果編譯沒有問題,那麼執行make install
就可以將程序安裝到系統中了。check install
——生成deb/rpm包。
版權聲明:本文章參考《Linux man pages》做了修改,增添了一部分內容。未經作者允許,嚴禁用於商業出版,否則追究法律責任。網絡轉載請註明出處,這是對原創者的起碼的尊重!!!