Debianにパッケージが存在するかどうかをbashから確認する方法


12

MySQLサーバーをインストールするインストールbashスクリプトを記述したいと思います。

Linux Mintでは、私はコードに従っていました:

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

しかし、私は新しいDebian 8をインストールしましたが、ありませんmysql-server-代わりにありmariadbます。

パッケージが存在するかどうかを確認するにはどうすればよいですか?

私はdpkg -s、パッケージがインストールされているかどうかを判断する必要があることを知っています。


3
--force-yesすべてのセキュリティを無効にするため、システムを完全に修復できなくなる可能性があります。また、--force-yesオーバーライド(非アクティブ化)し-yます。後者は選択肢の1つになる可能性があります。isの長い形式で-yあり--assume-yes、それがその機能です。コア要素、ファンダメンタルズなどの間で大混乱が発生する危険性があり、本当に醜くなるまでイエスと言うと、--forceオーバーライドがセキュリティを壊します(難しい方法で学んだ)
erch

補遺:あなたは興味があるかもしれない--simulateためのオプションapt-getやって、--dry-run念のために、
erch

1
明確にするために:パッケージがで定義されているリポジトリのいずれかにあるかどうかを確認したいの/etc/apt/sources.listですよね?
wullxz

:実際にmariadbと並んで、Debianの8中のmysql-serverパッケージがあることに注意してくださいpackages.debian.org/jessie/mysql-server
ダン・ゲッツ

回答:


13

(以下はUbuntuからのものですが、同じ手法が明らかにDebianでも機能します)

$ 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一致するパッケージが見つからない場合、の終了コードはゼロ以外になります。

追加の注記:あなたが使用している場合apt-cache show package、パッケージが仮想一つです(存在しないもの、しかし、例えば、他のパッケージによって参照されている)場合は、あなたが得られます。

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

exit codeこののは(私の意見では誤解を招くビットがある。)はゼロであります


3
この回答を完了するだけsources.listですapt-cache search *searchstring*。次のコマンドを使用して、から定義済みのリポジトリを検索することもできます。このコマンドはパッケージの説明も検索し、正確なパッケージ名がわからないパッケージを見つけるのに役立ちます。
wullxz

1
@wullxz、apt-cache search ...すべての種類の一致とアプリを返すだけです。何も見つからなくても0を返しますが、bashスクリプトでは実用的ではありません。
Alexis Wilke 2017

4

私は使用します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

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.