Linux系统离线安装包及其依赖的下载安装

news/2024/11/7 1:47:37/

一、概述

  我们在Linux系统下进行项目开发时,经常会出现缺少某些依赖库或者开发包的情况,这时候一般会通过使用apt命令去联网下载。但在某些特殊情况下(例如终端硬件不支持网络连接,周边缺少有线与无线网络,或者需要批量安装程序到很多终端上时),就需要我们先将对应的依赖环境安装包下载下来,然后拷贝到对应终端上手动安装。以下就针对Linux系统下载与安装离线安装包以及依赖包的相关知识进行整理。


二、APT-Linux软件包管理工具

  APT(Advanced Packaging Tool),是一个命令行实用程序,是工作于Debian, Ubuntu等相关linux发行版上的软件包管理系统。它提供了如自动检索、配置和安装软件包等功能来简化软件的管理。通过apt命令,能够从互联网的软件仓库中搜索、安装、升级、卸载软件等。大多数apt命令必须以具有sudo权限的用户身份运行。
  APT命令可以简单分为两类,一类是apt-xxx(例如apt-get、apt-cache)系列命令,一类是apt。两者都能够用于处理软件包,但apt-xxx系列命令将对软件包的管理操作分的很细致与分散,对于新手终端用户不太友好。而apt是在原有 apt-get 和 apt-cache 基础上,对基础软件包管理操作进行简化和优化,专为新手终端用户设计的命令行工具,可以看作 apt-get 和 apt-cache 命令的子集, 可以为包管理提供必要的命令选项。
在这里插入图片描述

从上面的表格可以知道,使用apt命令,我们可以不用关注在进行不同操作时需要使用apt-get还是apt-cache命令,简化了软件包命令操作。不过由于apt命令是专为终端用户设计,对于基础的软件包管理操作,在交互性上相对传统的 apt-xxx 命令有了一定的提升,但这是通过牺牲向后兼容性得到的,因此在脚本等场景下,应当使用更强调向后兼容性的传统 apt-xxx 命令。并且由于apt作为一个志在简化基础软件包管理操作的命令,对于许多高级操作,例如使用 apt-mark 固定软件包版本,是完全没有涉及的,因此在需要用到一些对软件包的高级操作时,应当使用apt-xxx命令。而在进行一些软件包基础操作时,使用apt命令即可。

1、语法

apt [options] [command] [package ...]
  • options:可选,选项包括 -h,-y等等。
  • command:要进行的操作。
  • package:要进行操作的包名。

2、常用option

选项作用
-h显示帮助信息
-y在需要确认的场景中回应 yes
-v显示APT详细的版本号
-d仅下载,不安装
-f尝试修正系统依赖损坏处

3、常用command

命令作用
list根据名称列出软件包
search搜索软件包描述
show显示软件包细节
install安装软件包
reinstall重新安装软件包
remove移除软件包
autoremove卸载所有自动安装且不再使用的软件包
update更新可用软件包列表
upgrade通过安装/升级软件来更新系统
full-upgrade通过卸载/安装/升级来更新系统
edit-sources编辑软件源信息文件
download下载

以下对常用的apt命令进行简要说明:

1)sudo apt update

从远程仓库更新可用软件包列表到本地。如果长久不更新,那么新版本的软件包将不会被其他apt相关命令下载安装。

2)sudo apt upgrade [package_name]

若指定包名,则升级指定软件包;若未指定包名,则升级所有可更新的软件包。(如果升级某个包需要卸载其他包则不做处理)

3)sudo apt [-y] [-d] install package_name1 [package_name2] …

安装指定软件包,若安装多个包,则使用空格隔开,也可以用来安装本地deb文件。可以添加"-y"选项用来跳过安装过程中的确认步骤;可以添加"-d"选项用来下载对应的软件离线安装包,下载的软件包默认存放位置是/var/cache/apt/archives。

4)sudo apt remove package_name1 [package_name2] …

卸载指定软件包,若卸载多个包,则使用空格隔开。使用remove会保留配置文件,使用purge可以完全移除软件包。

5)apt download package_name

下载指定的软件包,存放位置为执行命令的窗口所在目录。

6)sudo apt list

显示出所有可用的软件包。存在以下几种扩展用法:

  • 查看某个包是否可用

sudo apt list | grep package_name

  • 查看已安装包

apt list --installed

  • 查看可升级的包

apt list --upgradeable

7)apt search package_name

用于搜索指定包。

8)sudo apt autoremove

清理不再使用的依赖和库文件。


三、dpkg

  “dpkg”是“Debian Packager ”的简写。为Debian专门开发的套件管理系统,方便软件的安装、更新及移除。所有源自Debian的Linux发行版都使用dpkg,例如Ubuntu、Knoppix等。
  dpkg是Debian软件包管理器的基础,它被伊恩·默多克创建于1993年。dpkg与RPM十分相似,同样被用于安装、卸载和供给.deb软件包相关的信息。dpkg本身是一个底层的工具。上层的工具,如APT,被用于从远程获取软件包以及处理复杂的软件包关系。

1、语法

dpkg [options] [package ...]
  • options:选项。
  • package:要进行操作的软件包。

2、常用option

选项作用
-i安装软件包
-r删除软件包(保留配置)
-P删除软件包(删除配置)
-l显示已安装软件包列表
-L显示与软件包关联的文件
-c显示软件包文件内的文件列表
-s查找软件包详细信息
-x将软件包内的文件解压到指定目录
-X将软件包内的文件解压到指定目录,并在命令行中打印

3、dpk命令常见用法

1)sudo dpkg -i [–force-overwrite] package_name.deb

