歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux軟件

Linux軟件包管理

如果我們花些時間在 Linux 社區裡,我們會得知很多針對, 類如在眾多 Linux 發行版中哪個是最好的(等問題的)看法。 這些集中在像這些事情上的討論,比方說最漂亮的桌面背景(一些人不使用 Ubuntu, 只是因為 Ubuntu 默認主題顏色是棕色的!)和其它的瑣碎東西,經常變得非常無聊。

Linux 發行版本質量最重要的決定因素是軟件包管理系統和其支持社區的持久性。隨著我們 花更多的時間在 Linux 上,我們會發現它的軟件園地是非常動態的。軟件不斷變化。大多數一線 Linux 發行版每隔六個月發布一個新版本,並且許多獨立的程序每天都會更新。為了能和這些 如暴風雪一般多的軟件保持聯系,我們需要一些好工具來進行軟件包管理。

軟件包管理是指系統中一種安裝和維護軟件的方法。今天,通過從 Linux 發行版中安裝的軟件包, 已能滿足許多人所有需要的軟件。這不同於早期的 Linux,人們需要下載和編輯源碼來安裝軟件。 編輯源碼沒有任何問題,事實上,擁有對源碼的訪問權限是 Linux 的偉大奇跡。它賦予我們( 其它每個人)才干來檢測和提高系統性能。只是若有一個預先編譯好的軟件包處理起來要相對 容易快速些。這章中,我們將查看一些用於包管理的命令行工具。雖然所有主流 Linux 發行版都 提供了強大且精致的圖形管理程序來維護系統,但是學習命令行程序也非常重要。因為它們 可以完成許多讓圖形化管理程序處理起來困難(或者不可能)的任務。

打包系統

不同的 Linux 發行版使用不同的打包系統,一般而言,大多數發行版分別屬於兩大包管理技術陣營: Debian 的”.deb”,和紅帽的”.rpm”。也有一些重要的例外,比方說 Gentoo, Slackware,和 Foresight,但大多數會使用這兩個基本系統中的一個。

表15-1: 主要的包管理系統家族 包管理系統發行版 (部分列表) Debian Style (.deb) Debian, Ubuntu, Xandros, Linspire Red Hat Style (.rpm) Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS

軟件包管理系統是怎樣工作的

在專有軟件產業中找到的軟件發布方法通常需要買一張安裝媒介,比方說”安裝盤”,然後運行 “安裝向導”,來在系統中安裝新的應用程序。

Linux 不是這樣。Linux 系統中幾乎所有的軟件都可以在互聯網上找到。其中大多數軟件由發行商以 包文件的形式提供,剩下的則以源碼形式存在,可以手動安裝。在後面章節裡,我們將會談談怎樣 通過編譯源碼來安裝軟件。

包文件

在包管理系統中軟件的基本單元是包文件。包文件是一個構成軟件包的文件壓縮集合。一個軟件包 可能由大量程序以及支持這些程序的數據文件組成。除了安裝文件之外,軟件包文件也包括 關於這個包的元數據,如軟件包及其內容的文本說明。另外,許多軟件包還包括預安裝和安裝後腳本, 這些腳本用來在軟件安裝之前和之後執行配置任務。

軟件包文件是由軟件包維護者創建的,他通常是(但不總是)一名軟件發行商的雇員。軟件維護者 從上游提供商(程序作者)那裡得到軟件源碼,然後編輯源碼,創建軟件包元數據以及所需要的 安裝腳本。通常,軟件包維護者要把所做的修改應用到最初的源碼當中,來提高此軟件與 Linux 發行版其它部分的融合性。

資源庫

雖然某些軟件項目選擇執行他們自己的打包和發布策略,但是現在大多數軟件包是由發行商和感興趣 的第三方創建的。系統發行版的用戶可以在一個中心資源庫中得到這些軟件包,這個資源庫可能 包含了成千上萬個軟件包,每一個軟件包都是專門為這個系統發行版建立和維護的。

A distribution may maintain several different repositories for different stages of the software development life cycle. For example, there will usually be a “testing” repository that contains packages that have just been built and are intended for use by brave souls who are looking for bugs before they are released for general distribution. A distribution will often have a “development” repository where work-in-progress packages destined for inclusion in the distribution’s next major release are kept.

因軟件開發生命周期不同階段的需要,一個系統發行版可能維護著幾個不同的資源庫。例如,通常會 有一個”測試”資源庫,其中包含剛剛建立的軟件包,它們想要勇敢的用戶來使用, 在這些軟件包正式發布之前,讓用戶查找錯誤。系統發行版經常會有一個”開發”資源庫, 這個資源庫中保存著注定要包含到下一個主要版本中的半成品軟件包。

