[TOC]

0x00 前言简述

描述: apt 全称是 Advanced Packaging Tool是Linux系统下的一款安装包管理工具,可以说是Ubuntu系统下最为重要的命令安装、更新、卸载软件升级系统内核都离不开apt命令。

apt(apt-get)命令是apt包的管理工具他们根据/etc/apt/sources.list里的软件源地址列表搜索目标软件、并通过维护本地软件包列表来安装和卸载软件。

apt工作原理:
描述: Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理,然后将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样所有的Ubuntu用户随时都能获得最新版本的安装软件包。
因此对于用户这些镜像服务器就是他们的软件源(Reposity), 然而由于每位用户所处的网络环境不同, 不可能随意地访问各镜像站点。

WeiyiGeek.apt工作原理

WeiyiGeek.apt工作原理


0x01 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
$vi /etc/apt/sources.list   #更改更新源

#文件的内容是软件包的描述信息, 该软件包括当前系统所使用的 ubunt 安装源中的所有软件包,其中包括当前系统中已安装的和未安装的软件包.
/var/lib/dpkg/available

#目录是在用 apt-get install 安装软件时,软件包的临时存放路径
/var/cache/apt/archives

#存放的是软件源站点
/etc/apt/sources.list

#使用apt-get update命令会从/etc/apt/sources.list中下载软件列表,并保存到该目录
/var/lib/apt/lists

0x02 命令一览

apt 命令 - Debain系软件安装管理

语法参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#apt [选项] 命令
apt search|install|remove [package] #搜索安装移除
apt reinstall [package] #重新安装
apt update #- 更新可用软件包列表
apt upgrade #- 通过 安装/升级 软件来更新系统
apt full-upgrade #- 通过 卸载/安装/升级 来更新系统
apt edit-sources #- 编辑软件源信息文件
apt autoremove #卸载所有自动安装且不再使用的软件包
apt show [package] #显示软件包具体信息例如:版本号,安装大小,依赖关系,bug报告等等。
apt list --upgradeable #显示可升级的软件包
apt list --installed #显示已安装的软件包


# apt-get [选项] 命令
# apt-get [选项] source 软件包1 [软件包2 ...
apt-get search [package] #搜索软件包
apt-get install|remove [package] #安装或移除软件包
apt-get reinstall [package] #重新安装

apt-get update #取回更新的软件包列表信息,返回三种状态:一是命中,一是获取,一是忽略。
apt-get update --fix-missing [package] #更新软件列表/更新异常索引文件
apt-get upgrade #更新升级软件包
apt-get dselect-upgrade #使用 dselect 升级
apt-get dist-upgrade # 发行版升级 (升级系统到新版本)

apt-get purge #卸载并清除软件包的配置
apt-get --purge remove|autoremove # package 删除包及其依赖的软件包+配置文件等

apt-get autoclean #删除已下载的旧包文件
apt-get clean && sudo apt-get autoclean #清理无用的包
apt-get check #核对以确认系统的依赖关系的完整性

apt-get source package #下载该包的源代码
apt-get build-dep package #为源码包配置所需的编译依赖关系

# By default apt-get -d install will save .deb in /var/cache/apt/archives and apt-get download in current directory
apt-get download [package] # 下载指定的二进制包到当前目录
apt-get -d install [package] # 下载指定的二进制包到当前目录

apt-get changelog [package] #下载指定软件包,并显示其变更日志(changelog)


#实例执行
#第一步,需要修改软件源配置文件的各个配置项中的版本标识。类似于将以下配置项。
deb http://cn.archive.ubuntu.com/ubuntu/ dapper main restricted
#修改为:
deb http://cn.archive.ubuntu.com/ubuntu/ feisty main restricted
#第二步,使用“ apt-get update ”命令刷新软件包更新列表。
#第三步,使用“ apt-get dist-upgrade ”命令为系统升级新的版本。 #更新系统版本

$apt show git #显示软件信息
Package: git
Version: 1:2.20.1-2
Priority: optional
Section: vcs
Maintainer: Gerrit Pape <[email protected]>
Installed-Size: 36.1 MB

$apt-get check #检测下载安装的软件包
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成

基础实例:

1
2
# 1.squid 代理使用进行获取更新
sudo apt -o Acquire::http::proxy="http://192.168.12.215:3128/" update


(2)apt-cache命令一览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
apt-cache search package  #搜索包 与 apt search 类似
apt-cache show package #获取包的相关信息,如说明、大小、版本等 与 apt show类似
apt-cache depends package #了解使用依赖
apt-cache rdepends package #查看该包被哪些包依赖
apt-cache pkgnames #列出所有软件包的名字
apt-cache policy #显示软件包的安装设置状态


