一、概述
我们在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命令组合来一键下载所有所依赖的包。
参考
- APT、apt-get、apt-cache 和 apt
- linux中的apt命令
- linux系统dpkg命令
更多推荐
Linux系统离线安装包及其依赖的下载安装
发布评论