您当前的位置:首页 > 计算机 > 系统应用 > Linux

apt 与 dpkg 命令详解

时间:08-08来源:作者:点击数:

一. apt & dpkg 异同点

1. apt 与 dpkg 均为 ubuntu 下面的包管理工具。

2. dpkg 仅用于安装本地的软件包,安装时不会安装依赖包,不解决依赖问题。

sudo dpkg -i <package_name>.deb

3. apt 默认会从远程仓库搜索包的名字,下载并安装,安装时会自动安装依赖包,并解决依赖问题。

sudo apt install <package_name>

如果需要使用apt 从本地安装,需要在包名前指定路径,否则只从远程仓库查找。

sudo apt install <path>/<package_name>.deb

二. dpkg 常用命令

1. 概念

dpkg是一个debian包管理工具。能够对包进行安装、卸载、获取信息等操作。

2. 用法

查看指定包的版本,架构和描述信息

dpkg -l <package_name>

dpkg --list <package_name>

列出所有已安装的包,和其版本,架构和描述信息

dpkg -l

dpkg --list

相当于

apt list --installed

# 查看ssh是否安装

dpkg -l | grep ssh

查看包的安装路径

dpkg -L <package_name>

查看包是否安装

dpkg -s <package_name>

dpkg --status <package_name>

查找指定文件所属的包名,即这个文件是由哪个包安装产生的

dpkg -S <file_name>

dpkg --search <file_name>

安装

dpkg -i package_file

dpkg --install package_file

解包(该命令仅对“package_file“进行解包操作,不会执行包配置工作)

dpkg --unpack package_file

配置包:

dpkg --configure package

卸载包:

dpkg -r package

dpkg --remove package

该命令删除包,但保留配置文件。

dpkg -P package

dpkg --purge package

该命令删除包,且删除配置文件。

获取、设置、清除包的选择状态

dpkg --get-selections [package]

输出到标准输出,可以使用管道或重定向。

dpkg --set-selections

从标准输入获取,可以使用管道或重定向。

dpkg --clear-selections

将所有包都标记为卸载。

其他选项:

-B

--auto-deconfigure

卸载包时,自动把依赖于被卸载的包的所有包也卸载掉。

--no-act

--dry-run

--simulate

仅用于测试,得到输出,不对系统进行任何修改。

还有一些选项指定的任务实际上是交给 dpkg-deb、dpkg-query完成的:

dpkg-deb:

-b | --build

-c | --contents

-e | --control

-x | -extract

-f | --field

-I | --info

-X | --vextract

dpkg-query

-l | --list

-s | --status

-L | --listfiles

-S | --search

-p | --print-avail

三. apt 常用命令

最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache 和 apt-config 这三条命令当中。

apt 命令的引入就是为了解决命令过于分散的问题,它包括了 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。

在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,而且 apt 更加结构化,并为用户提供了管理软件包所需的必要选项。

简单来说就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。

1. apt命令

apt update

更新软件源中的所有软件列表。因为更新数据库等操作需要管理员的权限,所以在apt命令前要加上sudo命令取得权限。

运行apt update命令会返回三种状态:一是命中,一是获取,一是忽略。

命中表示连接上网站,包的信息没有改变。

获取表示有更新并且下载。

忽略表示无更新或更新无关紧要无需更新。

在命令显示的最后,会提示你有多少软件包可以升级,你可以根据自身的需求立即或稍后进行升级。

apt list

apt list --upgradeable:显示可升级的软件包。

apt list --installed:显示已安装的软件包。

apt upgrade

执行完update命令后,就可以使用apt upgrade来升级软件包了。执行命令后系统会提示有几个软件需要升级。在得到你的同意后,系统即开始自动下载安装软件包。

apt install <软件包名>

安装指定软件。此命令需管理员权限。如果你对名字并不十分清楚,你可以输入软件名的一部分,系统会给出名字相近的软件包名的提示。在老版本中安装程序需要使用sudo apt-get install <软件包名>,现在新版本中已建议直接使用apt替代apt-get命令。

sudo apt install -f

使用此命令可修复依赖关系,假如有软件因依赖关系不满足而无法安装,就可以运行此命令自动修复安装程序包所依赖的包。特别是在使用dpkg命令安装deb软件包时出现依赖问题常需要此命令来修复。

apt install <package name>=<version info>

# 列出包名的所有版本(仅当前系统apt源中包含的)

apt-cache madison PACKAGE

