Saya ingin mendapatkan daftar paket yang diinstal secara manual oleh apt
atau aptitude
dan dapat mengetahui apakah suatu foobar
paket diinstal secara manual atau otomatis. Apakah ada cara yang rapi untuk melakukan itu dari baris perintah?
apt
package-management
aptitude
Umang
sumber
sumber
Jawaban:
Anda dapat menggunakan salah satu dari dua baris satu ini. Keduanya menghasilkan output yang sama persis pada mesin saya dan lebih tepat daripada semua solusi yang diajukan sampai sekarang (6 Juli 2014) dalam pertanyaan ini.
Menggunakan
apt-mark
:Menggunakan
aptitude
:Sangat sedikit paket masih jatuh melalui celah-celah, walaupun aku curiga ini yang benar-benar dipasang oleh pengguna, baik tepat setelah instalasi melalui setup bahasa lokalisasi atau misalnya melalui installer Totem codec. Juga, versi linux-header juga tampaknya menumpuk, meskipun saya hanya menginstal metapackage non-spesifik. Contoh:
Bagaimana cara kerjanya:
sed
strip tambahan mengeluarkan spasi kosong di akhir baris.Kemungkinan lain tidak berfungsi juga:
ubuntu-14.04-desktop-amd64.manifest
file (di sini untuk Ubuntu 14.04) bukan/var/log/installer/initial-status.gz
. Lebih banyak paket ditampilkan sebagai diinstal secara manual meskipun tidak.apt-mark showauto
bukan/var/log/installer/initial-status.gz
.apt-mark
misalnya tidak menyertakan paket xserver-xorg, sedangkan file lain tidak.Saya menggunakan berbagai postingan StackExchange lainnya sebagai referensi, namun tidak ada yang bekerja sebaik solusi di atas:
Keduanya mendaftar lebih banyak paket daripada solusi di atas.
EDIT: Apa yang harus dilakukan jika Anda telah memutakhirkan dari rilis sebelumnya:
Jika Anda telah memutakhirkan Ubuntu dari satu rilis ke yang berikutnya, Anda mungkin perlu menyesuaikan proses ini. Dalam hal ini, saya akan memeriksa file manifes dari rilis yang lebih baru (lihat di atas) di samping file initial-status.gz dari rilis saat ini. Anda dapat dengan mudah melakukannya dengan hanya menambahkan perbandingan lain. Hanya menggunakan file manifes tidak akan berfungsi, karena sayangnya file manifes tidak mengandung semua yang dilakukan oleh file initial_status.gz (saya telah memeriksa).
sumber
/var/log/installer/initial-status.gz
hilang. Saya juga ingin tahu apakah ini tergantung pada tanda aptsmanual
atau tidak?showmanual
perintah (di bawah). Dan gunakancomm
untuk membandingkan dua daftar (diurutkan). Theshowmanual
Hasil memberi saya 1.840 lebih paket unik dariapt-mark showmanual
tidak ditampilkan dengan metode ini. Tidak ada paket yang unik untuk keluaran daricomm
perintah ini . Saya pikir lebih menarik untuk mencatat bahwa untuk PC saya, 894 paket terdaftar di Kedua hasil. Tidak yakin mengapa ada perbedaan besar. Beberapa (banyak?) Paket tampaknya rilis spesifik. Lainnya seperti XOrg, komponen GTK, danlib*
hal - hal lainnya dapat berupa pembaruan. Bagaimanapun jawaban ini adalah awal yang sangat bagus.apt-mark showmanual
. Sangat menarik berapa banyak perbedaan yang terlihat. daftar Anda memiliki 238 paket sementara pertunjukan kembali 1717 paket. Dari 2179 paket yang diinstal, hanya ada 223 di kedua daftar, 15 hanya di milik Anda (contoh: nodejs, lightdm) dan 223 hanya di showmanual (contoh: xserver-xorg, ubuntu-desktop). Rasanya daftar Anda lebih bermanfaat, tetapi tanpa mengetahui dari mana perbedaan ini berasal, tidak mudah untuk memutuskan ... (tapi saya cukup yakin saya menginstal nginx dan lightdm secara manual ...) [maaf saya baru saja menulis sama;)]Di versi yang lebih baru dari paket apt, ada juga perintah apt-mark
sumber
linux-image-3.11.0-*-generic
dll sebagai manuallinux-image-3.13.0-24-generic
manual tetapi saatlinux-image-3.13.0-27-generic
ini otomatis. Tampaknya pembaruan paket referensi (dalam hal inilinux-image-generic
, yang mengubah dependensi), tanda manual secara otomatis ditetapkanapt-get autoremove
. Ini jelas bukan yang Anda inginkan.Untuk Ubuntu 16.04, periksa file log
/var/log/apt/history.log
.Sebagai contoh:
Ini tidak sempurna, tetapi cukup baik untuk menjelaskan apa yang saya instal dengan tangan. Letakkan
-B 1
pada grep untuk melihat kapan itu dipasang.Contoh output
Tidak yakin apakah ini mengambil
aptitude
atau tidak. Tampaknya tidak mengambil instalasi dari aplikasi desktop Software Ubuntu.sumber
apt-mark showauto | grep -iE '^foobar$'
akan menampilkan "foobar" jika paket diinstal secara otomatis, tidak ada yang sebaliknya.aptitude search '!~M ~i'
akan mencantumkan paket yang tidak diinstal secara otomatis. Sayang sekali kemampuannya tidak akan menjadi bagian dari pemasangan default di Ubuntu Desktop mulai dari 10.10.sumber
aptitude search
menunjukkan SEMUA paket bukan hanya yang diinstal secara manual (saya berasumsi itulah yang diinginkan OP)aptitude search '!~M ~i'
dan daftar 1043 paket. Tidak mungkin saya menginstal banyak paket secara manual.Skrip berikut akan mencetak semua paket yang tidak disetel ke pemasangan otomatis dan karenanya dipasang secara manual:
ini didasarkan pada bagaimana apt-mark mencetak paket yang diinstal secara otomatis.
sumber
sys.exit(1)
tanpaimport sys
dapat menyebabkan kesalahan pada versi python yang lebih baru. Entahimport sys
atau gunakanexit(1)
.Untuk mendapatkan daftar semua paket (tidak diinstal, diinstal oleh pengguna atau diinstal secara default, di semua PPA),
apt
gunakan metode berikut:apt list [option]
Opsi yang mungkin berguna untuk ini adalah:
--installed
untuk hanya menampilkan paket-paket yang diinstal pada sistem (dari sekitar 50.000+)--manual-installed
untuk membuat daftar paket yang secara eksplisit diinstal oleh perintah, baik secara langsung, atau sebagai dependensi.Atau, Anda bisa melakukan:
apt list --manual-installed | grep -F \[installed\]
untuk mendapatkan daftar paket yang dihasilkan dari perintah pengguna dan dependensinya saja, dan untuk mendapatkan informasi tambahan tentang mereka seperti versi dan arsitektur yang didukung (x86, x86_64, amd64, semua, dll.)sumber
Seperti yang dikomentari beberapa orang, kecakapan memainkan pertunjukan apt-mark tampaknya agak buggy (dan saya melaporkannya sebagai bug 727799 ). Ketika saya menggunakannya, itu sebenarnya melaporkan banyak hal yang bahkan tidak masuk / var / lib / apt / extended_states (di mana ini seharusnya disimpan) dan apt-get tidak mencatat hal-hal seperti yang diinstal di / var / lib / apt / extended_states (hanya di / var / lib / dpkg / status). Skrip python oleh txwikinger di atas diambil langsung dari / var / lib / apt / extended_states tetapi jika Anda menggunakannya hari ini sintaks mungkin tidak berfungsi (saya baru saja mulai membuat kesalahan dengan Kubuntu 13.10). Sintaks yang diperbarui adalah:
Bagi saya ini adalah daftar yang sangat pendek dari 5 item yang tampaknya tidak akurat juga.
sumber
sys.exit(1)
tanpaimport sys
dapat menyebabkan kesalahan pada versi python yang lebih baru. Entahimport sys
atau gunakanexit(1)
.Saya ingin memberikan solusi GUI.
Buka
Synaptic Package Manager
Pergi ke
Status
Klik
Installed (manual)
Ini akan memberikan daftar paket yang diinstal secara manual dengan apt atau aptitude.
Sayangnya saya tidak dapat menemukan opsi apa pun
Custom Filters
untuk mengetahui apakah suatufoobar
paket diinstal secara manual atau otomatis.Jika paket di bawah
Installed
tetapi tidak di bawahInstalled (manual)
maka itu Dipasang secara otomatis. Jika paket di bawahInstalled (manual)
maka itu diinstal secara manual.sumber
Jika tidak ada yang memberi Anda jawaban yang bagus menggunakan perintah apr-something, Anda bisa melakukannya dengan cara yang sulit . Apt-get menyimpan informasinya di / var / lib / apt / extended_states. File apa pun yang diinstal secara otomatis akan ditambahkan ke file ini. Jika Anda menginstal paket yang sudah ada di file ini secara manual, paket akan tetap di file ini tetapi dengan Auto-instal: 0 di baris kedua. Itu tidak dihapus.
Catatan: Seperti yang diharapkan, jawaban yang lebih baik yang cenderung berfungsi jika perubahan penempatan file telah muncul. Saya menyimpan milik saya kalau-kalau info tentang lokasi file berguna.
sumber
apt-get install liferea
dan itu tidak menginstal tetapi saya mendapat output yang sesuatu dengan efek "ditandai sebagai diinstal secara manual". Sekarang liferea masih ada dalam file, kecuali baris berikutnya memiliki0
alih - alih a1
. Juga, Anda harus mengubah pola regex Anda menjadi" foobar$"
bukan hanyafoobar
.Setelah banyak googling, saya berhasil menyusun skrip ini. Ini berfungsi dengan baik untuk saya:
sumber
sort -u
bukansort | unique
. Karenaapt-mark
tidak menampilkan arsitektur, Anda harus menghapusnya dari output dpkg sebelum operasi yang ditetapkan (atau digunakandpkg-query -W -f='${Package}\n'
). Selain itu, dpkg dapat mendaftar beberapa paket yang tidak diinstal saat ini. Sedangkan untuk "desc", Anda bisa menggunakan `dpkg-query -W -f = '# $ {binary: Summary} \ n' $ pack, yang lebih cepat.apt-mark
mungkin menampilkan arsitektur untuk beberapa paket, tetapi tidak untuk banyak orangdpkg -l
.apt-cache search
lambat. Mendapatkan daftar tanggal yang terinstal di muka menggunakan sesuatu seperti help.ubuntu.com/community/ListInstalledPackagesByDate mungkin lebih efisienSeperti kata Li Lo,
apt-mark showauto
seharusnya Anda mendapat daftar hal-hal yang diinstal secara otomatis.Sekarang untuk menunjukkan hal-hal yang diinstal secara manual, ternyata ada pengubah pencarian sederhana yang bagus untuk aptitude. Tetapi Anda tidak ingin melakukan itu. Anda ingin menulis perintah bash besar yang melakukan beberapa ilmu roket.
Catatan: Ini lebih merupakan ilustrasi betapa kerennya Anda akan terlihat menerobos perintah bash besar untuk semua teman Anda.
Saya memecahnya menjadi dua baris untuk dibaca. Apa fungsinya?
apt-mark
sumber
comm -3 <(dpkg -l | grep '^ii' | cut -d \ -f 3|sort) <(apt-mark showauto|sort)
lebih baik;)Ini akan mencantumkan semua paket yang diinstal secara manual tanpa: dependensi, paket yang dihapus, paket yang diinstal selama instalasi sistem.
sumber