Bash에서 Debian에 패키지가 있는지 확인하는 방법

Bash에서 Debian에 패키지가 있는지 확인하는 방법

MySQL 서버를 설치하려는 설치 bash 스크립트를 작성하고 싶습니다.

Linux Mint에서는 다음 코드를 따랐습니다.

apt-get -y --force-yes install mysql-server-5.6

하지만 새 데비안 8을 설치했는데 설치되지 않았습니다 . mysql-server대신에 .mariadb

패키지가 존재하는지 확인하는 방법은 무엇입니까?

나는 dpkg -s패키지가 설치되었는지 알 수 있는 것을 하나만 알고 있습니다.

답변1

(다음은 Ubuntu에서 가져온 것이지만 동일한 기술이 Debian에도 분명히 적용됩니다.)

$ apt-cache show screen
Package: screen
Priority: optional
Section: misc
Installed-Size: 950
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Axel Beckert <[email protected]>
Architecture: amd64
Version: 4.1.0~20120320gitdb59704-9
Depends: libc6 (>= 2.15), libpam0g (>= 0.99.7.1), libtinfo5
Suggests: iselect (>= 1.4.0-1) | screenie | byobu
Filename: pool/main/s/screen/screen_4.1.0~20120320gitdb59704-9_amd64.deb
Size: 645730
...

패키지가 있으면 정보가 표시됩니다. 그렇지 않은 경우 다음과 같은 내용이 표시됩니다.

$ apt-cache show foobar
N: Unable to locate package foobar
E: No packages found

또한 일치하는 패키지가 없으면 종료 코드는 apt-cache0이 아닙니다.

추가 정보:apt-cache show package더미 패키지(존재하지 않지만 다른 패키지에서 참조됨)를 사용하는 경우 다음을 얻게 됩니다.

N: Can't select versions from package 'package' as it is purely virtual
N: No packages found

이것은 exit code0입니다. (약간 오해의 소지가 있는 것 같습니다.)

답변2

나는 그것을 사용할 것이다 dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed".

패키지가 설치되어 있는지 확인 mysql-server하고 설치되어 있으면 이 사실을 화면에 인쇄합니다. 더 복잡한 솔루션은 bash에 있습니다(테스트되지 않음).

function package_exists() {
    return dpkg -l "$1" &> /dev/null
}

따라서 스크립트에서 다음을 수행할 수 있습니다.

if ! package_exists mysql-server ; then
    echo ”Please install mysql-server!"
fi

답변3

한 줄에:

apt-cache pkgnames | grep -q "\<$your_package_name\>"

존재하면 0으로 종료하고 존재하지 않으면 1로 종료합니다.

보너스:"packages_we_want" 파일에 나열된 여러 패키지를 한 줄에 하나씩 다음 기준으로 효과적으로 검사합니다 sort.

apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want원하는 모든 패키지를 나열하지만원하지 않는다저장소에 존재합니다.

apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want저장소의 모든 필수 패키지를 나열합니다.

답변4

내 솔루션

관련 정보