Hanya kodenya
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
Penjelasan
Salah satu cara untuk memikirkan masalah ini adalah memecahnya menjadi tiga bagian:
- Bagaimana cara saya mendapatkan daftar paket yang tidak diinstal sebagai dependensi?
- Bagaimana cara mendapatkan daftar paket yang diinstal secara default?
- Bagaimana saya bisa mendapatkan perbedaan antara kedua daftar ini?
Bagaimana cara saya mendapatkan daftar paket yang tidak diinstal sebagai dependensi?
Perintah berikut tampaknya berfungsi di sistem saya:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Pendekatan serupa dapat ditemukan di tautan yang diposting Gilles sebagai komentar untuk pertanyaan itu. Beberapa sumber mengklaim bahwa ini hanya akan berfungsi jika Anda menggunakan aptitude untuk menginstal paket; Namun, saya hampir tidak pernah menggunakan aptitude untuk menginstal paket dan menemukan bahwa ini masih berfungsi. The --disable-columns
mencegah aptitude dari bantalan di baris nama paket dengan kosong yang akan menghambat perbandingan di bawah ini. The | sort -u
macam file dan menghapus duplikat. Ini membuat langkah terakhir lebih mudah.
Bagaimana cara mendapatkan daftar paket yang diinstal secara default?
Catatan: Bagian ini dimulai dengan 'jalan yang salah' yang menurut saya ilustratif. Bagian kedua dari kode adalah yang berfungsi.
Ini agak sulit. Saya awalnya berpikir bahwa perkiraan yang baik adalah semua paket yang merupakan dependensi dari meta-paket ubuntu-minimal, standar-ubuntu, desktop-Ubuntu, dan berbagai paket yang terkait dengan kernel linux. Beberapa hasil pencarian Google tampaknya menggunakan pendekatan ini. Untuk mendapatkan daftar dependensi ini, saya pertama kali mencoba yang berikut (yang tidak berfungsi):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
Ini sepertinya mengabaikan beberapa paket yang saya tahu harus datang secara default. Saya masih percaya bahwa metode ini harus bekerja jika ada yang membangun daftar metapackage yang tepat.
Namun, tampaknya mirror Ubuntu berisi file "manifes" yang berisi semua paket dalam instalasi default. Manifes untuk Ubuntu 12.04.3 ada di sini:
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
Jika Anda mencari melalui halaman ini (atau halaman cermin lebih dekat dengan Anda):
http://mirror.pnl.gov/releases/precise/
Anda harus dapat menemukan file ".manifest" yang sesuai dengan versi dan arsitektur yang Anda gunakan. Untuk mengekstrak hanya nama paket yang saya lakukan ini:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
Daftarnya mungkin sudah diurutkan dan unik, tetapi saya ingin memastikan daftar itu sudah diurutkan dengan benar untuk membuat langkah selanjutnya lebih mudah. Saya kemudian memasukkan output defaultinstalled.txt
.
Bagaimana saya bisa mendapatkan perbedaan antara kedua daftar ini?
Ini adalah bagian yang paling mudah karena kebanyakan sistem mirip Unix memiliki banyak alat untuk melakukan ini. The comm
Alat adalah salah satu dari banyak cara untuk melakukan ini:
comm -23 currentlyinstalled.txt defaultinstalled.txt
Ini harus mencetak daftar baris yang unik untuk file pertama. Dengan demikian, ia harus mencetak daftar paket yang diinstal tidak dalam instalasi default.
aptitude search '~i!~M' -F %p
?http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest
dan tambahan| sed "s/ *$//"
tetapi masih tidak ada dadu.apt-mark showmanual | sort -u
, seperti yang ditunjukkan pada jawaban lain. Lebih sederhana, dan tidak bergantung padaaptitude
yang tidak diinstal secara default.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 (Juli 2014) dalam pertanyaan ini. Mereka adalah kombinasi dari dua jawaban (1) dan (2) . Perhatikan bahwa saya awalnya mengirim jawaban ini di sini .
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 bahasa lokalisasi setup atau misalnya melalui Totem codec installer. 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) alih-alih/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.Keduanya mendaftar lebih banyak paket daripada solusi di atas.
sumber
Menurut
man apt-mark
:sumber
showmanual
menunjukkan hal-hal sepertixserver-xorg-video-vesa
, yang saya bersumpah tidak saya instal secara manual.Berikut beberapa contoh output
cat /var/log/apt/history.log
:Adapun pertanyaan Anda, filter barang-barang dengan grep (
cat /var/log/apt/history.log | grep Commandline
).Perhatikan bahwa file-file ini diputar, jadi periksalah yang lain agar Anda tidak kehilangan apa pun:
CATATAN :
Commandline
, jadigrep
triknya tidak akan bekerja dengan mereka.sumber
aptitude
dan manajer paket lainnya. Jika log Anda telah diputar, Anda tidak beruntung.Saya menemukan oneliner cantik ini ketika saya sedang mencari permintaan ini
Satu liner adalah
Oneliner ini menyaring paket yang diinstal oleh sistem menggunakan log dari
/var/log/installer/initial-status.gz
Saya akan memposting tautan ke utas asli ketika saya menemukannya, karena oneliner ini bukan milik saya dan sepertinya saya tidak ingat di mana saya melihatnya.
sumber
Anda ingin melihat artikel ini .
Di akhir artikel, ada skrip python yang harus melakukan apa yang Anda inginkan.
Itu ditulis untuk (k) ubuntu . tetapi harus bekerja untuk Ubuntu juga.
sumber
Di bawah ini adalah Selain Steven D's jawaban .
Baris berikut tampaknya memotong nama paket dengan 32 karakter:
Ini sepertinya berhasil:
lihat jawaban ini
sumber
Periksa
/var/log/apt/term.log
sumber
Anda juga dapat melihat file
/var/lib/apt/extended_states
.Ini berguna jika Anda ingin tahu apa yang diinstal pada partisi lama.
sumber
Terima kasih dan selamat untuk mereka yang telah menemukan permata naskah !!!
Saya ingin menambahkan 2 ¢ dan saya memasang tanggal pemasangan yang saya simpulkan dari $ info.
Saya tidak menguasai detail mengapa $ info file diperbarui atau tidak dan kapan, tetapi itu berhasil dalam praktiknya.
Skrip saya mencantumkan pembaruan terbaru dari paket non-dependensi yang ditambahkan setelah instalasi.
Memberikannya pemeriksaan berkala, saya melihat apa yang akan saya login secara manual tanpa satu pun kesalahan.
Yaitu, kumpulan paket yang dipasang untuk alasan yang sama. Sayangnya, pembaruan merusak urutan itu.
Setelah pemutakhiran sistem, saya memiliki daftar paket tambahan saya yang pemutakhirannya tidak diperbarui diikuti oleh orang-orang yang melakukannya.
Rapi! Nikmati.
sumber