Bagaimana cara saya memeriksa apakah suatu paket diinstal pada server saya?

174

Saya baru saja menginstal Ubuntu Server edisi 13.10 (Saucy Salamander). Tapi saya mengalami sedikit masalah.

Pada akhir instalasi, ia meminta Anda untuk beberapa paket tambahan apakah Anda menginginkannya atau tidak, seperti server OpenSSH dan host mesin virtual. Inilah yang saya lihat:

Masukkan deskripsi gambar di sini

Sekarang, masalah saya adalah saya tidak dapat mengingat apakah saya telah mencentang kotak "virtual machine host". Bagaimana saya memeriksa apakah server saya memiliki paket yang sesuai?

Paket apa yang datang dengan host mesin virtual?

D.Zou
sumber
1
$ apt-cache policy <package-name>, misalnya$ apt-cache policy dillo
Daniel

Jawaban:

230

Apakah Anda ingin tahu tentang semua perintah dpkg dengan opsi? Baca dari tautan di bawah ini.

15 dpkg perintah untuk Mengelola Server Linux berbasis Debian

Untuk Mendaftar semua Paket Terpasang

Di sini "less" adalah pembaca teks sederhana yang digunakan untuk menggulir daftar paket dalam buffer baru yang terbuka di jendela terminal yang ada. Daftar ini tidak akan dicampur dengan perintah dan keluaran terminal lainnya. Tekan 'q' untuk kembali ke terminal prompt. Lihat "man less" untuk info lebih lanjut.

dpkg -l | less

Untuk memeriksa apakah suatu paket diinstal atau tidak:

dpkg -l {package_name}
dpkg -l vlc

Untuk memeriksa apakah paket diinstal atau tidak (misalnya, vlc). Jika diinstal, luncurkan paket:

dpkg -l | grep vlc

Tunjukkan lokasi tempat paket diinstal. "-S" (huruf kapital S) adalah singkatan dari "search"

sudo dpkg -S {package_name}
sudo dpkg -S skype

Untuk menggunakan Grep untuk mencari:

dpkg -l | grep {keywords}
dpkg -l | grep pdf
Babin Lonston
sumber
1
Apa perbedaan antara ini dan dpkg-query -l "nama paket"
heypaleblue
4
Jangan bergantung pada kode keluar dpkg -l packagename, karena mungkin kembali dengan 0 kode keluar bahkan jika paket tidak diinstal sepenuhnya - lihat: github.com/bitrise-io/bitrise/issues/433
Viktor Benei
dpkg -l | cut -d " " -f 3 | grep "^vlc"untuk menampilkan semua nama paket yang dimulai denganvlc
anatoly techtonik
FYI, ini tidak berfungsi untuk paket meta karena tidak berkorelasi langsung dengan dpkg. Respons Anda menjawab pertanyaan seperti yang ditanyakan.
mtalexan
34

Menggunakan dpkg

Perintah ini adalah manajer paket debian.

Anda dapat mendaftar semua paket yang diinstal dengan

dpkg -l

Anda dapat melihat detail untuk paket tertentu dengan

dpkg -p packagename

Dan untuk mengetahui apakah sudah diinstal, gunakan

dpkg -s packagename | grep Status

Anda dapat mempelajari paket mana yang berisi perangkat lunak yang Anda inginkan

apt-cache search name*  

Dalam kasus Anda, Anda harus menggunakan perintah ini untuk mencari nama paket yang Anda inginkan

apt-cache search virtual machine host 
onurbekiroglu
sumber
29

apt -qq list PACKAGE juga dapat digunakan untuk memeriksa apakah PAKET diinstal.

Jika dipasang itu akan mencetak sesuatu seperti (dengan [installed]di akhir baris):

$ apt -qq list awscli
awscli/stable,now 1.4.2-1 all [installed]

Jika tidak diinstal, hasilnya adalah:

$ apt -qq list awscli
awscli/stable 1.4.2-1 all
Viktor Benei
sumber
1
Anda dapat meletakkan bintang di ujung nama paket untuk wildcard.
Brannon
3
Anda juga dapat menggunakan opsi --instal untuk perintah itu untuk membatasi kecocokan yang sebenarnya diinstal.
mtalexan
2
Untuk apa ini -qq? Tampaknya berfungsi secara identik tanpanya, dan opsi itu tidak ada di manualman apt
Gabriel Staples
3
@GabrielStaples Sepertinya apt listperintah belum sepenuhnya didokumentasikan. Beberapa pengujian cepat pada 16,04 tampaknya menunjukkan bahwa -qini adalah sinonim untuk --quietopsi. Yang pertama -qmencegah kata "Selesai" dicetak. Yang kedua juga mencegah "Daftar ..." dari dicetak.
Anthony Geoghegan
14

Saya telah menemukan cara untuk memeriksa instalasi paket hanya dengan perintah dpkg-query dan tanpa pipa.

Saya mencari solusi tersebut saat menulis tugas untuk buku pedoman yang mungkin.

Jadi, Anda dapat melakukan sesuatu seperti ini:

