我正在构建一些应用程序,用于使用 mysql、phpmyadmin 等设置 apache 服务器...所以我需要一个命令来检查安装是否存在,例如apache2
:
- 需要检查软件包是否已安装或是否存在更新
- 自动安装新/版本包
- 返回是否安装成功。
我没有 Linux 方面的专家,但到目前为止我有这个:
apache2 -v || {
sudo apt install apache2 && {
echo 'INSTALL_SUCCESS'
exit -1
}
}
echo 'NOT FOUND'
但说实话,我不知道这里发生了什么,但我知道它一直在运行安装,并且可能有更好的方法来解决这个问题。
答案1
一般来说,未经用户明确同意就在用户的系统上安装软件并不是一个好主意,自动升级软件也不是一个好主意,因为有时管理员会出于充分且有价值的原因而固定到特定版本。此外,更新可能需要在某些安静时间进行,以避免过多的停机时间。
如果您的程序需要依赖项,那么您应该将其打包为系统包格式(在本例中,可能是 DEB),然后声明您的软件所需的软件的依赖项。例如,如果您需要配置 Apache,则声明对apache2
.然后,管理员可以查看所需的依赖项,选择是否安装您的软件,并以方便的方式一次管理更新。如果不需要该包,您可以声明可选依赖项,例如 Recommends 依赖项。
如果您需要知道apache2
系统上是否存在二进制文件(例如 ),询问的 POSIX 方式是command -v apache2
。这是可移植的,跨系统工作,并且不调用二进制文件。
如果您想知道在 Debian 或 Ubuntu 系统上是否安装了某个软件包,那么正确的命令(在本例中为 for dpkg
)是这样的:
$ dpkg-query -W -f '${db:Status-Abbrev}\n' dpkg | grep -qsE '^.i'
如果安装了该软件包,则返回 0;如果未安装,则返回 1。