如何从 bash 检查软件包是否存在于 Debian 中

Dus*_*vak 14 bash apt deb

我想写一个安装 bash 脚本,我想在其中安装 MySQL 服务器。

在 Linux Mint 上,我遵循了以下代码:

apt-get -y --force-yes install mysql-server-5.6
Run Code Online (Sandbox Code Playgroud)

但是我安装了新的 Debian 8 并且没有mysql-server- 而是有mariadb.

如何确定包是否存在?

我只知道有dpkg -s哪个应该告诉是否安装了一个包。

EEA*_*EAA 15

(以下来自 Ubuntu,但同样的技术显然也适用于 Debian)

$ apt-cache show screen
Package: screen
Priority: optional
Section: misc
Installed-Size: 950
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Axel Beckert <abe@debian.org>
Architecture: amd64
Version: 4.1.0~20120320gitdb59704-9
Depends: libc6 (>= 2.15), libpam0g (>= 0.99.7.1), libtinfo5
Suggests: iselect (>= 1.4.0-1) | screenie | byobu
Filename: pool/main/s/screen/screen_4.1.0~20120320gitdb59704-9_amd64.deb
Size: 645730
...
Run Code Online (Sandbox Code Playgroud)

如果包存在,将显示信息。如果没有,你会看到类似的东西:

$ apt-cache show foobar
N: Unable to locate package foobar
E: No packages found
Run Code Online (Sandbox Code Playgroud)

此外,apt-cache如果没有找到匹配的包, 的退出代码将为非零。

附加说明:如果您使用apt-cache show packagewhere 包是一个虚拟包(一个不存在的包,但例如被其他包引用),您将获得:

N: Can't select versions from package 'package' as it is purely virtual
N: No packages found
Run Code Online (Sandbox Code Playgroud)

exit code这种为零(这是一个有点在我看来误导。)

  • 只是为了完成这个答案:您还可以使用以下命令从 `sources.list` 中搜索定义的存储库:`apt-cache search *searchstring*`。该命令还将搜索包的描述,并可以帮助您找到不知道确切包名称的包。 (3认同)

Ger*_*kai 5

我会使用dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed".

它将检查mysql-server包是否已安装,如果已安装,则将此事实打印到屏幕上。一个更复杂的解决方案是,在 bash 中(未经测试):

function package_exists() {
    return dpkg -l "$1" &> /dev/null
}
Run Code Online (Sandbox Code Playgroud)

因此可以在脚本中执行以下操作:

if ! package_exists mysql-server ; then
    echo ”Please install mysql-server!"
fi
Run Code Online (Sandbox Code Playgroud)

  • 我想他想知道这个包是否存在,而不是它是否已经安装在本地机器上...... (5认同)