Bagaimana saya bisa mengecek apakah suatu paket diinstal (tidak ada hak pengguna super)?


56

Di universitas kami, kami dapat menginstal hampir semua paket ubuntu yang kami inginkan, tetapi kami sendiri bukan pengguna super (kami perlu meminta paket yang diinstal).

Dengan beberapa perpustakaan tidak selalu mudah untuk mengetahui apakah paket tersebut sudah diinstal atau belum. Apakah ada cara / perintah sederhana untuk memeriksa ini?

Jawaban:


56
apt-cache policy <package name>

7
Penting untuk diketahui bahwa ini mendukung penyelesaian tab pada nama paket. Jadi itu cukup berguna bahkan ketika Anda tidak tahu nama paket yang tepat.
Javier Rivera

Malu yang masih keluar dengan status 0 bahkan jika paket tidak ada. dpkg -sakan tetapi: askubuntu.com/a/1108801/52975
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Dengan ramahapt : apt policy <package name>atau apt show <package name>untuk info lebih lanjut.
Pablo A

18

Saya selalu menggunakan ini dari baris perintah:

dpkg -l | grep mysql

jadi di atas meminta dpkg untuk mencantumkan semua paket yang diinstal dan kemudian saya ambil hanya mereka yang memiliki mysql dalam namanya.


3
dpkg -l "*mysql*"juga berfungsi dan tidak menyembunyikan garis penjelas dalam output.
Philipp Wendler

dpkg -l "*mysql*"(atau dpkg -l '*mysql*') juga membuat pemformatan khusus dari output agar sesuai dengan setiap paket pada satu baris jendela terminal (grep tidak). Dan formulir ini memungkinkan Anda untuk memilih format wildcard (awalan atau sufiks), dan apakah akan menggunakan wildcard sama sekali (dibandingkan dengan grep). Tapi grep memberi warna yang bagus ..))
vstepaniuk

7

Satu lagi varian, menggunakan aptitude kali ini:

aptitude show <package>

Penyelesaian tab juga berfungsi di sini.


6

Anda dapat menggunakan dselect. Ini menyediakan akses read-only non-su.

Juga, dpkg -s <package name>memberikan banyak detail terkait paket. Misalnya"

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

Ini juga tersedia sebagai adil dpkg -s. Dan sebaliknya, dpkg-query -lbekerja sama baiknya dengan dpkg -lataudpkg --list
belacqua

4

Anda dapat menggunakan dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$ skrip, karena mengembalikan kode keluar 1, jika <package>tidak diinstal, dan 0 jika <package>diinstal.


4
Hati-hati : Jika dpkg -skembali 0, itu tidak selalu berarti bahwa paket sudah terinstal sepenuhnya / benar . dpkg -sjuga kembali 0jika paket dalam half-configuredatau dalam config-fileskeadaan (dan saya kira juga dalam half-installed, tetapi saya tidak memeriksa itu). Lihat [halaman manual dari dpkg( manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html ) untuk status "tidak lengkap" lebih lanjut.
Ignitor

1
@ Pengawas, poin bagus. Jawaban saya salah. Paket itu bahkan bisa dihapus, tetapi tidak dibersihkan. Jadi saya pikir Anda harus memeriksa output untuk memeriksa, apakah paket sudah diinstal atau belum.
jarno

2
Saya mengedit jawabannya. Sekarang ini bergantung pada output dari dpkg-query. Saya tidak tahu seberapa portabel solusi ini; misalnya, dapatkah teks ditampilkan dalam bahasa lain di beberapa sistem?
jarno

2

Solusi yang lebih sederhana:

Sekarang ada apt listperintah yang mencantumkan paket yang diinstal. Anda juga dapat mencari paket tertentu dengan

apt list <package>

Lihat man aptuntuk informasi lebih lanjut.


1
Dan apt showuntuk lebih jelasnya
wjandrea

0

dpkg -s penggunaan terprogram

Saya suka dpkg -sketika keluar dengan status 1jika salah satu paket tidak diinstal, membuatnya mudah untuk mengotomatiskannya:

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

Lihat juga:

Diuji pada Ubuntu 18.10.


0

Contoh untuk menggunakan nilai spesifik sebagai skrip var in shell (misalnya test.sh)

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

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

Jadikan itu dapat dieksekusi dan mulai dengan:

test.sh openssh-server

Atau lakukan apa pun yang Anda inginkan dengan skrip Anda


0

Anda perlu memeriksa status yang dicetak oleh dpkg -l, contoh:

$ 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

Di sini keduanya vimdan firefox-esrdiinstal, oleh karena itu Anda dapat mengetik:

$ 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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.