# 安装指定版本

apt install <package name>=<version info>

apt remove <软件包名> 和 apt autoremove

apt remove -y <软件包名>用来卸载指定软件。

apt autoremove 用来自动清理不再使用的依赖和库文件。

-y:在卸载软件包时自动确认所有提示,不需要手动输入确认。即强制卸载软件包而不需要交互式确认。

apt purge <软件包名>

apt purge <软件包名>用来卸载指定软件及清除相关的配置文件。

apt show <软件包名>

显示软件包具体信息。例如:版本号,安装大小,依赖关系,bug报告等等。

aptitude search ssh-server

查看ssh-server是否安装

2. apt-get

apt-get,是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。

参数

-h 帮助文件。

-q 输出到日志 - 无进展指示

-qq 不输出信息,错误除外

-d 仅下载 - 不安装或解压归档文件

-s 不实际安装。模拟执行命令

-y 在需要确认的场景中回应 yes

-f 尝试修正系统依赖损坏处

-m 如果归档无法定位,尝试继续

-u 同时显示更新软件包的列表

-b 获取源码包后编译

-V 显示详细的版本号

-c=? 阅读此配置文件

-o=? 设置自定的配置选项,如 -o dir::cache=/tmp

更新或升级操作

apt-get update # 更新源

apt-get upgrade # 更新所有已安装的包

apt-get dist-upgrade # 发行版升级(如,从10.10到11.04)

apt-mark hold packagename # 将指定的包版本hold住,在upgrade更新时忽略掉这个包

apt-mark unhold packagename # 取消对这个包版本的锁定

apt-get -f install # 修复安装 "-f = --fix-missing"

安装或重装类操作

apt-get install <pkg> # 安装软件包<pkg>,多个软件包用空格隔开

apt-get install --reinstall <pkg> # 重新安装软件包<pkg>

apt-get install -f <pkg> # 修复安装(破损的依赖关系)软件包<pkg>

卸载类操作

apt-get remove <pkg> # 删除软件包<pkg>(不包括配置文件)

apt-get purge <pkg> # 删除软件包<pkg>(包括配置文件)

下载清除类操作

apt-get source <pkg> # 下载pkg包的源代码到当前目录

apt-get download <pkg> # 下载pkg包的二进制包到当前目录

apt-get source -d <pkg> # 下载完源码包后,编译

apt-get build-dep <pkg> # 构建pkg源码包的依赖环境(编译环境?)

apt-get clean # 清除缓存(/var/cache/apt/archives/{,partial}下)中所有已下载的包

apt-get autoclean # 类似于clean,但清除的是缓存中过期的包(即已不能下载或者是无用的包)

apt-get autoremove # 删除因安装软件自动安装的依赖,而现在不需要的依赖包

查询类操作

apt-cache stats # 显示系统软件包的统计信息

apt-cache search <pkg> # 使用关键字pkg搜索软件包

apt-cache show <pkg_name> # 显示软件包pkg_name的详细信息

apt-cache depends <pkg> # 查看pkg所依赖的软件包

apt-cache rdepends <pkg> # 查看pkg被那些软件包所依赖

说明

  1. 关于软件安装目录的说明:
    一般的deb包(包括新立得或者apt-get下载的)都在/usr/share。 自己下载的压缩包或者编译的包,有些可以选择安装目录,一般放在/usr/local/,也有在/opt的。
  2. 关于apt-get的缓存目录:
    默认的缓存目录是/var/cache/apt/archives/, 为日后重装系统后安装软件节省下载时间或者将软件包给别人用,可以将该目录下的软件包压缩备份后清理以节省空间。

2. apt-cache

apt-cache命令 可以用于查询软件源和软件包的相关信息,比如当前软件包的安装状态、当前软件包的依赖关系等。

命令介绍

apt-cache命令可显示 APT 内部数据库里的多种信息。这些信息是从sources.list文件内聚集不同来源的缓存。于运行apt update运作时产生的。

APT包管理器工作在软件包元数据的本地缓存上。通过apt-cache命令,可以查询本地APT缓存并获得相关信息。

APT 缓存的位置是 /var/lib/apt/lists/ 目录。

缓存哪些仓库元数据取决于你的源列表中 /etc/apt/sources.list 文件中添加的仓库,以及位于 /etc/apt/sources.list.d 目录下的额外仓库文件。

apt-cache 并不能清除 APT 缓存。为此,你必须使用 apt-get clean 命令。

