패키지가 설치되어 있는지 어떻게 확인합니까 (수퍼 유저 권한 없음)?


56

우리 대학에서는 원하는 거의 모든 우분투 패키지를 설치할 수 있지만, 수퍼 유저는 아닙니다 (패키지 설치를 요청해야 함).

일부 라이브러리에서는 패키지가 이미 설치되어 있는지 여부를 항상 쉽게 알 수있는 것은 아닙니다. 이것을 확인하는 간단한 방법 / 명령이 있습니까?

답변:


56
apt-cache policy <package name>

7
패키지 이름에서 탭 완성을 지원한다는 것을 알아야합니다. 따라서 정확한 패키지 이름을 모르는 경우에도 매우 유용합니다.
Javier Rivera

패키지가 없어도 상태 0으로 여전히 종료되는 수치입니다. dpkg -s그러나 askubuntu.com/a/1108801/52975
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

친근apt : apt policy <package name>또는 apt show <package name>추가 정보를 원하시면.
Pablo A

18

나는 항상 명령 줄에서 이것을 사용합니다.

dpkg -l | grep mysql

위의 내용은 dpkg에게 설치된 모든 패키지를 나열하도록 요청한 다음 이름에 mysql이있는 패키지 만 grep합니다.


3
dpkg -l "*mysql*"또한 출력에서 ​​설명 줄을 숨기지 않으며 작동하지 않습니다.
Philipp Wendler

dpkg -l "*mysql*"(또는 dpkg -l '*mysql*')는 터미널 창의 한 줄에 각 패키지에 맞게 출력의 특수 형식을 지정합니다 (grep은 그렇지 않습니다). 이 양식을 사용하면 와일드 카드 형식 (접두사 또는 접미사)과 와일드 카드 사용 여부 (grep와 비교)를 선택할 수 있습니다. 그러나 그렙 좋은 색상을 제공합니다 ..))
vstepaniuk

7

이번에는 적성을 사용하는 또 다른 변형 :

aptitude show <package>

탭 완성도 여기에서 작동합니다.


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>이 설치되어 있지 않으면 종료 코드 1을, 설치되어 있으면 0을 반환하므로 스크립트에서 사용할 수 있습니다 <package>.


4
주의 :을 dpkg -s반환 0한다고해서 반드시 패키지가 완전히 / 정확하게 설치된 것은 아닙니다 . dpkg -s또한 0패키지가 상태 half-configured또는 config-files상태 인 경우 반환 합니다 (또한 추측 half-installed하지만 확인하지 않았습니다). 의 [맨 페이지를 참조하십시오 dpkg( manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html를 더 "불완전"상태에 대한).
점화기

1
@ 점화기, 좋은 지적. 내 대답은 틀렸다. 패키지를 제거 할 수도 있지만 제거 할 수는 없습니다. 따라서 패키지가 설치되어 있는지 여부를 확인하기 위해 출력을 검사해야한다고 생각합니다.
jarno

2
나는 대답을 편집했다. 이제 dpkg-query의 출력에 의존합니다. 이 솔루션이 얼마나 이식성이 좋은지 모르겠습니다. 예를 들어 일부 시스템에서 텍스트가 다른 언어로 표시 될 수 있습니까?
jarno

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

또한보십시오:

우분투에서 테스트 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.