二者的區別是dpkg繞過apt包管理數據庫對軟件包進行操做,因此你用dpkg安裝過的軟件包用apt能夠再安裝一遍,系統不知道以前安裝過了,將會覆蓋以前dpkg的安裝。html
一、dpkg是用來安裝.deb文件,但不會解決模塊的依賴關係,且不會關心Ubuntu的軟件倉庫內的軟件,能夠用於安裝本地的deb文件。java
二、apt會解決和安裝模塊的依賴問題,並會諮詢軟件倉庫, 但不會安裝本地的deb文件, apt是創建在dpkg之上的軟件管理工具。python
安裝軟件包web
dpkg -i package_name.deb //安裝本地軟件包,不解決依賴關係數據庫
apt-get install package //在線安裝軟件包ubuntu
aptitude install pattern //同上api
apt-get install package --reinstall //從新安裝軟件包緩存
apitude reinstall package //同上bash
移除軟件包oracle
apt-get remove package //同上
aptitude remove package //同上
apt-get remove package --purge //刪除軟件包及配置文件
apitude purge pattern //同上
自動移除軟件包
apt-get autoremove //刪除再也不須要的軟件包
apt-get 就是從網上下載包,並安裝到本地,手工下載 dpkg 包,然後 」dpkg -i 包名「 也能夠,但找包,檢查dependency 太辛苦,這就是 apt-get 幫助作的事情,從哪裏下載, 官方url
在/etc/apt/sources.list中,能夠看看
sudo vi /etc/apt/sources.list
sources list 中的格式以下 ( ref: https://wiki.debian.org/SourcesList)
deb http://site.example.com/debian distribution component1 component2 component3 deb-src http://site.example.com/debian distribution component1 component2 component3
開頭 deb 表明編譯好的包, des-src表明源代碼
distribution 表明發行版本,好比 12.07 是 precise
component 說明:
Main - Officially supported software.(官方支持軟件)
Restricted - Supported software that is not available under a completely free license.(有限制的,系統支持該軟件,可是並非徹底免費證書)
Universe - Community maintained software, i.e. not officially supported software.(社區維護軟件,但不是官方支持軟件)
Multiverse - Software that is not free.(軟件不是開源免費的)
deb http://cn.archive.ubuntu.com/ubuntu/ precise main restricted
好比:
deb http://cn.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse
(ref : https://help.ubuntu.com/community/Repositories/Ubuntu)
更改了 /etc/apt/sources.list , 要用用 apt-get update 更新 index 文件
更新的 index 文件在 /var/lib/apt/lists/
安裝 PPA
PPA,表示 Personal Package Archives,也就是我的軟件包集。有不少軟件由於種種緣由,不能進入官方的 Ubuntu 軟件倉庫。 爲了方便 Ubuntu 用戶使用,launchpad.net 提供了 ppa,容許用戶創建本身的軟件倉庫, 自由的上傳軟件。PPA 也被用來對一些打算進入 Ubuntu 官方倉庫的軟件,或者某些軟件的新版本進行測試。PPA 上的軟件極其豐富,若是 Ubuntu 官方倉庫中缺乏您須要的某款軟件,能夠去 PPA 上找找看。
sudo add-apt-repository ppa:user/ppa-name
ppa安裝能夠看看個人另一篇隨筆:如何在Ubuntu14.04下安裝Open-Jdk1.8
好比jdk1.6再也不index中
sudo apt-get install python-software-properties < for installing add-apt-repository >
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
用命令 「sudo apt-cache search jdk「,會發現結果中多了下列內容
oracle-jdk7-installer - Oracle JDK7 Installer meta package oracle-java7-installer - Oracle Java(TM) Development Kit (JDK) 7 oracle-java6-installer - Oracle Java(TM) Development Kit (JDK) 6 oracle-java8-installer - Oracle Java(TM) Development Kit (JDK) 8 oracle-java7-set-default - Set Oracle JDK 7 as default Java oracle-java6-set-default - Set Oracle JDK 6 as default Java oracle-java8-set-default - Set Oracle JDK 8 as default Java
以前我不能安裝gstreamer 也是經過下面命令解決的
sudo add-apt-repository ppa:gstreamer-developers/ppa
以後也發現/var/lib/apt/lists/ 多了幾個index文件
ppa.launchpad.net_gstreamer-developers_ppa_ubuntu_dists_precise_main_binary-i386_Packages ppa.launchpad.net_gstreamer-developers_ppa_ubuntu_dists_precise_main_source_Sources ppa.launchpad.net_gstreamer-developers_ppa_ubuntu_dists_precise_Release ppa.launchpad.net_gstreamer-developers_ppa_ubuntu_dists_precise_Release.gpg
apt-get三個比較容易混淆的命令:
apt-get update 更新軟件列表。
apt-get upgrade 更新軟件。
apt-get dist-upgrade 更新系統版本。
查詢可安裝的 package
不少時候忘記了package 的名字,用 apt-cache search <包名> 查詢就是了,其原理應該是到 package 的index文件中去作正則匹配
查詢已經安裝的package
使用 dpkg -S 命令
下面介紹一下GUN/Linux系統下軟件安裝包管理演化過程:
起初GNU/Linux系統中只有.tar.gz。用戶必須本身編譯他們想使用的每個程序。在Debian出現之後,人們認爲有必要在系統 中添加一種機 制用來管理 安裝在計算機上的軟件包。人們將這套系統稱爲dpkg。至此着名的‘package’首次在GNU/Linux上出現。不久之後紅帽子也開始着 手創建本身的包管理系統 ‘rpm’。GNU/Linux的創造者們很快又陷入了新的窘境。他們但願經過一種快捷、實用並且高效的方式來安裝軟件包。這些軟件包能夠自動處理相互之間 的依賴關係,而且在升級過程當中維護他們的配置文件 。Debian又一次充當了開路先鋒的角色。她獨創了APT(Advanced Packaging Tool)。這一工具後來被Conectiva 移植到紅帽子系統中用於對rpm包的管理。在其餘一些發行版中咱們也能看到她的身影。「同時,apt是一個很完整和先進的軟件包管理程序,使用它可讓你,又簡單,又準確的找到你要的的軟件包, 而且安裝或卸載都很簡潔。 它還可讓你的全部軟件都更新到最新狀態,並且也能夠用來對Ubuntu 進行升級。」「apt是須要用命令 來操做的軟件,不過如今也出現了不少有圖形的軟件,好比Synaptic, Kynaptic 和 Adept。」
命令介紹
下面將要介紹的全部命令都須要sudo!使用時請將「packagename」和「string」替換成您想要安裝或者查找的程序。
* apt-get update——在修改/etc/apt/sources.list或者/etc/apt/preferences之後運行該命令。此外您須要按期運行這一命令以確保您的軟件包列表是最新的。
* apt-get install packagename——安裝一個新軟件包(參見下文的aptitude )
* apt-get remove packagename——卸載一個已安裝的軟件包(保留配置文件)
* apt-get –purge remove packagename——卸載一個已安裝的軟件包(刪除配置文件)
* dpkg –force-all –purge packagename 有些軟件很難卸載,並且還阻止了別的軟件的應用 ,就能夠用這個,不過有點冒險。
* apt-get autoclean apt會把已裝或已卸的軟件都備份在硬盤上,因此若是須要空間 的話,可讓這個命令來刪除你已經刪掉的軟件
* apt-get clean 這個命令會把安裝的軟件的備份也刪除,不過這樣不會影響軟件的使用的。
* apt-get upgrade——更新全部已安裝的軟件包
* apt-get dist-upgrade——將系統升級到新版本
* apt-cache search string——在軟件包列表中搜索字符串
* dpkg -l package-name-pattern——列出全部與模式相匹配的軟件包。若是您不知道軟件包的全名,您可使用「*package-name-pattern*」。
* aptitude——詳細查看已安裝或可用的軟件包。與apt-get相似,aptitude能夠經過命令行方式調用,但僅限於某些命令——最多見的有安裝和卸載命令。因爲aptitude比apt-get瞭解更多信息,能夠說它更適合用來進行安裝和卸載。
* apt-cache showpkg pkgs——顯示軟件包信息。
* apt-cache dumpavail——打印可用軟件包列表。
* apt-cache show pkgs——顯示軟件包記錄,相似於dpkg –print-avail。
* apt-cache pkgnames——打印軟件包列表中全部軟件包的名稱。
* dpkg -S file——這個文件屬於哪一個已安裝軟件包。
* dpkg -L package——列出軟件包中的全部文件。
* dpkg -r package //刪除軟件包
* dpkg -P //刪除軟件包及配置文件
* apt-file search filename——查找包含特定文件的軟件包(不必定是已安裝的),這些文件的文件名中含有指定的字符串。apt-file是一個獨立的軟件包。您必須先使用apt-get install來安裝它,然後運行apt-file update。若是apt-file search filename輸出的內容太多,您能夠嘗試使用apt-file search filename | grep -w filename(只顯示指定字符串做爲完整的單詞出如今其中的那些文件名)或者相似方法,例如:apt-file search filename | grep /bin/(只顯示位於諸如/bin或/usr/bin這些文件夾中的文件,若是您要查找的是某個特定的執行文件的話,這樣作是有幫助的)。
* apt-get autoclean——按期運行這個命令來清除那些已經卸載的軟件包的.deb文件。經過這種方式,您能夠釋放大量的磁盤空間。若是您的需求十分迫切,可使用apt-get clean以釋放更多空間。這個命令會將已安裝軟件包裹的.deb文件一併刪除。大多數狀況下您不會再用到這些.debs文件,所以若是您爲磁盤空間不足而感到焦頭爛額,這個辦法也許值得一試。
典型應用
若是你想裝個賽車類遊戲玩玩。有哪些賽車類遊戲可供選擇呢?apt-cache search racing game出來了一大堆結果。看看有沒有更多關於torcs這個遊戲的信息。apt-cache show torcs看上去不錯。這個遊戲是否是已經安裝了?最新版本是多少?它屬於哪一類軟件,universe仍是main?apt-cache policy torcs好吧,如今我要來安裝它!apt-get install torcs在控制檯下我應該調用什麼命令來運行這個遊戲呢?在這個例子中,直接用torcs就好了,但並非每次都這麼簡單。咱們可一經過查找哪些文件被安 裝到了 「/usr/bin」文件夾下來肯定二進制文件名。對於遊戲軟件,這些二進制文件將被安裝到「/usr/games」下面。對於系統管理工具相應的文件夾是「/usr/sbin」。dpkg -L torcs|grep /usr/games/這個命令的前面一部分顯示軟件包「torcs」安裝的全部文件(您本身試試看)。經過命令的第二部分,咱們告訴系統只顯示前一部分的輸出結果中含有「/usr/games」的那些行。這個遊戲很酷哦。說不定還有其餘賽道可玩的?apt-cache search torcs個人磁盤空間不夠用了。我得把apt的緩存空間清空才行。apt-get clean哦不,老媽叫我把機器上的全部遊戲都刪掉。可是我想把配置文件保留下來,這樣待會我只要重裝一下就能夠繼續玩了。apt-get remove torcs若是我想連配置文件一塊刪除:apt-get remove –purge torcs額外的軟件包deborphan和debfoster工具能夠找出已經安裝在系統上的不會被用到的軟件包。提升命令行方式下的工做效率
您能夠經過定義別名(alias)來提升這些命令的輸入速度。例如,您能夠在您的*~/.bashrc*文件中添加下列內容
alias acs=’apt-cache search’
alias agu=’sudo apt-get update’
alias agg=’sudo apt-get upgrade’
alias agd=’sudo apt-get dist-upgrade’
alias agi=’sudo apt-get install’
alias agr=’sudo apt-get remove’
或者使用前面介紹的aptitude命令,如「alias agi=’sudo aptitude install’」。
aptitude 與 apt-get 同樣,是 Debian 及其衍生系統中功能極其強大的包管理工具。與 apt-get 不一樣的是,aptitude 在處理依賴問題上更佳一些。舉例來講,aptitude 在刪除一個包時,會同時刪除自己所依賴的包。這樣,系統中不會殘留無用的包,整個系統更爲乾淨。如下是筆者總結的一些經常使用 aptitude 命令,僅供參考。
aptitude update 更新可用的包列表
aptitude upgrade 升級可用的包
aptitude dist-upgrade 將系統升級到新的發行版
aptitude install pkgname 安裝包
aptitude remove pkgname 刪除包
aptitude purge pkgname 刪除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 顯示包的詳細信息
aptitude clean 刪除下載的包文件
aptitude autoclean 僅刪除過時的包文件
固然,你也能夠在文本界面模式中使用 aptitude。有的問題 apt-get 解決不了,必須使用 aptitude 解決,有的問題,用 aptitude 解決不了,必須使用 apt-get,aptitude 解決得更好的地方: install, remove, reinstall(apt-get無此功能), show(apt-get無此功能), search(apt-get無此功能), hold(apt-get無此功能), unhold(apt-get無此功能), apt-get 解決得更好的地方: source(aptitude無此功能), build-dep (低版本的aptitude沒有build-dep功能)apt-get 跟 aptitude 沒什麼區別的地方:update, upgrade (apt-get upgrade=aptitude safe-upgrade, apt-get dist-upgrade=aptitude full-upgrgade)