缓存

缓存是一种暂存系统,近用方法昂贵 (讲究性能) 时,用于加快常用数据的取用速度。这个概念应用范围极广,从微处理器核心至高端保存系统。

在 APT 的环境,参照软件包名称文件是他们在镜射站的位置。也就是说,近用数据库软件包时,每次都通过网络读取,极无劾率。所以,APT 在其文件内保存一个复本 (在/var/lib/apt/lists/) 每次搜索本地的文件即可。同样的,/var/cache/apt/archives/保存已经下载的软件包避免在移除后又需要时的重复下载行为。

apt-cache命令可以做键词软件包搜索apt-cache search键词。也能显示软件包标头的可用版本apt-cache show软件包名称。这个命令提供软件包说明、其相依性、维护者名称等。apt searchapt showaptitude searchaptitude show都以同样方式运作。

操作

#搜索软件包:

apt-cache search package_name

# 也可以缩小搜索范围,只在软件包名称中查找搜索词:

apt-cache search --names-only package_name

# 如果想要知道完整细节,可以使用 --full 标志:

apt-cache search --names-only package_name --full

# 获取详细的包装信息:(已经知道确切的软件包名称)

apt-cache show package_name

#获取二进制软件包的常规描述信息,可以显示软件包的名称、版本、正向和反向依赖关系等信息

apt-cache showpkg package_name

#获取源码包的详细描述信息

apt-cache showsrc src_name

# 可以显示软件包的名称、版本、正向和反向依赖关系等信息

apt-cache pkgnames

# 列出包名的所有版本(仅当前系统apt源中包含的)

apt-cache madison PACKAGE

#获取软件包当前的安装状态

如果指定了软件包的名称,它将显示该软件包是否已经安装,在哪个版本的仓库中可用,以及它的优先级。

apt-cache policy package_name

默认情况下,每个已安装的软件包版本的优先级为 100,未安装的软件包的优先级为 500。

同一软件包可能有多个不同优先级的版本。APT 会安装优先级较高的版本,除非安装的版本较新。

#获取当前软件包依赖于哪些软件包

可以在安装之前(甚至在安装之后)检查一个包的依赖关系。它还会显示所有可能满足依赖关系的软件包。

apt-cache depends package

# 获取当前软件包被哪些软件包所依赖

apt-cache rdepends 

3. apt-config

命令介绍

用于查看和操作Debian-based系统中高级软件包工具(APT)的配置。APT是一个软件包管理系统,用于在基于Debian的Linux发行版上安装、删除和管理软件包

apt-config命令允许用户查看当前的APT配置设置,并更改它们以适应他们的需求。可以使用apt-config设置的一些选项包括APT缓存位置、用于软件包下载的默认版本以及代理服务器。

常用命令

# 查看当前APT配置设置:

apt-config dump

查看特定APT配置选项的值:

apt-config get <option>

设置特定APT配置选项的值:

apt-config set <option> <value>

需要注意的是,更改某些配置选项可能会产生意外后果并可能导致系统出现问题,因此建议在更改APT配置之前咨询APT文档或寻求知识渊博的用户或系统管理员的帮助。

4. apt-rdepends

用于查看Debian-based系统中软件包的依赖关系。它基于Advanced Package Tool(APT),可以递归地查找一个或多个软件包所依赖的所有其他软件包,以及这些依赖关系的版本信息。

常见用法

# 查看一个软件包的依赖关系:

apt-rdepends <package>

# 查看多个软件包的依赖关系:

apt-rdepends <package1> <package2> ...

# 以树形结构查看一个软件包的依赖关系:

apt-rdepends -d <package>

# 以逆序的方式查看一个软件包被哪些软件包所依赖:

apt-rdepends -r <package>

需要注意的是,apt-rdepends可以递归地查找依赖关系,因此在处理大型软件包集合时可能需要一些时间。此外,依赖关系可能会因不同的系统配置而有所不同,因此建议在查看依赖关系之前仔细阅读文档并了解相关概念。

apt-cache rdepends 和 apt-rdepends 区别

apt-cache rdependsapt-cache工具的一部分,它可以列出一个或多个软件包所依赖的其他软件包。与apt-rdepends不同,apt-cache rdepends只会列出直接依赖于指定软件包的其他软件包,不会递归地查找所有依赖关系。此外,apt-cache rdepends可以用于查找一个软件包被哪些其他软件包所依赖。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门