Biner saya bergantung pada peningkatan pustaka ini dan paket masing-masing:
NAME | PACKAGE:
--------------------------------------+-----------------------------------
libboost_serialization.so.1.55.0 | libboost-serialization1.55.0
libboost_thread.so.1.55.0 | ibboost-thread1.55.0
libboost_date_time.so.1.55.0 | libboost-date-time1.55.0
libboost_signals.so.1.55.0 | libboost-signals1.55.0
Jadi saya ingin mendefinisikan daftar paket:
boostlibnames="libboost-serialization1.55.0 libboost-thread1.55.0 libboost-date-time1.55.0 libboost-signals1.55.0"
Dan sekarang saya ingin memeriksa apakah semuanya sudah terinstal dan baru kemudian dijalankan apt-get install
. Saya tahu apt akan secara otomatis memeriksa apakah paket-paket tersebut sudah diinstal, tetapi saya ingin memberi konfirmasi kepada pengguna apakah ia ingin menginstal pustaka yang hilang sebelum melakukannya.
Jadi apakah ada cara yang bagus untuk memeriksa apakah semua pustaka yang terdaftar (dalam variabel seperti di atas) diinstal?
Jawaban:
The
dpkg -s
perintah mengembalikan status paket yang diinstal. Sebagai contoh, pada sistem saya, jika saya menjalankannya untukfirefox
yang diinstal dannedit
yang tidak, saya mendapatkan:Jadi, Anda dapat menggunakan perintah itu untuk memeriksa apakah suatu paket diinstal:
sumber
installed = installed || isInstalled(libArray[i])
. Demikian juga, saya ingin memasukkan false dalam variabel jika satu atau lebih tidak diinstal. Saya pikir saya bisa melakukan ini denganif
, tapi itu banyak kode tanpa biaya.apt-get install
semuanya. Apa pun yang diinstal hanya akan diabaikan. Beri tahu saya apa yang Anda inginkan dan saya akan mengedit ini. Pada dasarnya, Anda harus mengubah|| echo ...
to|| installed=1
atau sesuatu.if
pernyataan jelek , tetapi variabel akan lebih disukai. Saya berencana untuk membungkusnya menjadi sebuah fungsi.dpkg -s
dapat memeriksa beberapa paket sekaligus.Saya melakukan fungsi ini untuk sistem CentOS hari ini.
Yah, saya sedikit mengubah fungsinya. Lebih cepat dan tidak perlu loop lagi.
Mitra Debian / Ubuntu:
sumber
Berikut ini akan memberi Anda daftar semua paket yang relevan yang tidak diinstal:
Ini melompati
dpkg -l
baris tajuk, dan kemudian mencetak garis tempat dpkg-query mengeluhkan paket yang tidak dikenal, DAN garis yang tidak dimulai denganhi
atauii
(Tahan Inst atau Instal Inst).Biasanya, saya akan melakukan sesuatu seperti
awk 'NR<=5 {next} ; ...'
ataused -e '1,5d'
untuk menghilangkandpkg -l
baris header tetapi dalam kasus ini kita mengarahkan stderr ke stdout untuk menangkap keluhan dengandpkg-query
jugadpkg -l
keluaran, jadi kita tidak bisa begitu saja menghapus yang pertama 5 baris.Ini akan menunjukkan paket baik tidak pernah diinstal, dihapus, dibersihkan, atau di mana instalasi gagal / sebagian-selesai karena kesalahan.
sumber
Saya menggunakan kode berikut dalam pekerjaan saya yang disebut Easy Bash , yang membantu menginstal paket paling cepat di server Ubuntu. Kode ini akan memeriksa paket yang terdaftar sudah terpasang atau belum.
Hasil:
sumber
sumber