[TOC]
0x00 前言简述 描述: apt 全称是 Advanced Packaging Tool是Linux系统下的一款安装包管理工具,可以说是Ubuntu系统下最为重要的命令安装、更新、卸载软件升级系统内核都离不开apt命令。
apt(apt-get)命令是apt包的管理工具他们根据/etc/apt/sources.list
里的软件源地址列表搜索目标软件、并通过维护本地软件包列表来安装和卸载软件。
Ubuntu可以使用apt-get来获取系统或者软件的更新,并且把这些更新从网络上下载下来安装到电脑上
apt工作原理: 描述: Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理,然后将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样所有的Ubuntu用户随时都能获得最新版本的安装软件包。 因此对于用户这些镜像服务器就是他们的软件源(Reposity), 然而由于每位用户所处的网络环境不同, 不可能随意地访问各镜像站点。
weiyigeek.top-apt工作原理
apt 配置文件
[TOC]
0x00 前言简述 描述: apt 全称是 Advanced Packaging Tool是Linux系统下的一款安装包管理工具,可以说是Ubuntu系统下最为重要的命令安装、更新、卸载软件升级系统内核都离不开apt命令。
apt(apt-get)命令是apt包的管理工具他们根据/etc/apt/sources.list
里的软件源地址列表搜索目标软件、并通过维护本地软件包列表来安装和卸载软件。
Ubuntu可以使用apt-get来获取系统或者软件的更新,并且把这些更新从网络上下载下来安装到电脑上
apt工作原理: 描述: Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理,然后将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样所有的Ubuntu用户随时都能获得最新版本的安装软件包。 因此对于用户这些镜像服务器就是他们的软件源(Reposity), 然而由于每位用户所处的网络环境不同, 不可能随意地访问各镜像站点。
weiyigeek.top-apt工作原理
apt 配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 $vi /etc/apt/sources.list /var/lib/dpkg/available /var/cache/apt/archives /etc/apt/sources.list /var/lib/apt/lists
0x01 命令一览 apt 命令 - 软件包管理工具 描述: 使用Ubuntu软件中心或命令行实用程序(例如apt或apt-get
)安装软件包时,这些软件包是从一个或多个apt软件存储库中下载的。 我们可以使用 apt 命令安装、更新、卸载软件包。
Ubuntu 软件包查找: https://packages.ubuntu.com/
Tips : APT存储库是一个网络服务器或本地目录,其中包含可被APT工具读取的deb包和元数据文件。
Tips : 尽管默认的Ubuntu存储库中有成千上万的应用程序可用,但有时您可能需要从第三方存储库中安装软件,所以我们常常会添加apt仓库地址。1 2 3 4 5 6 deb http://cn.archive.ubuntu.com/ubuntu/ dapper main restricted deb http://cn.archive.ubuntu.com/ubuntu/ feisty main restricted
语法参数: apt-get 是一个用于下载和安装软件包的简易命令行界面,最常用命令是 update 和 install。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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 apt [-h] [-o=config_string] [-c=config_file] [-t=target_release] [-a=architecture] {list | search | show | update | install pkg [{=pkg_version_number | /target_release}]... | remove pkg... | upgrade | full-upgrade | edit-sources | {-v | --version} | {-h | --help }} update - 取回更新的软件包列表信息 upgrade - 进行一次升级 install - 安装新的软件包(注:软件包名称是 libc6 而非 libc6.deb) remove - 卸载软件包 autoremove - 卸载所有自动安装且不再使用的软件包 purge - 卸载并清除软件包的配置 source - 下载源码包文件 build-dep - 为源码包配置所需的编译依赖关系 dist-upgrade - 发布版升级,见 apt-get(8) dselect-upgrade - 根据 dselect 的选择来进行升级 clean - 删除所有已下载的包文件 autoclean - 删除已下载的旧包文件 check - 核对以确认系统的依赖关系的完整性 changelog - 下载指定软件包,并显示其changelog download - 下载指定的二进制包到当前目录 -h 本帮助文档。 -q 让输出可作为日志 - 不显示进度 -qq 除了错误外,什么都不输出 -d 仅仅下载 - 【不】安装或解开包文件 -s 不作实际操作。只是依次模拟执行命令 -y 对所有询问都回答是(Yes),同时不作任何提示 -f 当出现破损的依赖关系时,程序将尝试修正系统 -m 当有包文件无法找到时,程序仍尝试继续执行 -u 显示已升级的软件包列表 -b 在下载完源码包后,编译生成相应的软件包 -V 显示详尽的版本号 -c=? 读取指定配置文件 -o=? 设置任意指定的配置选项,例如 -o dir::cache=/tmp apt search|install|remove [package] apt reinstall [package] apt update apt upgrade apt full-upgrade apt edit-sources apt autoremove apt show [package] apt list --upgradeable apt list --installed 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 apt-get dist-upgrade apt-get purge apt-get --purge remove|autoremove apt-get autoclean apt-get clean && sudo apt-get autoclean apt-get check apt-get source package apt-get build-dep package apt-get download [package] apt-get -d install [package] apt-get changelog [package]
基础实例: 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 apt-get install PackageName apt-get --reinstall install PackageName apt-get install PackageName=VersionName apt-get install -f apt-get build-dep PackageName apt-get source PackageName apt install -d nfs-common rpcbind apt --fix-broken install linux-headers-5.4.0-47 apt-get remove PackageName apt-get purge PackageName apt-get autoremove PackageName apt-get --purge remove PackageName apt-get --purge autoremove PackageName apt-get clean && apt-get autoclean apt-get clean && apt-get update apt-get upgrade apt-get dist-upgrade apt list apt show git apt-get check sudo apt-get install -y kubelet=1.23.6-00 --allow-change-held-packages
补充使用:
1.-o 选项使用以及代理获取更新1 2 3 4 5 6 7 8 9 10 11 12 13 sudo apt -o Acquire::http::proxy="http://192.168.12.215:3128/" update sudo apt-get -o Acquire::ForceIPv4=true update sudo apt-get -o Acquire::ForceIPv6=true upgrade /etc/apt/apt.conf.d/1000-force-ipv6-transport Acquire::ForceIPv6 "true" ; etc/apt/apt.conf.d/1000-force-ipv4-transport Acquire::ForceIPv4 "true" ;
apt-cache 命令 - 软件包搜索 基础语法: 1 2 3 4 5 6 apt-cache search package apt-cache show package apt-cache depends package apt-cache rdepends package apt-cache pkgnames apt-cache policy
基础示例: 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 apt-cache search ifconfig apt-cache show net-tools $apt -cache policy git $ apt-cache madison gcc PackageName
apt-mark 命令 - 软件包标记 描述: 显示、设置和取消设置软件包的各种设置 (手动/自动)
安装标记,也可以用来处理软件包的 dpkg(1) 选中状态,以及列出或过滤拥有某个标记的软件包。
语法格式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 apt-mark {-f=filename | {auto | manual} pkg... | {showauto | showmanual} [pkg...] } | {-v | --version} | {-h | --help } apt-mark {hold | unhold | install | remove | purge} pkg... | {showhold | showinstall | showremove | showpurge} [pkg...] * auto - 标记指定软件包为自动安装 * manual - 标记指定软件包为手动安装 * minimize-manual - 最小化手动用于将元包的依赖项(可传递的)标记为自动安装 * hold - 标记指定软件包为保留 (held back) 阻止软件自动更新 * unhold - 取消指定软件包的保留 (held back) 标记解除阻止自动更新 * showauto - 列出所有自动安装的软件包 * showhold – 列出设为保留的软件包 * showmanual - 列出所有手动安装的软件包 `-f=filename, --file=filename` : 从参数`filename`指定的文件名(而不是从默认位置)读取/写入包统计信息,默认位置是由配置项`Dir::State`定义的目录中的扩展状态。 `-c, --config-file` : 配置文件指定要使用的配置文件,程序将读取默认配置文件然后读取此配置文件,如果在解析默认配置文件之前需要设置配置设置,请指定一个带有`apt config`环境变量的文件。 `-o, --option` : 设置任意配置选项。语法是 `-o Foo::Bar=Bar-o` 和`--option`可以多次用于设置不同的选项。
基础示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 apt-mark hold kubeadm apt-mark unhold kubeadm apt-mark unhold libsmbclient samba-libs apt-mark showhold kubeadm apt-mark showhold apt-mark showmanual | wc -l
add-apt-repository 命令 - 添加 apt 仓库 描述: 在Ubuntu和所有其他基于Debian的发行版中,apt软件存储库在/etc/apt/sources.list
文件中或在/etc/apt/sources.list.d/
目录下的单独文件中定义(目录中的存储库文件的名称必须以.list结尾
)。
方式1 Tips : 除了上述方式进行添加apt仓库,其次是add-apt-repository
命令1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 deb http://repo.tld/ubuntu distro component deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse curl -L https://couchdb.apache.org/repo/bintray-pubkey.asc | sudo apt-key add - echo "deb https://apache.bintray.com/couchdb-deb $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/couchdb.listsudo add-apt-repository --remove ppa:finalterm/daily
Tips : 注意大多数存储库都提供公钥以对需要下载和导入的已下载软件包进行身份验证。
Tips : 当要添加或删除存储库,您需要以具有sudo访问权限或root用户的身份登录。
方式2 描述: add-apt-repository实用程序包含在software-properties-common程序包中。要安装它请运行以下命令:sudo apt install software-properties-common
基础语法: 1 2 3 4 5 add-apt-repository [options] repository repository : 可以是可以添加到sources.list文件 (例如 `deb http://repo.tld/ubuntu distro component`)的常规存储库条目,也可以是`ppa:<user>/<ppa-name>`格式的PPA存储库。
Tips : PPA存储库个人软件包档案(PPA)是一项服务,允许用户上传使用Launchpad构建和发布的Ubuntu源软件包作为apt信息库。
基础示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 sudo add-apt-repository 'deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse' sudo add-apt-repository --remove 'deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse' sudo add-apt-repository ppa:jonathonf/ffmpeg-4 sudo apt install ffmpeg sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
0x02 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 sudo vi/etc/apt/apt.conf.d/98proxy 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 -cridDistributor 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
0x04 入坑出坑 问题1.运行apt-get进行安装软件时候提示E: Unable to locate package vim[软件名称]
;
问题原因: 当然软件源仓库中没你要得软件或者您还未更新拉取软件仓库(在docker中常常遇到)
解决方式:
问题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 ps -A | grep apt sudo kill -9 进程ID $ sudo rm /var/lib/dpkg/lock $ sudo dpkg --configure -a $ sudo rm /var/lib/apt/lists/lock $ sudo rm /var/cache/apt/archives/lock
问题4.apt安装软件时提示Target Packages (multiverse/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list错误
错误信息:1 W: Target Packages (multiverse/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list:26 and /etc/apt/sources.list:53
问题原因:更新源重复配置
解决办法: 将 /etc/apt/sources.list
中 apt 仓库地址重复源删掉即可
问题5.使用apt update命令来同步包索引文件时提示ppa包 404 无法找到
错误信息:1 2 3 4 Err http://ppa.launchpad.net trusty/main amd64 Packages 404 Not Found Err http://ppa.launchpad.net trusty/main i386 Packages 404 Not Found W: Failed to fetch http://ppa.launchpad.net/finalterm/daily/Ubuntu/dists/trusty/main/binary-amd64/Packages 404 Not Found W: Failed to fetch http://ppa.launchpad.net/finalterm/daily/ubuntu/dists/trusty/main/binary-i386/Packages 404 Not Found
解决办法: 鉴别并清除破损的PPA仓库。1 2 3 4 5 6 7 $ sudo apt-get update | grep "Failed" $ sudo add-apt-repository --remove ppa:finalterm/daily
温馨提示: 你也可以直接在 /etc/apt/sources.list.d/
仓库源中利用编辑器直接编辑。
问题6.在执行更新系统内核命令时时报 Errors were encountered while processing 错误
错误信息:1 2 3 4 5 6 7 8 (Reading database ... 149871 files and directories currently installed.) Removing linux-modules-extra-5.4.0-59-generic (5.4.0-59.65) ... dpkg: error processing package linux-modules-extra-5.4.0-59-generic (--remove): unable to securely remove '/lib/modules/5.4.0-59-generic/kernel/drivers/input/keyboard/xtkbd.ko.dpkg-tmp' : Input/output error dpkg: too many errors, stopping Errors were encountered while processing: linux-modules-extra-5.4.0-59-generic Processing was halted because there were too many errors. E: Sub-process /usr/bin/dpkg returned an error code (1)
解决方法1 2 3 4 cd /var/lib/dpkgsudo mv info{,.bak} && sudo mkdir info sudo apt update
问题7.在执行apt更新下载安装输出 dpkg 无法恢复的致命错误
错误信息:1 2 3 4 5 已下载 17.6 kB,耗时 0秒 (238 kB/s) dpkg: 无法恢复的致命错误,中止: 在 stateoverride 文件中发现未知的系统用户 'redis' ;该系统用户在重载之前被移除。 这很有可能是一个打包Bug。您可以通过 dpkg-statoverride 手动移除重载来进行恢复 E: Sub-process /usr/bin/dpkg returned an error code (2)
解决办法: 上述说明在在 stateoverride 文件中发现未知的系统用户 ‘redis’, 我们便可从此文件入手。1 2 3 4 5 6 7 8 9 10 $ vi /var/lib/dpkg/statoverride geoclue geoclue 755 /var/lib/geoclue root lp 775 /var/log /hp/tmp root crontab 2755 /usr/bin/crontab root mlocate 2755 /usr/bin/mlocate root ssl-cert 710 /etc/ssl/private root messagebus 4754 /usr/lib/dbus-1.0/dbus-daemon-launch-helper $ apt update