Ich möchte ein Installations-Bash-Skript schreiben, in dem ich den MySQL-Server installieren möchte.
Unter Linux Mint hatte ich folgenden Code befolgt:
apt-get -y --force-yes install mysql-server-5.6
aber ich habe das neue Debian 8 installiert und es gibt kein mysql-server
- stattdessen gibt es mariadb
.
Wie kann ich herausfinden, ob ein Paket vorhanden ist?
Ich weiß nur, dass es dpkg -s
welche gibt, die sagen sollten, ob ein Paket installiert ist.
--force-yes
Deaktiviert alle Sicherheitsfunktionen, sodass Sie Ihr System wirklich so weit beschädigen können, dass keine Reparatur mehr möglich ist. Außerdem:--force-yes
überschreibt (deaktiviert)-y
. wo letzteres die Option der Wahl sein könnte: Eine lange Form von-y
ist--assume-yes
, und das ist, was es tut; Ja zu sagen, bis es wirklich hässlich werden könnte, mit dem Risiko von Chaos zwischen Kernelementen, Grundlagen usw.,--force
überschreibt die Sicherheit (lernte es auf die harte--simulate
Option interessiert seinapt-get
, eine--dry-run
, nur für den Fall/etc/apt/sources.list
, oder?Antworten:
(Das Folgende ist von Ubuntu, aber die gleiche Technik funktioniert offensichtlich auch auf Debian)
Wenn das Paket vorhanden ist, werden Informationen angezeigt. Wenn nicht, sehen Sie etwas wie:
Außerdem ist der Exit-Code von
apt-cache
ungleich Null, wenn keine passenden Pakete gefunden werden.Zusätzlicher Hinweis: Wenn Sie
apt-cache show package
ein virtuelles Paket verwenden (eines, das nicht vorhanden ist, auf das jedoch beispielsweise von anderen Paketen verwiesen wird), erhalten Sie Folgendes:Das
exit code
davon ist Null (was meiner Meinung nach etwas irreführend ist.)quelle
sources.list
mit diesem Befehl durchsuchen :apt-cache search *searchstring*
. Dieser Befehl durchsucht auch die Beschreibung von Paketen und kann Ihnen dabei helfen, Pakete zu finden, bei denen Sie den genauen Paketnamen nicht kennen.apt-cache search ...
gibt irgendwelche Übereinstimmungen und die App zurück. gibt 0 zurück, auch wenn nichts gefunden wird, was in einem Bash-Skript nicht praktikabel ist.Ich würde verwenden
dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"
.Es wird geprüft, ob das
mysql-server
Paket installiert ist, und wenn ja, wird diese Tatsache auf dem Bildschirm gedruckt. Eine ausgefeiltere Lösung wäre in bash (ungetestet):So kann man in einem Skript machen:
quelle
In einem Einzeiler:
apt-cache pkgnames | grep -q "\<$your_package_name\>"
Beendet mit 0, wenn es vorhanden ist, 1, wenn nicht.
Bonus: Effiziente Prüfung für mehrere Pakete, aufgeführt in der Datei "packages_we_want", eines pro Zeile, sortiert nach
sort
:apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want
listet alle Pakete auf, die Sie möchten, die jedoch nicht in den Repositorys vorhanden sind.apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want
listet alle gewünschten und in den Repositorys vorhandenen Pakete auf.quelle