Ubuntu: memeriksa paket terpasang dengan apt dan dpkg-query
Di Ubuntu, gunakan apt list --installed ketika Anda menginginkan daftar paket yang terinstal secara mudah dibaca, dan gunakan dpkg-query ketika Anda membutuhkan pengecekan status yang tepat atau output terstruktur untuk skrip. Perintah terbaik tergantung pada apakah Anda mengetahui nama paket, perlu mengidentifikasi paket yang memiliki file, atau ingin memisahkan paket yang diinstal secara manual dan otomatis.
Daftar semua paket Deb yang terinstal
APT (Advanced Package Tool) mengelola paket Deb dan dpkg menyimpan catatan lokal. Kueri berikut menampilkan nama, versi, arsitektur dan indikasi status tanpa memasang atau menghapus paket:
apt list --installed
Jika daftar terlalu panjang, salurkan ke less. Anda juga dapat memberikan pola nama paket secara langsung.
apt list --installed | less
apt list --installed 'nginx*'
Perintah apt dirancang terutama sebagai antarmuka interaktif untuk manusia. Untuk file inventaris, perbandingan, dan skrip, dpkg-query biasanya lebih baik karena format keluaran dapat ditentukan secara eksplisit.
dpkg-query -W -f='${db:Status-Status}\t${binary:Package}\t${Version}\t${Architecture}\n' \
| awk -F '\t' '$1=="installed" {print $2 "\t" $3 "\t" $4}' \
| LC_ALL=C sort
-W juga dapat mencakup catatan paket yang sudah dihapus. Filter ini mempertahankan status installed dan menghasilkan tiga kolom bertab: nama, versi dan arsitektur. Kutip tunggal mempertahankan ${...} untuk dpkg; hasilnya bukan pemeriksaan integritas.
Periksa apakah paket tertentu telah terpasang
Saat Anda mengetahui nama paket yang tepat
Perintah berikut menampilkan catatan database dpkg untuk nginx. Paket yang terpasang sepenuhnya biasanya menyertakan Status: install ok installed dalam keluaran.
dpkg-query -s nginx
Untuk mencetak hanya status saat ini dalam bentuk ringkas, minta bidang status secara langsung.
dpkg-query -W -f='${db:Status-Status}\n' nginx
Status yang diharapkan adalah installed. Catatan yang hanya menyisakan konfigurasi dapat mengembalikan config-files dengan status keluar nol. Skrip harus memeriksa nilai status dan kode keluar; nol berarti kueri berhasil, bukan bukti paket terpasang. Paket yang tidak ada atau kesalahan kueri menghasilkan kode nonzero.
Ketika Anda ingin mencari nama paket yang serupa
dpkg-query -l menerima pola wildcard shell. Kutip pola tersebut sehingga shell tidak memperluasnya sebelum dpkg-query menerimanya.
dpkg-query -l 'nginx*'
Tiga karakter pertama pada output menggambarkan tindakan yang diinginkan, status saat ini, dan status kesalahan. Dua posisi pertama ii berarti instalasi dipilih dan paket terpasang; pastikan juga posisi ketiga tidak menunjukkan kesalahan.
| Kode | Arti |
|---|---|
ii |
Paket dipilih untuk instalasi dan terpasang; periksa juga posisi kesalahan ketiga. |
rc |
Paket dipilih untuk dihapus dan hanya berkas konfigurasi yang tersisa; jangan hitung sebagai terpasang. |
iU |
Paket telah dibongkar, tetapi konfigurasi belum selesai. |
| Status huruf besar | Kode seperti H, U, F atau R dapat menunjukkan status belum selesai atau kesalahan. Periksa status rinci dan log manajemen paket. |
Periksa versi yang terpasang dan kandidat repositori
Lihat versi yang tercatat
Periksa status curl terlebih dahulu. Keluaran berikut adalah versi yang tercatat; catatan paket yang telah dihapus juga dapat memiliki versi.
dpkg-query -W -f='${binary:Package}\t${Version}\n' curl
Field binary:Package menambahkan kualifikasi arsitektur saat diperlukan untuk paket Multi-Arsitektur. Ini lebih aman daripada field Package biasa saat Anda membandingkan versi atau inventaris di berbagai sistem.
Bandingkan versi yang terpasang dan kandidat
apt-cache policy curl
Installed adalah versi terpasang, sedangkan Candidate dipilih oleh kebijakan APT berdasarkan prioritas dan indeks yang tersedia. Kandidat dapat sama dengan versi terpasang atau tidak ada; ia tidak selalu versi terbesar dari semua repositori. Metadata repositori mungkin kedaluwarsa. Jika perlu memperbarui indeks, jalankan sudo apt update dan periksa kesalahan jaringan atau tanda tangan; perintah ini mengakses jaringan dan tidak memperbarui paket terpasang.
Temukan file yang diinstal oleh paket
Daftar file yang dicatat untuk sebuah paket
dpkg-query -L nginx
Perintah ini mencantumkan file-file yang dicatat untuk paket dalam database dpkg. Ini tidak selalu termasuk log, cache, unggahan, database, atau file lain yang dibuat aplikasi setelah instalasi.
Identifikasi paket yang memiliki sebuah file
dpkg-query -S /usr/bin/curl
Jika jalur adalah tautan simbolik, periksa juga target yang diselesaikan.
Jalankan readlink -f terlebih dahulu dan pastikan berhasil serta menghasilkan jalur tidak kosong sebelum kueri kedua. Jalur Python adalah contoh yang dapat berbeda pada sistem Anda.
readlink -f /usr/bin/python3
dpkg-query -S "$(readlink -f /usr/bin/python3)"
dpkg-query -S mencari jalur dalam catatan lokal dpkg; hasil tersebut tidak memeriksa seluruh katalog repositori atau membuktikan isi berkas tetap utuh. Untuk menemukan paket repositori mana yang menyediakan file yang belum terpasang, gunakan alat pencarian terindeks terpisah seperti apt-file.
Pisahkan paket yang diinstal secara manual dan otomatis
APT mencatat tanda manual dan otomatis; tanda tersebut dapat berubah dan tidak selalu menunjukkan siapa yang memasang paket.
apt-mark showmanual
apt-mark showauto
Kueri ini tidak mengubah tanda. Lihat manual apt-mark Ubuntu untuk arti tanda manual dan otomatis.
Hasil showmanual tidak sekadar riwayat aplikasi yang diinstal seseorang kemudian. Ini juga dapat berisi metapaket dan komponen yang ditandai sebagai manual oleh instalasi Ubuntu asli. Jangan menyimpulkan tujuan atau riwayat instalasi paket hanya dari daftar ini.
Sebuah dependensi yang diinstal secara otomatis mungkin menjadi memenuhi syarat untuk autoremove ketika tidak ada paket yang diinstal secara manual yang membutuhkannya. Selalu tinjau perubahan yang diusulkan sebelum menghapus apa pun.
sudo apt autoremove --dry-run
Simpan inventaris paket yang terinstal ke dalam berkas
Untuk pemecahan masalah atau membandingkan sistem, simpan nama paket, versi, dan arsitektur sebagai data yang dipisahkan tab.
Contoh ini memakai Bash: pipefail melaporkan kegagalan tahapan pipeline dan set -C mencegah penimpaan berkas biasa yang sudah ada. Kedua pengaturan berlaku hanya di subshell.
(
set -o pipefail
set -C
dpkg-query -W -f='${db:Status-Status}\t${binary:Package}\t${Version}\t${Architecture}\n' \
| awk -F '\t' '$1=="installed" {print $2 "\t" $3 "\t" $4}' \
| LC_ALL=C sort > installed-packages.tsv
)
Gunakan direktori tujuan dan nama baru untuk setiap inventaris. Periksa segera echo $? dan isi berkas: status nol diharapkan. Kegagalan masih dapat meninggalkan berkas kosong atau parsial, yang tidak boleh dianggap inventaris valid.
Bandingkan inventaris dari dua sistem atau dua titik waktu dengan:
diff -u installed-packages-before.tsv installed-packages-after.tsv
Gunakan dua inventaris valid dengan nama tersebut atau ganti dengan nama sebenarnya. diff mengembalikan 0 jika sama, 1 jika berbeda, dan 2 jika terjadi kesalahan. Baris - berasal dari inventaris awal dan + dari inventaris akhir.
File ini adalah inventaris sistem pada waktu tertentu, bukan cadangan lengkap atau metode pemulihan. Rilis Ubuntu lain mungkin tidak menyediakan versi yang sama, dan definisi repositori, Arsip Paket Pribadi (PPA), paket Snap, konfigurasi lokal, dan data aplikasi harus ditangani secara terpisah.
Membedakan paket Deb dan Snap
apt dan dpkg-query memeriksa paket Deb. Aplikasi yang diinstal sebagai Snap muncul dalam daftar terpisah.
snap list
Jika snapd tersedia, snap list menunjukkan revisi aktif; snap list --all juga mencakup revisi lama yang masih terpasang. Lihat dokumentasi Snap.
Inventaris perangkat lunak lengkap mungkin juga perlu mencakup gambar kontainer, manajer paket khusus bahasa, program yang diinstal secara manual, dan metode penyebaran lainnya.
Ringkasan perintah berdasarkan tugas
| Tugas | Perintah yang direkomendasikan |
|---|---|
| Daftar semua paket Deb yang terinstal | apt list --installed |
| Hasilkan nama dan versi yang terstruktur | dpkg-query -W -f='format' |
| Periksa status paket tertentu | dpkg-query -s PACKAGE |
| Bandingkan versi yang terpasang dan kandidat | apt-cache policy PACKAGE |
| Daftar file yang dipasang oleh suatu paket | dpkg-query -L PACKAGE |
| Identifikasi pemilik file | dpkg-query -S FILE |
| Daftar paket yang ditandai sebagai manual | apt-mark showmanual |
| Daftar paket Snap yang terpasang | snap list |
Pembatasan penting dan pemeriksaan keamanan
PACKAGE, FILE dan format adalah placeholder. Kueri -W tidak memfilter status dengan sendirinya; gunakan filter di atas untuk inventaris yang hanya terpasang.
- Pencarian dengan
grepmungkin cocok dengan beberapa paket yang mengandung teks yang sama dalam nama mereka. Gunakan nama tepat dan periksa status serta kode keluardpkg-query -satau-W; keberadaan baris saja tidak membuktikan pemasangan. dpkg-query -ldapat menampilkan paket yang telah dihapus tetapi masih memiliki berkas konfigurasi. Baca kolom status alih-alih menganggap setiap baris sebagai terpasang.- Daftar paket yang terpasang tidak memberi tahu Anda apakah layanannya sedang berjalan. Periksa layanan secara terpisah dengan alat manajemennya, seperti
systemctl status. - Sebelum menghapus paket, tinjau dependensi, metapackage, dan fungsi sistem operasi yang mungkin bergantung padanya.




