it-swarm.cn

如何检查软件包是否已安装(没有超级用户权限)?

在我们的大学中,我们几乎可以安装所需的所有ubuntu软件包,但我们自己不是超级用户(我们需要请求安装软件包)。

对于某些库,并非总是很容易知道该软件包是否已安装。有简单的方法/命令来检查吗?

57
Peter Smit
apt-cache policy <package name>
57
Oli

我总是从命令行使用它:

dpkg -l | grep mysql

因此,上面要求dpkg列出所有已安装的软件包,然后我仅对名称中包含mysql的软件包进行grep。

18
Rick

另一个变体,这次使用aptitude:

aptitude show <package>

制表符补全在这里也适用。

7
Alexey Nedilko

您可以使用dselect。它提供非su只读访问。

另外,dpkg -s <package name>提供了许多与软件包有关的详细信息。例如”

userme:~$ dpkg-query -s sl
Package: sl
Status: unknown ok not-installed
Priority: optional
Section: games
6
Abhinav

您可以使用dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$,因为它返回退出代码1,如果<package>未安装,如果<package>已安装。

4
jarno

更简单的解决方案:

现在有一个apt list命令,列出已安装的软件包。您也可以使用

apt list <package>

man apt 欲获得更多信息。

2
sk8forether

您需要检查dpkg -l打印的状态,例如:

$ dpkg -l firefox-esr vim winff
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                 Version                 Architecture            Description
+++-====================================-=======================-=======================-=============================================================================
hi  firefox-esr                          52.9.0esr+build2-0ubunt AMD64                   Safe and easy web browser from Mozilla
ii  vim                                  2:8.1.1198-0york0~14.04 AMD64                   Vi IMproved - enhanced vi editor
rc  winff                                1.5.3-3                 all                     graphical video and audio batch converter using ffmpeg or avconv

此处同时安装了vimfirefox-esr,因此您可以输入:

$ dpkg -l firefox-esr | grep -q ^.i && echo This package is installed. || echo This package is NOT installed.
This package is installed.
$ dpkg -l vim | grep -q ^.i && echo This package is installed. || echo This package is NOT installed.
This package is installed.
$ dpkg -l winff | grep -q ^.i && echo This package is installed. || echo This package is NOT installed.
This package is NOT installed.
0
SebMa

dpkg -s编程用法

我喜欢dpkg -s,因为如果没有安装任何软件包,它会以1的状态退出,因此很容易实现自动化:

pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
  Sudo apt-get install $pkgs
fi

也可以看看:

在Ubuntu 18.10上测试。

在Shell脚本中使用特定值作为var的示例(例如test.sh

#!/bin/sh
PACKAGE="${1}"
INSTALLED=$(dpkg -l | grep ${PACKAGE} >/dev/null && echo "yes" || echo "no")

echo "${PACKAGE} is installed ... ${INSTALLED}"

使它可执行,然后开始:

test.sh openssh-server

或在脚本中做任何您想做的事

0
Lahmizzar