一個系統發行版可能也會擁有相關第三方的資源庫。這些資源庫需要支持一些因法律原因, 比如說專利或者是 DRM 反規避問題,而不能被包含到發行版中的軟件。可能最著名的案例就是 那個加密的 DVD 支持,在美國這是不合法的。第三方資源庫在這些軟件專利和反規避法案不 生效的國家中起作用。這些資源庫通常完全地獨立於它們所支持的資源庫,要想使用它們, 你必須了解它們,手動地把它們包含到軟件包管理系統的配置文件中。

依賴性

程序很少是”孤立的”,而是依賴於其它軟件組件來完成它們的工作。常見活動,以 輸入/輸出為例,就是由共享程序例程來處理的。這些程序例程存儲在共享庫中,共享庫不只 為一個程序提供基本服務。如果一個軟件包需要共享資源,比如說共享庫,據說就有一個依賴。 現代的軟件包管理系統都提供了一些依賴項解析方法,以此來確保當安裝軟件包時,也安裝了 其所有的依賴程序。

上層和底層軟件包工具

軟件包管理系統通常由兩種工具類型組成:底層工具用來處理這些任務,比方說安裝和刪除軟件包文件, 和上層工具,完成元數據搜索和依賴解析。在這一章中,我們將看一下由 Debian 風格的系統 (比如說 Ubuntu,還有許多其它系統)提供的工具,還有那些由 Red Hat 產品使用的工具。雖然所有基於 Red Hat 風格的發行版都依賴於相同的底層程序(rpm), 但是它們卻使用不同的上層工具。我們將研究上層程序 yum 供我們討論,Fedora, Red Hat 企業版,和 CentOs 都是使用 yum。其它基於 Red Hat 風格的發行版提供了帶有可比較特性的上層工具。

表15-2: 包管理工具 發行版底層工具上層工具 Debian-Style dpkg apt-get, aptitude Fedora, Red Hat Enterprise Linux, CentOS rpm yum

常見軟件包管理任務

通過命令行軟件包管理工具可以完成許多操作。我們將會看一下最常用的工具。注意底層工具也 支持軟件包文件的創建,這個話題超出了本書敘述的范圍。在以下的討論中,”package_name” 這個術語是指軟件包實際名稱,而不是指”package_file”,它是包含在軟件包中的文件名。

查找資源庫中的軟件包

使用上層工具來搜索資源庫元數據,可以根據軟件包的名字和說明來定位它。

表15-3: 軟件包查找工具 風格命令 Debian apt-get update; apt-cache search search_string Red Hat yum search search_string

例如:搜索一個 yum 資源庫來查找 emacs 文本編輯器,使用以下命令:

yum search emacs

從資源庫中安裝一個軟件包

上層工具允許從一個資源庫中下載一個軟件包,並經過完全依賴解析來安裝它。

表15-4: 軟件包安裝命令 風格命令 Debian apt-get update; apt-get install package_name Red Hat yum install package_name

例如:從一個 apt 資源庫來安裝 emacs 文本編輯器:

apt-get update; apt-get install emacs

通過軟件包文件來安裝軟件

如果從某處而不是從資源庫中下載了一個軟件包文件,可以使用底層工具來直接(沒有經過依賴解析)安裝它。

表15-5: 底層軟件包安裝命令 風格命令 Debian dpkg --install package_file Red Hat rpm -i package_file

例如:如果已經從一個並非資源庫的網站下載了軟件包文件 emacs-22.1-7.fc7-i386.rpm, 則可以通過這種方法來安裝它:

rpm -i emacs-22.1-7.fc7-i386.rpm

注意:因為這項技術使用底層的 rpm 程序來執行安裝任務,所以沒有運行依賴解析。 如果 rpm 程序發現缺少了一個依賴,則會報錯並退出。

卸載軟件

可以使用上層或者底層工具來卸載軟件。下面是可用的上層工具。

表15-6: 軟件包刪除命令 風格命令 Debian apt-get remove package_name Red Hat yum erase package_name

例如:從 Debian 風格的系統中卸載 emacs 軟件包:

apt-get remove emacs

經過資源庫來更新軟件包

最常見的軟件包管理任務是保持系統中的軟件包都是最新的。上層工具僅需一步就能完成 這個至關重要的任務。

表15-7: 軟件包更新命令 風格命令 Debian apt-get update; apt-get upgrade Red Hat yum update

例如:更新安裝在 Debian 風格系統中的軟件包:

apt-get update; apt-get upgrade

經過軟件包文件來升級軟件

如果已經從一個非資源庫網站下載了一個軟件包的最新版本,可以安裝這個版本,用它來 替代先前的版本:

表15-8: 底層軟件包升級命令 風格命令 Debian dpkg --install package_file Red Hat rpm -U package_file

例如:把 Red Hat 系統中所安裝的 emacs 的版本更新到軟件包文件 emacs-22.1-7.fc7-i386.rpmz 所包含的 emacs 版本。

rpm -U emacs-22.1-7.fc7-i386.rpm

注意:rpm 程序安裝一個軟件包和升級一個軟件包所用的選項是不同的,而 dpkg 程序所用的選項是相同的。

列出所安裝的軟件包

