Debian'da paket mevcutsa bash'tan nasıl kontrol edilir


12

MySQL sunucusunu kurmak istediğim bir kurulum bash betiği yazmak istiyorum.

Linux Mint'te kodu izlemiştim:

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

ama yeni Debian 8'i kurdum ve yok mysql-server- bunun yerine var mariadb.

Paketin olup olmadığını nasıl öğrenebilirim?

Sadece dpkg -sbir paketin kurulu olup olmadığını söylemesi gerektiğini biliyorum .


3
--force-yestüm güvenliği devre dışı bırakır, böylece sisteminizi tam olarak onarılmayacak şekilde bozabilirsiniz. Ayrıca: --force-yesgeçersiz kılar (devre dışı bırakır) -y. İkinci seçenek seçenek olabilir burada: A uzun biçim -yolduğunu --assume-yesve bu kadar böyle yapıyor; O çekirdek elemanları, temelleri, vb arasındaki hasara riske sahip gerçekten karışacak kadar evet diyen --forcegeçersiz kılar sonları güvenlik (bunu zor yoldan öğrendim)
erch

Zeyilname: Her ihtimale karşı, yapma --simulateseçeneği ile ilgilenebilirsinizapt-get--dry-run
erch

1
sadece açıklığa kavuşturmak için: bir paketin tanımlanmış depolardan herhangi birinde olup olmadığını öğrenmek istersiniz /etc/apt/sources.list, değil mi?
wullxz

Debian 8'de mariadb ile birlikte bir mysql-sunucu paketi olduğunu unutmayın: Packages.debian.org/jessie/mysql-server
Dan Getz

Yanıtlar:


13

(aşağıdaki Ubuntu'dan, ancak aynı teknik açıkça Debian üzerinde de çalışıyor)

$ 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
...

Paket mevcutsa, bilgiler görüntülenir. Değilse, şöyle bir şey görürsünüz:

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

Ayrıca, apt-cacheeşleşen paket bulunmazsa çıkış kodu sıfırdan farklı olacaktır.

Ek not: Eğer kullanıyorsanız apt-cache show packagepaket sanal biridir (yoksa bir, ama diğer paketleri tarafından başvurulan, örneğin,) nerede, elde edersiniz:

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

Bu exit codesıfır (bence biraz yanıltıcı.)


3
Sadece bu cevabı tamamlamak için: Ayrıca gelen tanımlanmış depoları arama yapabilirsiniz sources.listBu komutla: apt-cache search *searchstring*. Bu komut ayrıca paketlerin açıklamasını da arayacaktır ve tam paket adını bilmediğiniz paketleri bulmanıza yardımcı olabilir.
wullxz

1
@wullxz, sadece apt-cache search ...her türlü eşleşmeyi ve uygulamayı döndürür. bash betiğinde pratik olmayan hiçbir şey bulunmasa bile 0 değerini döndürür.
Alexis Wilke

4

Kullanırdım dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed".

mysql-serverPaketin kurulu olup olmadığını kontrol eder ve eğer öyleyse, bu gerçeği ekrana yazdırır. Daha karmaşık bir çözüm bash (denenmemiş) olacaktır:

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

Yani bir komut dosyasında yapılabilir:

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

5
Bence paketin mevcut olup olmadığını bilmek istiyor ve yerel makineye zaten yüklenmişse değil ...
wullxz

0

Tek astarda:

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

varsa 0 ile, değilse 1 ile çıkar.

Bonus: "paketler_we_want" dosyasında, her satıra bir tane olmak üzere, aşağıdakilere göre sıralanmış birden fazla paket için etkili kontrol sort:

apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_wantlisteleri, istediğiniz, ama hepsi paketler yok depoları var.

apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want depolarda istediğiniz ve var olan tüm paketleri listeler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.