Saya ingin menulis skrip instalasi bash, di mana saya ingin menginstal server MySQL.
Di Linux Mint saya mengikuti kode:
apt-get -y --force-yes install mysql-server-5.6
tapi saya menginstal Debian 8 yang baru dan tidak ada mysql-server
- malah ada mariadb
.
Bagaimana saya bisa mengetahui jika ada paket?
Saya hanya tahu bahwa ada dpkg -s
yang harus memberi tahu apakah suatu paket diinstal.
--force-yes
menonaktifkan semua keamanan, sehingga Anda benar-benar dapat merusak sistem Anda ke titik tidak ada perbaikan. Juga:--force-yes
menimpa (menonaktifkan)-y
. di mana yang terakhir bisa menjadi pilihan pilihan: Bentuk panjang-y
adalah--assume-yes
, dan itulah yang dilakukannya; Mengatakan ya sampai itu bisa menjadi sangat jelek, dengan mempertaruhkan kekacauan di antara elemen-elemen inti, fundamental, dll.--force
--simulate
opsi untukapt-get
, melakukan--dry-run
, untuk berjaga/etc/apt/sources.list
, kan?Jawaban:
(di bawah ini dari Ubuntu, tetapi teknik yang sama juga bekerja pada Debian)
Jika paket ada, informasi akan ditampilkan. Jika tidak, Anda akan melihat sesuatu seperti:
Selain itu, kode keluar tidak
apt-cache
akan nol jika tidak ada paket yang cocok ditemukan.Catatan tambahan: Jika Anda menggunakan
apt-cache show package
paket mana yang virtual (yang tidak ada, tetapi, misalnya, dirujuk oleh paket lain), Anda akan mendapatkan:Ini
exit code
nol (yang agak menyesatkan menurut saya.)sumber
sources.list
dengan perintah ini:apt-cache search *searchstring*
. Perintah itu juga akan mencari deskripsi paket dan dapat membantu Anda menemukan paket di mana Anda tidak tahu nama paket yang tepat.apt-cache search ...
mengembalikan segala jenis kecocokan dan aplikasi. mengembalikan 0 bahkan jika tidak ada yang ditemukan, yang tidak praktis dalam skrip bash.Saya akan menggunakan
dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"
.Ini akan memeriksa apakah
mysql-server
paket diinstal dan jika demikian, ia mencetak fakta ini ke layar. Solusi yang lebih canggih adalah, dalam bash (belum diuji):Jadi seseorang dapat melakukannya dalam sebuah skrip:
sumber
Dalam satu garis:
apt-cache pkgnames | grep -q "\<$your_package_name\>"
keluar dengan 0 jika ada, 1 jika tidak.
Bonus: pemeriksaan efisien untuk beberapa paket, tercantum dalam file "packages_we_want", satu per baris, disortir dengan
sort
:apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want
daftar semua paket yang Anda inginkan, tetapi tidak ada di repositori.apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want
daftar semua paket yang Anda inginkan dan ada di repositori.sumber