Debian/Ubuntu包安裝工具APT的使用

alexanderkenndy發表於2014-08-30

【Linux風格的軟體包安裝和解除安裝方式】

Windows系統中,通常使用應用軟體自帶的安裝、解除安裝程式或在控制皮膚中的新增/ 刪除程式來操作。整個過程操作簡單方便,一目瞭然。

對於新手來說,Linux軟體的安裝和解除安裝一直都是困擾他們的問題。與Windows相類似,在Linux下也有功能強大的軟體安裝解除安裝工具:apt(Debian/Ubuntu系統), rpm(Redhat系統)。這些工具可以方便地查詢、安裝、解除安裝、升級軟體,該工具是在命令列下使用的。輸入man apt可瞭解詳細用法,常用的有apt-cache, apt-get。

和該軟體包安裝風格類似的還有:Perl中使用cpan管理perl module的安裝;PHP的pecl/pear可以完成php module和PEAR package的下載和安裝等。

另外,Linux風格的軟體一般都包括:配置檔案(一般位於conf或/etc目錄)、可執行檔案(位於bin目錄)、庫檔案(位於lib目錄)、標頭檔案(位於include目錄)、幫助文件(位於man或doc目錄)、日誌檔案(位於log目錄)等。瞭解這些有助於舉一反三、靈活使用。

【apt安裝軟體過程】

根據/etc/apt/sources.list定義的源查詢需要的package,下載到本地/var/cache/apt/archives,再安裝。

【/etc/apt/sources.list檔案】

此檔案中儲存apt可以獲取/下載軟體包的源。格式類似與:

deb http://ftp.us.debian.org/debian squeeze main deb http://security.debian.org/ squeeze/updates main

可用的官方源可以從這裡查詢:

源是分佈在世界各地用於存放軟體包的伺服器。修改了該檔案需要執行apt-get update更新。

0。更新軟體包源列表

apt-get update

在修改/etc/apt/sources.list或/etc/apt/preferences之後需要執行該命令確保軟體包列表是最新的。

1。apt命令:搜尋軟體包
  • 根據package的名稱關鍵詞查詢package:

apt-cache search keyword

  • 根據package所包含檔案的檔名查詢package:

apt-file search filename

如果知道該package包含的某個檔案的檔名,可以使用如上方法查詢;需要安裝apt-file。

apt-file是一個獨立的軟體包,安裝使用sudo apt-get install apt-file;然後執行apt-file update;如果apt-file search filename輸出的內容太多,可嘗試使用apt-file search filename | grep -w filename。

2。apt命令:檢視package資訊
  • 檢視可安裝的版本資訊

apt-cache show package-name //檢視包的詳細資訊

apt-cache showpkg package-name //檢視包的概要資訊

apt-cache show package-name | grep Version //僅僅檢視版本資訊

apt-show-versions package-name //顯示包的版本資訊

3。apt命令:安裝包
  • apt會自動檢測軟體包之間的版本資訊和依賴關係(dependencies),並提示需要安裝的依賴包。

apt-get install package-name

  • 同時安裝多個軟體包

apt-get install package-name1 package-name2 ...

  • 安裝其他包的同時解除安裝某個包(需要解除安裝的包之後新增-)

apt-get install package-name1 package-name2-

安裝package-name1的同時解除安裝package-name2

  • 重新安裝或如果有最新版安裝到最新版

apt-get --reinstall install package-name

如果已經安裝的軟體包損壞希望重新安裝可以使用如上命令。

  • 安裝為指定的版本

apt-get install package-name=version

例如:apt-get install php5=5.3.3-7

有時候安裝的時候會出現broken dependencies,這個時候可能需要安裝為指定的舊的版本。

如果已經安裝了最新版本,希望重新安裝為舊的版本(降級安裝),使用:

apt-get --reinstall install package-name=version

  • 檢視該軟體包所依賴的包

apt-cache depends package-name

  • 編譯某個程式的時候,可能因為沒有安裝依賴包而出現編譯錯誤,可以使用如下命令:

auto-apt run command

例如:auto-apt run ./configure,會自動使用apt-get安裝依賴的包。

4。apt命令:解除安裝包
  • 解除安裝包package-name,會自動移除依賴當前包的其他軟體

apt-get remove package-name

如上的解除安裝,軟體的configuration files仍舊存在。

  • 完全解除安裝(包括configuration files)

apt-get --purge remove package-name

  • 解除安裝的同時安裝新的軟體

