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 grep mungkin cocok dengan beberapa paket yang mengandung teks yang sama dalam nama mereka. Gunakan nama tepat dan periksa status serta kode keluar dpkg-query -s atau -W; keberadaan baris saja tidak membuktikan pemasangan.
  • dpkg-query -l dapat 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.

Referensi resmi