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

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

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

在 Linux Mint 上我遵循了代码:

apt-get -y --force-yes install mysql-server-5.6

但我安装了新的 Debian 8 并且没有mysql-server- 相反有mariadb

如何查明包裹是否存在?

我只知道有dpkg -s一个可以告诉是否安装了软件包。

答案1

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

$ apt-cache show screen
Package: screen
Priority: optional
Section: misc
Installed-Size: 950
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Axel Beckert <[email protected]>
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
...

如果包存在,则会显示信息。如果没有,您会看到类似以下内容:

$ apt-cache show foobar
N: Unable to locate package foobar
E: No packages found

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

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

N: Can't select versions from package 'package' as it is purely virtual
N: No packages found

这个exit code的 是零(我认为这有点误导。)

答案2

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

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

function package_exists() {
    return dpkg -l "$1" &> /dev/null
}

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

if ! package_exists mysql-server ; then
    echo ”Please install mysql-server!"
fi

答案3

在一行中:

apt-cache pkgnames | grep -q "\<$your_package_name\>"

如果存在则以 0 退出,如果不存在则以 1 退出。

奖金:有效检查多个包,在文件“packages_we_want”中列出,每行一个,排序为sort

apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want列出您想要的所有包,但是不要存在于存储库中。

apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want列出存储库中所需的所有包。

答案4

我的解决方案

相关内容