Câu hỏi Zypper: Cách liệt kê các gói đã cài đặt không có trong repo


Trong một hệ thống sử dụng Zypper để quản lý gói (openSuse, trong trường hợp của tôi) làm thế nào người ta có thể nhận được một danh sách tất cả các gói đã cài đặt không được liên kết với một kho lưu trữ hiện đang được kích hoạt?

Vấn đề thực sự: Khi nâng cấp bản phân phối (ví dụ: từ openSuse 12.1 đến 12.2), tôi vô hiệu hóa tất cả các kho lưu trữ không chuẩn mà tôi đã bật. Thông thường, tôi chỉ thêm chúng để có được phiên bản mới của một công cụ cụ thể, nhưng phiên bản mới hơn đó được bao gồm theo mặc định trong bản phân phối được cập nhật. Đôi khi, mặc dù các gói bổ sung đã được cài đặt từ kho lưu trữ, nhưng tôi không biết cách phát hiện chúng. Hệ thống hoạt động, nhưng các gói đó sẽ không bao giờ được cập nhật kể từ khi tôi xóa kho lưu trữ cung cấp sau khi nâng cấp.


4
2017-12-11 20:32


gốc




Các câu trả lời:


Đó là một chút về rối tung xung quanh với yêu cầu zypper.

1) Tìm các gói đã cài đặt, đến từ các kho lưu trữ không-mở-phân phối:

zypper search -s | grep "i |" | grep -vi "| patch" | grep -vi "| opensuse" > list1.txt

2) Tìm các gói, có sẵn từ kho lưu trữ mở (bất kể chúng được cài đặt hay không):

zypper search -s | grep "v |" | grep -vi "| patch" | grep -i "| opensuse" > list2.txt

3) Xác định các gói từ danh sách1, không được trình bày trong danh sách 2:

cat list1.txt | cut -d " " -f3 | cut -d " " -f1 | while read line
do
    if [ "$(cat list2.txt | grep -i $line)" = "" ]; then
        echo "$line"
    fi
done

Điều này nên giải quyết trường hợp (thử nghiệm trên openSUSE 11.3).


3
2017-12-12 15:02





Tùy chọn pa có lẽ phù hợp hơn:

zypper pa -i

liệt kê tất cả các gói đã cài đặt và các phiên bản và kho lưu trữ sẵn có của chúng. Bạn có thể chọn chỉ liệt kê các gói thuộc về một kho lưu trữ nhất định với -r cờ:

zypper pa -i -r openSUSE-12.1

từ đó bạn có thể sử dụng các chiến lược được đề xuất bởi @ernestopheles để tìm ra những chiến lược phù hợp với nhu cầu của bạn.


1
2017-12-11 11:50



Tôi đã bắt đầu sử dụng zypper pa -i | grep @System; Tôi đã từng sử dụng zypper search -i -s -t package | grep "| (System Packages)\s*$" - ShadSterling