apt 命令是一個功能強大的命令行工具,它不僅可以更新軟件包列表索引、執行安裝新軟件包、升級現有軟件包,還能夠升級整個 Ubuntu 系統(apt 是 Debian 系操作系統的包管理工具)。
與更專業的 APT(Advanced Packaging Tool) 工具 apt-get 和 apt-cache 相比,apt 具有一些更適合交互式場景的選項,它更傾向於成為面向最終用戶的工具(而不僅僅是系統管理員)。換句話說,apt 比 apt-get 用起來更簡單,用戶體驗更好。
本文介紹 apt 命令的基本用法,演示環境為 Ubuntu 18.04。
基本語法
語法格式:
apt [options] command
配置文件:
早期 apt 默認的配置文件為 /etc/apt/apt.conf,但是當前的 Ubuntu 系統中默認沒有這個文件。
如果 /etc/apt/apt.conf 文件存在,apt 仍然會讀取它。但現在的設計思路是把配置文件分隔后放置在 /etc/apt/apt.conf.d 目錄下,這樣更容易管理。
常用子命令:
update
update 命令用於從配置的源下載包信息。update 命令應該總是在安裝或升級包之前執行。
upgrade
upgrade 命令用於從配置的源安裝當前系統中的所有包的可用升級。如果需要滿足依賴關系,就安裝新的包,但是不會刪除現有的包。如果包的升級需要刪除已安裝的包,則不執行此包的升級。
full-upgrade
full-upgrade 命令執行升級功能,如果需要將系統升級到新的版本,則會刪除當前已安裝的包。
install,remove,purge
install 命令用來安裝一個或多個指定的包。remove 命令用來刪除包,但是會保留包的配置文件。purge 命令會在刪除包的同時刪除其配置文件。
autoremove
autoremove 命令用於刪除自動安裝的包,這些包是為了滿足其他包的依賴關系而自動安裝的,隨着依賴關系的更改或需要它們的包已被刪除,這些包現在不再需要了。
search
search 命令用於在可用包列表中搜索給定的項並顯示匹配到的內容。例如,如果您正在尋找具有特定功能的包,這將非常有用。
show
show 命令顯示關於給定包的信息,包括它的依賴關系、安裝和下載大小、包的來源、包內容的描述等等。比如,在刪除一個包或搜索要安裝的新包之前查看這些信息是很有幫助的。
list
list 命令可以顯示滿足特定條件的包列表,默認列出所有的包。可以通過 --installed 選項列出已安裝的包,--upgrade 選項列出可以升級的包。
edit-sources
edit-sources 命令用來編輯 /etc/apt/source.list 文件:
$ sudo apt edit-sources
常見用法
更新包索引文件
$ sudo apt update
安裝包
$ sudo apt install nginx
安裝指定版本的包
$ sudo apt install vim=2:8.0.1453-1ubuntu1
安裝本地的 deb 包文件
$ sudo apt install name.deb
這種方法會自動下載並安裝依賴的包。
安裝系統中有更新的包
upgrade 命令會升級已安裝的包,同但不移除任何包。它的目標是確保可能的侵入式升級最小化:
$ sudo apt update $ sudo apt upgrade
刪除包
通過下面兩個命令可以刪除使用 apt install 安裝的包:
$ sudo apt remove nmap $ sudo apt purge nmap
其中 remove 命令會保留配置文件,而 purge 命令會把配置文件一起刪除。
查看包的信息
$ apt show vim Package: vim Version: 2:8.0.1453-1ubuntu1.1 Priority: optional Section: editors Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 2,852 kB Provides: editor Depends: vim-common (= 2:8.0.1453-1ubuntu1.1), vim-runtime (= 2:8.0.1453-1ubuntu1.1), libacl1 (>= 2.2.51-8), libc6 (>= 2.15), libgpm2 (>= 1.20.7), libpython3.6 (>= 3.6.5), libselinux1 (>= 1.32), libtinfo5 (>= 6) Suggests: ctags, vim-doc, vim-scripts Homepage: https://vim.sourceforge.io/ Task: cloud-image, server Supported: 5y Download-Size: 1,152 kB APT-Manual-Installed: yes APT-Sources: http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages Description: Vi IMproved - enhanced vi editor Vim is an almost compatible version of the UNIX editor Vi. ...
輸出指定條件的包列表
可以指定某個包的名稱,否則會輸出大量的信息 :
$ apt list vim
$ apt list docker
還可以使用統配符:
可以通過 --installed 選項列出所有已安裝的包,而 --upgradable 選項則列出所有可以升級的包:
搜索包
search 命令用於在可用包列表中搜索給定的項並顯示匹配到的內容。比如下面的命令,我們搜索 docker,與之相關的 cadvisor 也被搜索出來了:
$ apt search docker
apt 與 apt-get 的區別
簡單來說 apt 命令就是 apt-get、apt-cache 和 apt-config 中最常用命令選項的集合。下面是幾個常見命令的對照關系:
list:與 dpkg --list 相似
search:與 apt-cache search 相似
show:與 apt-cache show 相似
update:與 apt-get update 相同
install/remove:與 apt-get install/remove 相似,但是多了進度條提示
upgrade:與 apt-get upgrade --with-new-pkgs 相同
full-upgrade:與 apt-get dist-upgrade 相似
在我們使用的過程中,比較明顯的區別是可以看到 apt 命令的進度條,個人感覺並不是太有用。
執行 apt update 命令,會提示可以升級的包的個數,而 apt-get update 命令則沒有這樣的提升:
$ sudo apt update ... Fetched 8,932 kB in 31s (288 kB/s) Reading package lists... Done Building dependency tree Reading state information... Done 28 packages can be upgraded. Run 'apt list --upgradable' to see them.
參考:
apt man page
維護和更新:APT 工具
What is the difference between apt and apt-get?