apt-get --purge remove package-name1 package-name2+

在軟體包名稱之後新增’+',如上解除安裝package-name1,安裝package-name2。

  • 解除安裝不需要的檔案

apt-get autoremove

//Remove automatically all unused packages

5。apt命令:系統升級
  • upgrade packages within the same distribution

apt-get upgrade

apt-get -u upgrade //可以羅列出需要升級的軟體(推薦)

  • upgrade to a new distribution

apt-get dist-upgrade

apt-get -u dist-upgrade //推薦

6。apt命令:刪除不需要的安裝包

如上apt會將軟體包下載到本地/var/cache/apt/archives/,然後安裝。如果安裝的軟體包太多,會佔據磁碟空間。使用clean和autoclean可以刪除這些安裝包。

  • erase downloaded archive files

apt-get clean

刪除所有安裝包

  • erase old downloaded archive files(推薦)

apt-get autoclean

保留最新版的安裝包,刪除舊版的。

7。其他技巧
  • 檢視系統已經安裝的軟體包

dpkg -l

dpkg -l package-name-pattern

//列出已經安裝的與模式相匹配的軟體包;如果您不知道軟體包的全名,您可以使用*package-name-pattern*。

  • 這個檔案屬於哪個已安裝軟體包

dpkg -S file

  • 列出軟體包中的所有檔案

dpkg -L package-name

【apt安裝可能遇到的其他問題】安裝的時候遇到Broken packages問題(安裝舊版本/軟體包降級)

使用apt安裝軟體包(apt-get install package-name 或者 apt-get --reinstall install package-name),預設會尋找source中包含軟體的最新版進行下載安裝。

有時候安裝的時候可能遇到依賴包版本不匹配情況,例如:

今天在ubuntu10.04上安裝libxml2-dev,執行sudo apt-get install libxml2-dev提示錯誤資訊:

The following packages have unmet dependencies: libxml2-dev: Depends: libxml2 (=2.7.6.dfsg-1ubuntu1) but 2.7.6.dfsg-1ubuntu1.1 is to be installed E: Broken packages

分別檢視當前source中libxml2和libxml2-dev的版本資訊:

apt-cache show libxml2 | grep Version   得到:  Version: 2.7.6.dfsg-1ubuntu1.1   Version: 2.7.6.dfsg-1ubuntu1  apt-cache show libxml2-dev | grep Version   得到 Version: 2.7.6.dfsg-1ubuntu1

結果說明當前已經安裝的libxml2版本是Version: 2.7.6.dfsg-1ubuntu1.1,而將要安裝的libxml2-dev的版本要求是Version: 2.7.6.dfsg-1ubuntu1。已經安裝的libxml2版本過新。

解決方法有2個

  1. 尋找包含最新版libxml2-dev的sources,使其支援最新版的libxml2:

可以從這裡https://launchpad.net/ubuntu/搜尋package的名稱libxml2-dev,瞭解該package的最新版本;如果有最新版,從https://launchpad.net/ubuntu/+archivemirrors選擇包含該版本的source,新增到/etc/apt/sources.list中。如果沒有可用的最新版,則失敗。

  1. 對已經安裝的libxml2降級(安裝舊的版本2.7.6.dfsg-1ubuntu1)

方法有2個:

a. 簡單的方法(推薦)

sudo apt-get --reinstall install libxml2=2.7.6.dfsg-1ubuntu1

重新安裝libxml2並指定版本

b. 稍微複雜的方法

sudo vi /etc/apt/preferences

編輯preferences檔案,例如這裡需要把package: libxml2從2.7.6.dfsg-1ubuntu1.1降級到2.7.6.dfsg-1ubuntu1,可以輸入:

Package: libxml2 Pin: version 2.7.6.dfsg-1ubuntu1 Pin-Priority: 1001

//Note, that the Pin-Priority has to be over 1000 if you are going back to an older version of a package.

儲存preferences檔案,然後輸入sudo apt-get install libxml2就會完成libxml2的降級,獲取到舊的指定版本。

如上的意思是設定(pin)包libxml2使用指定的版本。

該方法的缺點:以後apt-get upgrade或update manager在檢測更新的時候不會檢測該package的更新。

Keep in mind that this package version will be “pinned” and no future updates to that package will be picked up by the update manager. For further information on this subject look at the man pages for apt_preferences.

參考:http://dimitar.me/ubuntu-revert-to-an-older-version-of-a-package/

轉自:http://cheny.lofter.com/post/865af_de211

相關文章