apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 系统中的软件包管理器。可以使用apt或者apt-get命令行从一个或者多个apt software repositories下载deb包,一个APT repository 可以是网络服务器也可以是本地目录,该目录或者服务需要包含deb包,metadata (元数据)文件。
apt命令它将 apt-get 和 apt-cache 工具中最常用的命令与某些选项相结合。apt命令专为交互式使用而设计。在 shell 脚本中更适合使用 apt-get 和 apt-cache,因为它们在不同版本之间向后兼容,并且具有更多选项和功能。
在Ubuntu和Debian操作系统中,通常会将APT仓库定义在==/etc/apt/sources.list文件中,或者以文件形式存在/etc/apt/sources.list.d/目录下,在 /etc/apt/sources.list.d/ ==目录下的定义仓库的文件必须以 .list结尾。在该/etc/apt/sources.list文件中,仓库条目格式如下:
deb http://repo.tld/ubuntu distro component...
相关apt仓库定义文件如下
vagrant@k8s-master:~$ ll /etc/apt/sources.list
-rw-r--r-- 1 root root 339 Dec 13 19:10 /etc/apt/sources.list
vagrant@k8s-master:~$ cat /etc/apt/sources.list
deb http://mirror.nju.edu.cn/ubuntu jammy main restricted universe multiverse
deb http://mirror.nju.edu.cn/ubuntu jammy-updates main restricted universe multiverse
deb http://mirror.nju.edu.cn/ubuntu jammy-backports main restricted universe multiverse
deb http://mirror.nju.edu.cn/ubuntu jammy-security main restricted universe multiverse
vagrant@k8s-master:~$ ls -l /etc/apt/sources.list.d/
total 8
-rw-r--r-- 1 root root 65 Dec 13 19:10 docker.list
-rw-r--r-- 1 root root 69 Dec 13 19:11 kubernetes.list
vagrant@k8s-master:~$
如果该add-apt-repository命令在当前系统中不存在,add-apt-repository命令被包含在software-properties-common包中,可以使用如下命令下载:
sudo apt update
sudo apt install software-properties-common
==授权authenticate ==
大多数仓库会提供一个public key以供授权下载包,该public key需要下载并导入。
添加仓库的命令行如下:
add-apt-repository [options] repository
repository该字段可以是一个常见的APT仓库条目 deb http://repo.tld/ubuntu distro component,或者是以一个PPA仓库条目 ppa:/
一个操作实例如下:
1、将仓库的public key 导入
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
2、添加MongoDB repository
sudo add-apt-repository 'deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse'
3、安装对应的包
sudo apt install mongodb-org
4、移除仓库条目
sudo add-apt-repository --remove 'deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse'
用于更新sources.list中指定的仓库中的各个包的元数据,并没有下载对应的包。apt update是在为apt install创建或者更新包的索引。索引存在于/var/lib/apt/lists/目录下。
apt install <package_name> 安装一个软件包
apt install <package_name>=<version_number>指定一个软件包的版本
如果当前系统中没有安装此包,则apt install <package_name>会安装此包,如果当前系统中已经安装了此包,则apt install <package_name>会更新此包到指定版本或者最新版本,所以apt install又引出了两个概念:只安装不升级、只升级不安装;
只安装不升级 需要指定 --no-upgrade参数;
apt install <package_name> --no-upgrade
只升级不安装需要指定 --only-upgrade 参数
apt install <package_name> --only-upgrade
由本地deb文件安装对应的包
apt install /full/path/file.deb
apt upgrade
更新所有已经安装的包到最新的版本,但是该命令不会升级需要删除已安装包的包。
apt upgrade package_name
升级单个包
apt full-upgrade
full-upgrade与upgrade不同的地方在于full-upgrade命令会删除已安装包的包。
apt upgrade <package_name>=<version_number>
升级包到指定版本
apt list
列出所有可用的包(包含已经安装的,可待安装的包)
apt list --installed
列出所有已经安装的包
vagrant@k8s-master:~$ sudo apt list --installed
Listing... Done
adduser/jammy,now 3.118ubuntu5 all [installed,automatic]
apparmor/jammy-updates,now 3.0.4-2ubuntu2.3 amd64 [installed,automatic]
apport-symptoms/jammy,now 0.24 all [installed,automatic]
apport/jammy-updates,now 2.20.11-0ubuntu82.5 all [installed,automatic]
apt-transport-https/jammy-updates,now 2.4.11 all [installed]
apt-utils/jammy-updates,now 2.4.11 amd64 [installed,automatic]
apt/jammy-updates,now 2.4.11 amd64 [installed,automatic]
base-files/jammy-updates,now 12ubuntu4.5 amd64 [installed]
base-passwd/jammy,now 3.5.52build1 amd64 [installed]
bash-completion/jammy,now 1:2.11-5ubuntu1 all [installed]
bash/jammy,now 5.1-6ubuntu1 amd64 [installed]
bc/jammy,now 1.07.1-3build1 amd64 [installed,automatic]
bcache-tools/jammy,now 1.0.8-4ubuntu3 amd64 [installed,automatic]
bind9-dnsutils/jammy-updates,now 1:9.18.18-0ubuntu0.22.04.1 amd64 [installed,automatic]
bind9-host/jammy-updates,now 1:9.18.18-0ubuntu0.22.04.1 amd64 [installed,automatic]
bind9-libs/jammy-updates,now 1:9.18.18-0ubuntu0.22.04.1 amd64 [installed,automatic]
binutils-common/jammy-updates,jammy-security,now 2.38-4ubuntu2.5 amd64 [installed,automatic]
binutils-x86-64-linux-gnu/jammy-updates,jammy-security,now 2.38-4ubuntu2.5 amd64 [installed,automatic]
binutils/jammy-updates,jammy-security,now 2.38-4ubuntu2.5 amd64 [installed,automatic]
bolt/jammy,now 0.9.2-1 amd64 [installed]
apt list --upgradeable
列出所有待更新的包
vagrant@k8s-master:~$ sudo apt list --upgradeable
Listing... Done
kubeadm/kubernetes-xenial 1.28.2-00 amd64 [upgradable from: 1.28.1-00]
kubectl/kubernetes-xenial 1.28.2-00 amd64 [upgradable from: 1.28.1-00]
kubelet/kubernetes-xenial 1.28.2-00 amd64 [upgradable from: 1.28.1-00]
vagrant@k8s-master:~$