# 实例1.查看当前版本
$apt-cache policy git #安装状态
git:
已安装:1:2.20.1-2
候选: 1:2.20.1-2
版本列表:
*** 1:2.20.1-2 500
500 http://mirrors.aliyun.com/kali kali-rolling/main amd64 Packages
100 /var/lib/dpkg/status

# 示例2.软件包版本选择
$ apt-cache madison gcc
gcc | 4:9.3.0-1ubuntu2 | http://mirrors.aliyun.com/ubuntu focal/main amd64 Packages
gcc-defaults | 1.185.1ubuntu2 | http://mirrors.aliyun.com/ubuntu focal/main Sources
gcc-defaults-mipsen | 1.186.1 | http://mirrors.aliyun.com/ubuntu focal/universe Sources


# 实例3.
[email protected]:~# apt --fix-broken install linux-headers-5.4.0-47

0x03 Apt配置

0.在Ubuntu 20.04 Focal Fossas进行APT Proxy 代理下载软件设置

Ubuntu 20.04 与 18.04 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
# Ubuntu 18.04
sudo vi/etc/apt/apt.conf.d/98proxy
# Acquire::http::proxy "http://username:[email protected]_ip:proxy_port/";
# Acquire::ftp::proxy "ftp://username:[email protected]_ip:proxy_port/";
# Acquire::https::proxy "https://username:[email protected]_ip:proxy_port/";

# Ubuntu 20.04
sudo tee /etc/apt/apt.conf.d/30proxy <<'EOF'
Acquire::http::proxy "http://192.168.12.215:3128";
EOF

# 临时生效
sudo apt -o Acquire::http::proxy="http://192.168.12.215:3128/" update

1.在Ubuntu 20.04 Focal Fossas上进行Apt代理客户端配置与apt代理服务器配置

描述:你正在阅读一个关于如何配置apt代理服务器和客户端在Ubuntu 20.04 Focal Fossa 的快速教程
环境说明:

1
2
3
4
5
$lsb_release -crid
Distributor ID: Ubuntu
Description: Ubuntu 20.04.1 LTS
Release: 20.04
Codename: focal


Ubuntu apt 代理服务器安装操作流程:

  • Step 1.安装配置apt cacher代理服务
    1
    sudo apt install -o Acquire::http::proxy="http://192.168.12.215:3128/" apt-cacher -y

Acquire::http { Proxy “http://192.168.12.215:3128"; };

Ubuntu 软件源库添加

1
2
3
4
5
#设置稳定docker软件源存储库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"


0x04 入坑出坑

问题1.运行apt-get进行安装软件时候提示E: Unable to locate package vim[软件名称];

  • 问题原因: 当然软件源仓库中没你要得软件或者您还未更新拉取软件仓库(在docker中常常遇到)
  • 解决方式:
    1
    2
    3
    # (1) 更换软件源(详看Linux发行版的镜像网站及开源软件收集)
    # (2) 更新软件源仓库
    apt update


问题2.E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

  • 错误描述:
    1
    2
    3
    4
    5
    6
    7
    The following packages were automatically installed and are no longer required:
    linux-headers-5.4.0-42 linux-headers-5.4.0-42-generic linux-image-5.4.0-42-generic linux-modules-5.4.0-42-generic linux-modules-extra-5.4.0-42-generic
    Use 'sudo apt autoremove' to remove them.

    你可能想运行"apt—fix-broken install"来纠正这些错误。
    以下软件包有未满足的依赖性:
    linux-headers-generic:取决于:linux-headers-5.4.0-58-generic但它不会被安装
  • 解决方式:未满足的依赖关系。尝试不带软件包的“apt -fix-broken install”(或指定一个解决方案)。
    1
    2
    apt --fix-broken install
    sudo apt autoremove


问题3.安装环境包时出现Could not get lock /var/lib/dpkg/lock - open解决方法

  • 问题复原:
    1
    2
    3
    $ sudo apt autoremove --purge -y snapd
    Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process 321016 (dWaiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process 321016 (dWaiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process 321016 (dpkg)... Error!
    E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
  • 问题原因: 在这个时候主要是因为apt还在运行或者上次执行内核安装或者apt升级时出现错误;
  • 解决办法:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 方法1:找到并且杀掉所有的apt-get 和 apt进程
    ps -A | grep apt
    sudo kill -9 进程ID

    # 方法2.删除锁定文件 /var/lib/apt/lists/、/var/lib/dpkg/、/var/cache/apt/archives/ 中
    # (1) 首先运行下面的命令来移除 `/var/lib/dpkg/` 文件夹下的锁定文件:
    $ sudo rm /var/lib/dpkg/lock
    $ sudo dpkg --configure -a

    # (2) 也可以如下删除 /var/lib/apt/lists/ 以及缓存文件夹下的锁定文件:
    $ sudo rm /var/lib/apt/lists/lock
    $ sudo rm /var/cache/apt/archives/lock