Làm cách nào để kiểm tra xem gói đã được cài đặt chưa (không có đặc quyền siêu người dùng)?


56

Tại trường đại học của chúng tôi, chúng tôi có thể nhận được hầu hết mọi gói ubfox mà chúng tôi muốn, nhưng chúng tôi không phải là siêu nhân (chúng tôi cần yêu cầu các gói được cài đặt).

Với một số thư viện không phải lúc nào cũng dễ dàng để biết gói đã được cài đặt hay chưa. Có một cách đơn giản / lệnh để kiểm tra này?

Câu trả lời:


56
apt-cache policy <package name>

7
Điều quan trọng cần biết là nó hỗ trợ hoàn thành tab trong tên gói. Vì vậy, nó khá hữu ích ngay cả khi bạn không biết tên gói chính xác.
Javier Rivera

Thật xấu hổ khi vẫn thoát với trạng thái 0 ngay cả khi gói không có mặt. dpkg -stuy nhiên: Askubfox.com/a/1108801/52975
Ciro Santilli

Với thân thiện hơnapt : apt policy <package name>hoặc apt show <package name>để biết thêm.
Pablo A

18

Tôi luôn luôn sử dụng điều này từ dòng lệnh:

dpkg -l | grep mysql

Vì vậy, ở trên yêu cầu dpkg liệt kê tất cả các gói đã cài đặt và sau đó tôi grep chỉ cho những gói có tên mysql.


3
dpkg -l "*mysql*"cũng hoạt động và không ẩn các dòng giải thích trong đầu ra.
Philipp Wendler

dpkg -l "*mysql*"(hoặc dpkg -l '*mysql*') cũng tạo định dạng đặc biệt của đầu ra để khớp với từng gói trên một dòng của cửa sổ đầu cuối (grep không). Và hình thức này cho phép bạn chọn định dạng ký tự đại diện (tiền tố hoặc hậu tố) và liệu có nên sử dụng ký tự đại diện hay không (so với grep). Nhưng grep cho màu sắc đẹp ..))
vstepaniuk

7

Thêm một biến thể, sử dụng năng khiếu lần này:

aptitude show <package>

Tab hoàn thành hoạt động ở đây là tốt.


6

Bạn có thể sử dụng DSelect. Nó cung cấp truy cập không chỉ đọc su.

Ngoài ra, dpkg -s <package name>cung cấp rất nhiều chi tiết liên quan đến một gói. Ví dụ"

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

Điều này cũng có sẵn như chỉ dpkg -s. Và ngược lại, dpkg-query -lhoạt động cũng như dpkg -lhoặcdpkg --list
belacqua

4

Bạn có thể sử dụng dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$ trong các tập lệnh, vì nó trả về mã thoát 1, nếu <package>không được cài đặt và 0 nếu <package>được cài đặt.


4
Hãy cẩn thận : Nếu dpkg -strả về 0, điều đó không nhất thiết có nghĩa là gói được cài đặt đầy đủ / chính xác . dpkg -scũng trả về 0nếu gói half-configuredconfig-filestrạng thái hoặc ở trạng thái (và tôi cũng đoán vậy half-installed, nhưng tôi không kiểm tra xem). Xem [trang man của dpkg( manpages.ubfox.com/manpages/oneiric/man1/dpkg.1.html ) để biết thêm các trạng thái "không hoàn chỉnh".
Kẻ đánh lửa

1
@Ignitor, điểm tốt. Câu trả lời của tôi đã sai. Gói thậm chí có thể được gỡ bỏ, nhưng không bị thanh trừng. Vì vậy, tôi nghĩ rằng bạn phải kiểm tra đầu ra để kiểm tra, nếu gói được cài đặt hay không.
jarno

2
Tôi chỉnh sửa câu trả lời. Bây giờ nó dựa vào đầu ra của truy vấn dpkg. Tôi không biết giải pháp này di động như thế nào; ví dụ, văn bản có thể được hiển thị bằng ngôn ngữ khác trong một số hệ thống không?
jarno

2

Giải pháp đơn giản hơn:

Bây giờ có một apt listlệnh liệt kê các gói được cài đặt. Bạn cũng có thể tìm kiếm một gói cụ thể với

apt list <package>

Xem man aptđể biết thêm thông tin.


1
apt showđể biết thêm chi tiết
wjandrea

0

dpkg -s sử dụng chương trình

Tôi thích dpkg -svì nó thoát với trạng thái 1nếu bất kỳ gói nào không được cài đặt, giúp dễ dàng tự động hóa nó:

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

Xem thêm:

Đã thử nghiệm trên Ubuntu 18.10.


0

Ví dụ để sử dụng giá trị cụ thể như var trong shell script (ví dụ test.sh)

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

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

Làm cho nó thực thi và bắt đầu với:

test.sh openssh-server

Hoặc làm bất cứ điều gì bạn muốn với trong kịch bản của bạn


0

Bạn cần kiểm tra trạng thái được in bởi dpkg -l, ví dụ:

$ 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

Ở đây cả hai vimfirefox-esrđược cài đặt, do đó bạn có thể gõ:

$ 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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.