下表中的命令可以用來顯示安裝到系統中的所有軟件包列表:

表15-9: 列出所安裝的軟件包命令 風格命令 Debian dpkg --list Red Hat rpm -qa

確定是否安裝了一個軟件包

這些底端工具可以用來顯示是否安裝了一個指定的軟件包:

表15-10: 軟件包狀態命令 風格命令 Debian dpkg --status package_name Red Hat rpm -q package_name

例如:確定是否 Debian 風格的系統中安裝了這個 emacs 軟件包:

dpkg --status emacs

顯示所安裝軟件包的信息

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

表15-11: 查看軟件包信息命令 風格命令 Debian apt-cache show package_name Red Hat yum info package_name

例如:查看 Debian 風格的系統中 emacs 軟件包的說明信息:

apt-cache show emacs

查找安裝了某個文件的軟件包

確定哪個軟件包對所安裝的某個特殊文件負責,使用下表中的命令:

表15-12: 包文件識別命令

風格命令 Debian dpkg --search file_name Red Hat rpm -qf file_name

例如:在 Red Hat 系統中,查看哪個軟件包安裝了/usr/bin/vim 這個文件

rpm -qf /usr/bin/vim

總結歸納

在隨後的章節裡面,我們將探討許多不同的程序,這些程序涵蓋了廣泛的應用程序領域。雖然 大多數程序一般是默認安裝的,但是若所需程序沒有安裝在系統中,那麼我們可能需要安裝額外的軟件包。 通過我們新學到的(和了解的)軟件包管理知識,我們應該沒有問題來安裝和管理所需的程序。

Linux 軟件安裝謠言

從其它平台遷移過來的用戶有時會成為謠言的受害者,說是在 Linux 系統中,安裝軟件有些 困難,並且不同系統發行版所使用的各種各樣的打包方案是一個障礙。唉,它是一個障礙, 但只是針對於那些希望把他們的秘密軟件只以二進制版本發行的專有軟件供應商。

Linux 軟件生態系統是基於開放源代碼理念。如果一個程序開發人員發布了一款產品的 源碼,那麼與系統發行版相關聯的開發人員可能就會把這款產品打包,並把它包含在 他們的資源庫中。這種方法保證了這款產品能很好地與系統發行版整合在一起,同時為用戶 “一站式采購”軟件提供了方便,從而用戶不必去搜索每個產品的網站。

設備驅動差不多也以同樣的方式來處理,但它們不是系統發行版資源庫中單獨的項目, 它們本身是 Linux 系統內核的一部分。一般來說,在 Linux 當中沒有一個類似於“驅動盤”的東西。 要不內核支持一個設備,要不不支持,反正 Linux 內核支持很多設備,事實上,多於 Windows 所支持的設備數目。當然,如果你需要的特定設備不被支持,這裡也沒有安慰。當那種情況 發生時,你需要查找一下原因。缺少驅動程序支持通常是由以下三種情況之一導致:

1.設備太新。 因為許多硬件供應商沒有積極地支持 Linux 的發展,那麼編寫內核 驅動代碼的任務就由一些 Linux 社區來承擔,而這需要花費時間。

2.設備太奇異。 不是所有的發行版都包含每個可能的設備驅動。每個發行版會建立 它們自己的內核,因為內核是可以配置的(這使得從手表到主機的每台設備上運行 Linux 成為可能), 這樣它們可能會忽略某個特殊設備。通過定位和下載驅動程序的源碼,可能需要你自己(是的,由你) 來編譯和安裝驅動。這個過程不是很難,而是參與。我們將在隨後的章節裡來討論編譯軟件。

3.硬件供應商隱藏信息。 他們既不發布應用於 Linux 系統的驅動程序代碼, 也不發布技術文檔來讓某人創建它。這意味著硬件供應商試圖保密此設備的程序接口。因為我們 不想在計算機中使用保密的設備,所以我建議刪除這令人厭惡的軟件, 把它和其它無用的項目都仍到垃圾桶裡。

拓展閱讀

Spend some time getting to know the package management system for your distribution. Each distribution provides documentation for its package management tools. In addition, here are some more generic sources:

花些時間來了解你所用發行版中的軟件包管理系統。每個發行版都提供了關於自帶軟件包管理工具的 文檔。另外,這裡有一些更普遍的資源:

Debian GNU/Linux FAQ 關於軟件包管理一章對軟件包管理進行了概述:

http://www.debian.org/doc/FAQ/ch-pkgtools.en.html

The home page for the RPM project:

RPM 工程的主頁:

http://www.rpm.org

The home page for the YUM project at Duke University:

杜克大學 YUM 工程的主頁:

http://linux.duke.edu/projects/yum/

For a little background, the Wikipedia has an article on metadata:

了解一點兒背景知識,Wikipedia 上有一篇關於 metadata 的文章:

http://en.wikipedia.org/wiki/Metadata

Copyright © Linux教程網 All Rights Reserved