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
?