linux-apt 1

发布时间:2024年01月23日

一、简介

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,因为它们在不同版本之间向后兼容,并且具有更多选项和功能。

二、命令行详解

1、add-apt-repository(apt 仓库)

在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...
  • 该条目第一个字段定义压缩包的类型,压缩文件一般有两种deb和deb-src;deb代表该仓库中的文件都是==.deb包==,deb-src代表该仓库中的文件都是源文件;
  • 第二个字段是仓库的URL;
  • 第三个字段指定分布式代码名;
  • 最后一个字段是仓库的components 或者categories,默认的 Ubuntu 仓库分为四个components :main、restricted、universe 和 multiverse。通常,第三方存储库只有一个类别。

相关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 添加仓库

添加仓库的命令行如下:

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'

2、apt update (用于更新包的元数据的缓存)

用于更新sources.list中指定的仓库中的各个包的元数据,并没有下载对应的包。apt update是在为apt install创建或者更新包的索引。索引存在于/var/lib/apt/lists/目录下。

3、apt install packagename 安装软件包

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

4、apt upgrade

apt upgrade
更新所有已经安装的包到最新的版本,但是该命令不会升级需要删除已安装包的包。
apt upgrade package_name
升级单个包
apt full-upgrade
full-upgrade与upgrade不同的地方在于full-upgrade命令会删除已安装包的包。
apt upgrade <package_name>=<version_number>
升级包到指定版本

5、apt list

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:~$
文章来源:https://blog.csdn.net/qq_41768644/article/details/135720018
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。