Chỉ là mã
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
Giải trình
Một cách để suy nghĩ về vấn đề này là chia vấn đề này thành ba phần:
- Làm thế nào để tôi có được một danh sách các gói không được cài đặt như phụ thuộc?
- Làm thế nào để tôi có được một danh sách các gói được cài đặt theo mặc định?
- Làm thế nào tôi có thể nhận được sự khác biệt giữa hai danh sách này?
Làm thế nào để tôi có được một danh sách các gói không được cài đặt như phụ thuộc?
Lệnh sau dường như hoạt động trên hệ thống của tôi:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Cách tiếp cận tương tự có thể được tìm thấy trong các liên kết mà Gilles đã đăng dưới dạng bình luận cho câu hỏi. Một số nguồn cho rằng điều này sẽ chỉ hoạt động nếu bạn sử dụng năng khiếu để cài đặt các gói; tuy nhiên, tôi gần như không bao giờ sử dụng năng khiếu để cài đặt các gói và thấy rằng nó vẫn hoạt động. Việc --disable-columns
ngăn chặn khả năng từ các dòng đệm của tên gói với khoảng trống sẽ cản trở việc so sánh bên dưới. Việc | sort -u
sắp xếp các tập tin và loại bỏ trùng lặp. Điều này làm cho bước cuối cùng dễ dàng hơn nhiều.
Làm thế nào để tôi có được một danh sách các gói được cài đặt theo mặc định?
Lưu ý: Phần này bắt đầu với một 'đường dẫn sai' mà tôi nghĩ là mang tính minh họa. Đoạn mã thứ hai là mã hoạt động.
Đây là một chút phức tạp hơn. Ban đầu tôi nghĩ rằng một xấp xỉ tốt sẽ là tất cả các gói phụ thuộc vào các gói meta ub Ubuntu-Minimal, ub Ubuntu-standard, ubfox-desktop và các gói liên quan đến kernel linux khác nhau. Một vài kết quả trên các tìm kiếm google dường như sử dụng phương pháp này. Để có danh sách các phụ thuộc này, trước tiên tôi đã thử cách sau (không hoạt động):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
Điều này dường như bỏ qua một số gói mà tôi biết phải đến theo mặc định. Tôi vẫn tin rằng phương pháp này sẽ hoạt động nếu một người xây dựng đúng danh sách các siêu dữ liệu.
Tuy nhiên, dường như các máy nhân bản Ubuntu chứa tệp "tệp kê khai" chứa tất cả các gói trong cài đặt mặc định. Tệp kê khai cho Ubuntu 12.04.3 có tại đây:
http://mirror.pnl.gov/release/precise/ubfox-12.04.3-desktop-amd64.manifest
Nếu bạn tìm kiếm thông qua trang này (hoặc trang của gương gần bạn hơn):
http://mirror.pnl.gov/release/precise/
Bạn sẽ có thể tìm thấy tệp ".manifest" tương ứng với phiên bản và kiến trúc bạn đang sử dụng. Để chỉ trích xuất tên gói tôi đã làm điều này:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
Danh sách có khả năng đã được sắp xếp và duy nhất, nhưng tôi muốn chắc chắn rằng nó đã được sắp xếp hợp lý để làm cho bước tiếp theo dễ dàng hơn. Tôi sau đó đặt đầu ra defaultinstalled.txt
.
Làm thế nào tôi có thể nhận được sự khác biệt giữa hai danh sách này?
Đây là phần dễ nhất vì hầu hết các hệ thống giống Unix có nhiều công cụ để làm việc này. Công comm
cụ này là một trong nhiều cách để làm điều này:
comm -23 currentlyinstalled.txt defaultinstalled.txt
Điều này sẽ in danh sách các dòng duy nhất cho tập tin đầu tiên. Vì vậy, nó nên in một danh sách các gói đã cài đặt không có trong cài đặt mặc định.
aptitude search '~i!~M' -F %p
không được?