/usr/bin/dpkg-query --show --showformat='${db:Status-Status}\n' '<your package name>'

Ini hanyalah cara lain untuk melakukan hal itu.

DenKoren
sumber
pipa dalam ansible dapat digunakan dengan shellmodul.
sjas
4

Saya menulis jawaban baru sebagai 'Nama tugas ' Tasksel JANGAN muncul di dpkgatau aptkueri. Berarti jawaban lain tidak lengkap (atau salah).

"Saya tidak ingat Jika saya telah mencentang kotak 'host mesin virtual' .."

Periksa apakah ada tanda bintang dengan nama setelah dijalankan kembali sudo tasksel.
(atau ' i ' jika berjalan tasksel --list-tasks).

Jika Anda tidak melihat ini, maka Anda mungkin belum menginstal 'tasksel meta-package '.


"..Bagaimana saya memeriksa apakah server saya memiliki paket yang sesuai?"

Jika Anda ingin mencari tahu apa yang diinstal di bawah paket meta-paket Task Machine Host Virtual:

tasksel --list-tasks

(dalam kasus Anda tasksel --list-tasks | grep virtsudah cukup)

Ini memberikan nama tugas yang tepat dan indikasi apakah itu diinstal.

Dalam kasus Anda, nama tasksel ini adalah virt-host.


"Paket apa yang datang dengan host mesin virtual?"

Dari perintah terakhir, temukan nama tugas tasksel.
Ini diperlukan untuk perintah selanjutnya:

tasksel --task-packages virt-host

Ini mencantumkan meta-paket Tasksel individu (dilambangkan dengan menambahkan '^') yang membentuk nama.
Dalam kasus Anda itu virt-host^.

Setelah Anda menemukan nama-meta yang tepat, Anda dapat menggunakan apt:

 apt show virt-host^ | grep "Package:"

(atau apt-cache show ...jika apt showtidak berhasil.)

Ini akan menampilkan semua paket yang menyusun paket meta yang diberikan.

Kemudian:

 dpkg -l {each individual pkg name listed above}

Ini akan memberi tahu Anda jika paket individual diinstal / dihapus (dicatat oleh huruf ke-2: status 'i' berarti diinstal). Lakukan ini untuk semua paket yang terdaftar di bawah paket tugas / meta.

Ini harus menjawab pertanyaan awal.

Catatan tambahan: /usr/share/tasksel/descs/ubuntu-tasks.desc juga memiliki deskripsi meta-paket Tasksel. Jika Anda: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descitu akan menunjukkan nama meta-paket APT yang tepat. (Dalam kasus Anda ini ubuntu-virt-server). Anda juga dapat menggunakan aptperintah dengan nama-meta ini.

Jika Anda ingin menghapus paket tasksel, ini masuk ke dalam gulma sedikit. Silakan berkonsultasi dengan https://askubuntu.com/a/88897/169878 atau sejumlah jawaban lain di luar sana.

Harap dicatat bahwa paket apt "meta" tidak cocok dengan nama paket Tasksel. Silakan baca Halaman Komunitas Tasksel untuk info lebih lanjut.

bshea
sumber
1
Kedua pertanyaan dijawab dengan benar. Jika Anda downvote, beri alasan, atau katakan mengapa tidak.
bshea
3

Gunakan tasksel ( sudo apt-get install taskseljika Anda belum memilikinya) dan jalankan tasksel --list-tasks.

tasksel akan mencetak daftar tugas, dan akan ada di isebelah setiap tugas yang diinstal, dan di usebelah setiap tugas yang tidak diinstal.

Jika Anda ingin menginstal tugas, gunakan tasksel install <task>. Nama tugas yang Anda cari adalah virt-host.

Item pemilihan perangkat lunak disebut "tugas".

Blake R
sumber
terima kasih telah memberi tahu saya nama tugas, itu adalah salah satu masalah saya, tidak yakin paket mana yang harus dicari.
D.Zou
2

Jika seseorang tertarik, saya membuat skrip kecil yang dapat Anda instal secara otomatis dari daftar paket atau aplikasi atau cukup periksa apakah sudah diinstal:

#!/bin/bash
apt -qq list YOUR_LIST_GOES_HERE | grep -v "installed" | awk -F/ '{print $1}' > /root/list.txt
packages=$(cat /root/list.txt)
grep -q '[^[:space:]]' < /root/list.txt
CHECK_LIST=$?
if [[ $CHECK_LIST -eq 1 ]]; then
echo "Your packages are already installed"
else
echo "Installing packages"
apt-get  install -y $packages
fi

Semoga ini bisa membantu seseorang.

Claudio Taccogna
sumber
2

Solusi yang lebih sederhana:

Sekarang ada apt listperintah yang mencantumkan paket yang diinstal. Anda juga dapat mencari paket tertentu dengan

apt list <package>

Lihat man aptuntuk informasi lebih lanjut. Jika Anda tidak tahu nama paket yang tepat, Anda dapat menggunakan apt searchdiikuti oleh sebagian untuk melihat daftar paket terkait.

sk8forether
sumber