Ubuntu上的apt/apt-get等命令的實質意義和區別
一、前言
在使用apt和apt-get命令的時候我們常常會疑惑這兩者有什么區別,因為大多數時間這兩個命令能做很多相同的事情。
二、APT/APT-GET
Ubuntu 16.04 發布時,一個引人注目的新特性便是 apt 命令的引入。其實早在 2014 年,apt 命令就已經發布了第一個穩定版,只是直到 2016 年的 Ubuntu 16.04 系統發布時才開始引人關注。隨着 apt install package 命令的使用頻率和普遍性逐步超過 apt-get install package,越來越多的其它 Linux 發行版也開始遵循 Ubuntu 的腳步,開始鼓勵用戶使用 apt 而不是 apt-get。 Debian 作為 Ubuntu、Linux Mint 和 elementary OS 等 Linux 操作系統的母板,其具有強健的包管理系統,它的每個組件和應用程序都內置在系統中安裝的軟件包中。
Debian 使用一套名為 Advanced Packaging Tool(APT)的工具來管理這種包系統,不過請不要把它與 apt 命令混淆,它們之間是其實不是同一個東西。在基於 Debian 的 Linux 發行版中,有各種工具可以與 Advanced Packaging Tool(APT) 進行交互,以方便用戶安裝、刪除和管理的軟件包。apt-get 便是其中一款廣受歡迎的命令行工具,另外一款較為流行的是 Aptitude 這一命令行與 GUI 兼顧的小工具。除此之外,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 中最常用命令選項的集合。通過 apt 命令,用戶可以在同一地方集中得到所有必要的工具,apt 的主要目的是提供一種以讓終端用戶滿意的方式來處理 Linux 軟件包的有效方式。apt 具有更精減但足夠的命令選項,而且參數選項的組織方式更為有效。除此之外,它默認啟用的幾個特性對最終用戶也非常有幫助。例如,可以在使用 apt 命令安裝或刪除程序時看到進度條。
雖然 apt 與 apt-get 有一些類似的命令選項,但它並不能完全向下兼容 apt-get 命令。也就是說,可以用 apt 替換部分 apt-get 系列命令,但不是全部。
apt 命令 |
取代的命令 |
命令的功能 |
---|---|---|
apt install |
apt-get install |
安裝軟件包 |
apt remove |
apt-get remove |
移除軟件包 |
apt purge |
apt-get purge |
移除軟件包及配置文件 |
apt update |
apt-get update |
刷新存儲庫索引 |
apt upgrade |
apt-get upgrade |
升級所有可升級的軟件包 |
apt autoremove |
apt-get autoremove |
自動刪除不需要的包 |
apt full-upgrade |
apt-get dist-upgrade |
在升級軟件包時自動處理依賴關系 |
apt search |
apt-cache search |
搜索應用程序 |
apt show |
apt-cache show |
顯示裝細節 |
當然,apt 還有一些自己的命令:
新的apt命令 |
命令的功能 |
---|---|
apt list |
列出包含條件的包(已安裝,可升級等) |
apt edit-sources |
編輯源列表 |
總結:
需要注意的是:apt 命令也還在不斷發展, 因此會在將來的版本中看到新的選項。目前還沒有任何 Linux 發行版官方放出 apt-get 將被停用的消息,至少它還有比 apt 更多、更細化的操作功能。對於低級操作,仍然需要 apt-get。既然兩個命令都有用,那么我該使用 apt 還是 apt-get 呢?作為一個常規 Linux 用戶,建議大家盡快適應並開始首先使用 apt。不僅因為廣大 Linux 發行商都在推薦 apt,更主要的還是它提供了 Linux 包管理的必要選項。最重要的是,apt 命令選項更少更易記,因此也更易用,所以沒理由繼續堅持 apt-get。 apt 可以看作 apt-get 和 apt-cache 命令的子集, 可以為包管理提供必要的命令選項。 apt-get 雖然沒被棄用,但作為普通用戶,還是應該首先使用 apt。
三、rpm和apt-get
rpm 相當於windows中的安裝文件,它會自動處理軟件包之間的依賴關系。 rpm是redhat公司的一種軟件包管理機制,直接通過rpm命令進行安裝刪除等操作,最大的優點是自己內部自動處理了各種軟件包可能的依賴關系。rpm一般都是預先編譯好的文件,它可能已經綁定到某種CPU或者發行版上面了。
tar 只是一種壓縮文件格式,所以,它只是把文件壓縮打包而已。tar一般包括編譯腳本,可以在當前環境下編譯,所以具有通用性。 如果你的包不想開放源代碼,你可以制作成rpm,如果開源,用tar更方便了。 tar一般都是源碼打包的軟件,需要自己解包,然后進行安裝三部曲,./configure, make, make install. 來安裝軟件。
一般來說著名的linux系統基本上分兩大類:
1.RedHat系列:Redhat、Centos、Fedora等 2.Debian系列:Debian、Ubuntu等
RedHat 系列
1 常見的安裝包格式 rpm包,安裝rpm包的命令是“rpm -參數” 2 包管理工具 yum 3 支持tar包
Debian系列
1 常見的安裝包格式 deb包,安裝deb包的命令是“dpkg -參數” 2 包管理工具 apt-get 3 支持tar包
四、apt-get
apt-get 是一個下載安裝軟件包的簡單命令行接口。 命令: update - 重新獲取軟件包列表 upgrade - 進行更新 install - 安裝新的軟件包 remove - 移除軟件包 autoremove - 自動移除全部不使用的軟件包 purge - 移除軟件包和配置文件 source - 下載源碼檔案 build-dep - 為源碼包配置編譯依賴 dist-upgrade - 發行版升級 dselect-upgrade - 依照 dselect 的選擇更新 clean - 清除下載的歸檔文件 autoclean - 清除舊的的已下載的歸檔文件 check - 檢驗是否有損壞的依賴 選項: -h 本幫助文件。 -q 輸出到日志 - 無進展指示 -qq 不輸出信息,錯誤除外 -d 僅下載 - 不安裝或解壓歸檔文件 -s 不實際安裝。模擬執行命令 -y 假定對所有的詢問選是,不提示 -f 嘗試修正系統依賴損壞處 -m 如果歸檔無法定位,嘗試繼續 -u 同時顯示更新軟件包的列表 -b 獲取源碼包后編譯 -V 顯示詳細的版本號 -c=? 閱讀此配置文件 -o=? 設置自定的配置選項,如 -o dir::cache=/tmp
常用的命令:
apt-cache search packagename 搜索包 apt-cache show packagename 獲取包的相關信息,如說明、大小、版本等 apt-get install packagename 安裝包 apt-get install packagename --reinstall 重新安裝包 apt-get -f install 修復安裝”-f = –fix-missing” apt-get remove packagename 刪除包 apt-get remove packagename --purge 刪除包,包括刪除配置文件等 apt-get update 更新源 apt-get upgrade 更新已安裝的包 apt-get dist-upgrade 升級系統 apt-get dselect-upgrade 使用 dselect 升級 apt-cache depends packagename 了解使用依賴 apt-cache rdepends packagename 是查看該包被哪些包依賴 apt-get build-dep packagename 安裝相關的編譯環境 apt-get source packagename 下載該包的源代碼 apt-get clean 清理無用的包 apt-get autoclean 清理無用的包 apt-get check 檢查是否有損壞的依賴
注意事項:
update 是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,這樣才能獲取到最新的軟件包。 upgrade 是升級已安裝的所有軟件包,升級之后的版本就是本地索引里的,因此,在執行 upgrade 之前一定要執行 update, 這樣才能是最新的。 安裝或升級系統分下面幾個步驟: 第一步,獲得最近的軟件包的列表;列表中包含一些包的信息,比如這個包是否更新過。 第二步,如果這個包沒有發布更新,就不管它;如果發布了更新,就把包下載到電腦上,並安裝。 apt update對應的就是第一步。 apt upgrade 與apt dist-upgrade對應的是第二步。 由於包與包之間存在各種依賴關系。upgrade只是簡單的更新包,不管這些依賴,它不和添加包,或是刪除包。而dist-upgrade可以根據依賴關系的變化,添加包,刪除包。 upgrade:系統將現有的Package升級,如果有相依性的問題,而此相依性需要安裝其它新的Package或影響到其它Package的相依性時,此Package就不會被升級,會保留下來. dist-upgrade:可以聰明的解決相依性的問題,如果有相依性問題,需要安裝/移除新的Package,就會試着去安裝/移除它. (所以通常這個會被認為是有點風險的升級) apt-get upgrade 和 apt-get dist-upgrade 本質上是沒有什么不同的。只不過,dist-upgrade 會識別出當依賴關系改變的情形並作出處理,而upgrade對此情形不處理。 例如軟件包 a 原先依賴 b c d,但是在源里面可能已經升級了,現在是 a 依賴 b c e。這種情況下,dist-upgrade 會刪除 d 安裝 e,並把 a 軟件包升級,而 upgrade 會認為依賴關系改變而拒絕升級 a 軟件包。
五、
sudo apt --fix-broken install
這個命令出來的時候一般是使用dpkg安裝軟件出現依賴或者源找不到的情況,會提示使用這個命令來解決依賴,刪除半安裝的軟件,因為不使用這個軟件使用 apt update或者apt upgrade將不能成功。