パッケージがインストールされているかどうかを確認するにはどうすればよいですか(スーパーユーザー特権なし)?


56

私たちの大学では、必要なほぼすべてのubuntuパッケージをインストールできますが、スーパーユーザーではありません(インストールするパッケージをリクエストする必要があります)。

一部のライブラリーでは、パッケージが既にインストールされているかどうかを確認するのは必ずしも簡単ではありません。これをチェックする簡単な方法/コマンドはありますか?

回答:


56
apt-cache policy <package name>

7
パッケージ名のタブ補完をサポートしていることを知っておくことが重要です。したがって、正確なパッケージ名がわからない場合でも非常に便利です。
ハビエルリベラ

パッケージが存在しなくてもステータス0で終了する恥。dpkg -sただし:askubuntu.com/a/1108801/52975
Ciro Santilli新疆改造中心法轮功六四事件

友好aptapt policy <package name>またはapt show <package name>詳細は。
パブロA

18

私は常にコマンドラインからこれを使用しています:

dpkg -l | grep mysql

上記の例では、dpkgにインストールされているすべてのパッケージをリストするように要求し、mysqlが名前に含まれるパッケージのみをgrepします。


3
dpkg -l "*mysql*"これも機能し、出力の説明行を非表示にしません。
フィリップウェンドラー

dpkg -l "*mysql*"(またはdpkg -l '*mysql*')ターミナルウィンドウの1行に各パッケージを収めるために、出力の特別なフォーマットを作成します(grepはしません)。このフォームでは、ワイルドカード形式(プレフィックスまたはサフィックス)を選択し、ワイルドカードを使用するかどうか(grepと比較して)を選択できます。しかし、grepは素晴らしい色を与えます。)))
vstepaniuk


6

dselectを使用できます。非su読み取り専用アクセスを提供します。

また、dpkg -s <package name>パッケージに関連する多くの詳細を提供します。例えば"

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

これは、としても利用可能ですdpkg -s。そして逆に、またはdpkg-query -l同様に動作しますdpkg -ldpkg --list
-belacqua

4

がインストールされていないdpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$ 場合は終了コード1を返し<package><package>インストールされている場合は0を返すため、スクリプトで使用できます。


4
注意:がdpkg -s返される場合0、パッケージが完全に/正しくインストールされていることを必ずしも意味しません。パッケージが状態にあるか状態にある場合にdpkg -sも返されます(また、にあると思いますが、私はそれを確認しませんでした)。[のmanページを参照してください(manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.htmlさらに「不完全」状態のために)。0half-configuredconfig-fileshalf-installeddpkg
イグナイター14年

1
@Ignitor、良い点。私の答えは間違っていました。パッケージを削除することもできますが、削除することはできません。したがって、パッケージがインストールされているかどうかを確認するには、出力を調べる必要があると思います。
jarno 14

2
答えを編集しました。現在では、dpkg-queryの出力に依存しています。このソリューションの移植性はわかりません。たとえば、一部のシステムではテキストを別の言語で表示できますか?
jarno 14

2

より簡単なソリューション:

apt listインストールされたパッケージをリストするコマンドがあります。また、特定のパッケージを検索することもできます

apt list <package>

詳細についてはman apt、を参照してください。


1
そして、apt show詳細は
wjandrea

0

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。でテスト済み。


0

特定の値をシェルスクリプトの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

次の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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.