安装指定的软件包文件,文件名需带有绝对路径或相对路径,若同时安装多个deb包,可以以空格隔开。添加 --force-overwrite 参数,可以进行强制覆盖安装,可以用来解决安装deb包时提示尝试覆盖部分库失败的问题。

2)sudo dpkg -r package_name

卸载指定软件包。

3)dpkg -l [package_name]

显示指定的已安装软件包的版本信息,若未指定软件包名,则显示所有已安装软件包列表信息。

4)dpkg -L package_name

显示与软件包关联的文件,可以用来查看指定软件包都安装到了哪些目录下。

在这里插入图片描述

5)dpkg -c package_name.deb

显示软件包文件内的文件列表,作用与 -L 类似,不过 -L是针对已安装软件的,而 -c 是针对软件包deb文件的。

在这里插入图片描述

6)dpkg -X package_name.deb xxx

将指定deb包中的文件解压到指定的xxx目录中,并在命令行中打印出所有的目录与文件名。


四、安装包及其依赖的下载和安装

以下在UOS系统1050版本上,进行build-essential安装包下载来举例说明。

1、获取当前系统安装build-essential软件所需的依赖软件包名称

打开终端,输入 sudo apt install build-essential 命令,但不要同意安装,这样子就看到联网下载时会进行安装或升级的软件包名称。

在这里插入图片描述

从上图中可以看到,若我们通过apt命令联网安装build-essential软件包,此时一共会安装build-essential、g++、g+±8和libstdc+±8-dev这4个软件包。我们可以使用apt depends命令来查看对应软件包的依赖。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

其中,build-essential是目标软件包,目前系统中缺少g++依赖,而g++又缺少了g+±8依赖,g+±8缺少了libstdc+±8-dev依赖。通过这种方式,我们就直接获取到了build-essential目前系统所缺少的依赖和依赖的依赖。

2、下载离线安装包

通过apt download命令,将步骤1需要的软件包下载下来。

在这里插入图片描述

在这里插入图片描述

3、离线安装软件包

可以简单写一个sh脚本,用来进行软件包及其依赖的安装,方便操作。脚本中实现的功能很简单,就是用一条dpkg命令来安装多个deb包,这样子可以不用关心这些deb包的依赖顺序。执行脚本前,记得使用ls -l命令查看sh脚本文件是否有执行权限,若没有,则使用chmod命令赋予执行权限。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

额外说明

如果我们仅安装build-essential的deb包,而不安装其依赖包,则会出现以下提示:

在这里插入图片描述

此时我们可以使用sudo apt -f install或sudo apt --fix-broken install命令来修复当前系统依赖存在问题的地方,从图上可以看出,也是提示缺少了g++、g+±8和libstdc+±8-dev这三个依赖软件包。

在这里插入图片描述

还可以参考下这篇文章(apt一键下载所有依赖的包),通过shell命令组合来一键下载所有所依赖的包。


参考

  1. APT、apt-get、apt-cache 和 apt
  2. linux中的apt命令
  3. linux系统dpkg命令

http://www.ppmy.cn/news/665887.html

相关文章

python 城市代号数据的保存及读取

城市代号及保存 前言一、城市及代号二、保存数据(2种方法)1.直接保存2.使用python进行保存 三、数据的读取总结 前言 在某些情况下我们需要获取些票务信息,但是城市信息中有英文代号,在网上找到了城市和代号之间的关系 一、城市及代号 非常的长直接复制…

加速vscode下载速度

1、vscode的源在国外所以导致下载速度非常慢,疑似被墙的感觉 https://az764295.vo.msecnd.net/stable/507ce72a4466fbb27b715c3722558bb15afa9f48/code_1.57.1-1623937013_amd64.deb 2、如何加速下载呢,替换下载地址的国内源,上面是原下载地…

ubuntu mysql下载64位下载_ubuntu mysql下载|

mysql for ubuntu是ubuntu linux系统使用的mysql server数据库客户端,这里提供的事x86和64位的程序,ubuntu 16.10 mysql的安装配置教程可以参考网上的。 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误 1.安装mysql workbench&#xf…

DPK750针式打印机驱动,750u.dll下载

http://pan.baidu.com/s/1dD1SFvV DPK750针式打印机 下载 转载于:https://www.cnblogs.com/jcomey/p/4141758.html

Django基础入门⑪:DjangoDjango数据表关联(一对一,一对多,多对多关系)

Django基础入门⑪:DjangoDjango数据表关联 Django数据表关联一对一关系类型语法格式实例应用 一对多关系类型必填参数可选参数语法格式实例应用 多对多关系ManyToManyFiled定义可选参数语法格式多对多中间表实例应用 🏘️🏘️个人简介&#x…

Learn Mongodb DB功能命令索引等搜索 ⑤

作者 : SYFStrive 博客首页 : HomePage 📜: PHP MYSQL 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f44…

Python 100天从新手到大师

Python - 100天从新手到大师 作者:骆昊 最近有很多想学习Python的小伙伴陆陆续续加入我们的交流群,目前我们的交流群人数已经超过一万人。我们的目标是打造一个优质的Python交流社区,一方面为想学习Python的初学者扫平入门过程中的重重障碍&a…

python100天从新手到大师下载_GitHub - longers/Python-100-Days: Python - 100天从新手到大师...

Python - 100天从新手到大师 作者:骆昊 Python应用领域和就业形势分析 简单的说,Python是一个“优雅”、“明确”、“简单”的编程语言。 学习曲线低,非专业人士也能上手 开源系统,拥有强大的生态圈 解释型语言,…