패키지가 데비안에 존재하는지 bash에서 확인하는 방법


12

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

리눅스 민트에서 나는 코드를 따랐다.

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

그러나 새로운 데비안 8을 설치했는데 mysql-server대신에 존재 하지 않습니다 mariadb.

패키지가 있는지 어떻게 알 수 있습니까?

나는 dpkg -s패키지가 설치되어 있는지 여부를 알아야한다는 것을 알고 있습니다.


3
--force-yes모든 보안을 비활성화하므로 실제로 시스템을 수리 할 수없는 수준으로 중단 할 수 있습니다. 또한 : --force-yes재정의 (비활성화) -y. 후자는 선택의 여지가 될 수있다 : 긴 형식은 -y이다 --assume-yes. 그리고 그것이하는 일이다. 핵심 요소, 기본 요소 등의 혼란이 위험에 --force
처해

부록 : 당신은에 관심이있을 수 있습니다 --simulate에 대한 옵션 apt-get을 수행하는, --dry-run단지의 경우,
erch

1
명확히하기 위해 : 패키지가에 정의 된 저장소에 있는지 확인하고 /etc/apt/sources.list싶습니까?
wullxz

실제로 데비안 8에는 mariadb와 함께 mysql-server 패키지가 있습니다 : packages.debian.org/jessie/mysql-server
Dan Getz

답변:


13

(아래는 우분투 출신이지만 동일한 기술이 데비안에서도 작동합니다)

$ apt-cache show screen
Package: screen
Priority: optional
Section: misc
Installed-Size: 950
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Axel Beckert <abe@debian.org>
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-cache일치하는 패키지가 없으면 종료 코드는 0이 아닙니다.

추가 참고 : 당신이 사용하는 경우 apt-cache show package패키지는 가상 하나입니다 (존재하지 않는 한,하지만 다른 패키지가 참조, 예를 들면,) 여기서, 당신은 얻을 것이다 :

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

exit code중 0입니다 (제 의견으로는 약간 오도합니다).


3
이 답변을 완료하려면 sources.list다음 명령을 사용 하여 정의 된 리포지토리를 검색 할 수도 있습니다 apt-cache search *searchstring*. 이 명령은 패키지 설명도 검색하며 정확한 패키지 이름을 모르는 패키지를 찾는 데 도움이 될 수 있습니다.
wullxz

1
@ wullxz apt-cache search ...는 모든 종류의 일치 항목과 앱만 반환합니다. 아무것도 발견되지 않은 경우에도 0을 반환하는데 이는 bash 스크립트에서 실용적이지 않습니다.
Alexis Wilke

4

사용 dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"합니다.

mysql-server패키지가 설치되어 있는지 확인하고, 설치되어 있으면이 사실을 화면에 인쇄합니다. 더 정교한 해결책은 bash (unested)입니다.

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

그래서 스크립트에서 할 수 있습니다 :

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

5
패키지가 이미 존재하는지 로컬 컴퓨터에 이미 설치되어 있는지 아닌지 알고 싶다고 생각합니다.
wullxz

0

한 줄짜리에서 :

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 리포지토리에 있고 원하는 모든 패키지를 나열합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.