Làm cách nào để có danh sách các gói có sẵn (tức là đã gỡ cài đặt) trong Debian?


19

Về cơ bản những gì tôi đang tìm kiếm là tương đương với Debian:

yum list available

để chỉ cho tôi gói nào khả dụng (mặc dù hiện chưa được cài đặt). Tôi thích thứ gì đó có thể chạy từ bảng điều khiển vì đây là máy chủ từ xa. Cảm ơn.

Câu trả lời:


7

grep-dctrlvà các dẫn xuất của nó cung cấp một cách tuyệt vời để truy vấn các tệp bộ đệm apt. (Bạn có thể cài đặt các công cụ này trên ubfox với sudo apt-get install dctrl-tools)

Trong trường hợp các gói có sẵn (nhưng không nhất thiết phải cài đặt), bạn có thể sử dụng grep-available. Ví dụ: để liệt kê tất cả các gói có sẵn:

grep-available  -s Package .

Biên tập:

aptitude có thể hiển thị cho bạn một danh sách các Gói chưa được cài đặt bằng cách chỉ khởi chạy nó.

Bạn cũng có thể nhận danh sách các gói chưa được cài đặt aptitudebằng cách sử dụng:

aptitude -F "%p" search "?not(?installed)"

Lưu ý rằng với các gói đa vòm mới, bạn sẽ nhận được các gói cho các kiến ​​trúc khác được liệt kê trong kết quả này. Ví dụ: tôi nhận được:

aptitude -F "%p" search "?not(?installed)"  | grep "^bash:"
bash:i386

Tôi đã bashcài đặt gói, nhưng đó là phiên bản amd64, vì hệ điều hành của tôi được cài đặt với phiên bản amd64 của Ubuntu Precise. Nếu bạn không muốn xem các gói này cho các kiến ​​trúc khác, bạn có thể loại trừ các dòng có chứa ::

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'

Cảm ơn nhưng vấn đề với điều này là tôi phải duyệt qua toàn bộ danh sách gói cho các kho lưu trữ đã chọn của tôi. Có lẽ cách tốt hơn để hình dung vấn đề sẽ là như vậy: hãy tưởng tượng X là tập hợp chung của tất cả các gói trong kho Debian gói mà máy chủ của tôi được trỏ đến và Y là tập các gói tôi đã cài đặt trên máy chủ nói trên; Về bản chất, tôi tìm kiếm là X - Y. Bây giờ, tôi nhận ra mình có thể làm điều này theo chương trình nhưng tôi hy vọng sẽ có một lệnh tương đối đơn giản để đạt được kết quả tương tự trên hệ thống Debian.
freakwincy

Chỉ cần nhìn thấy câu trả lời chỉnh sửa của bạn. Đó chính xác là những gì tôi đang tìm kiếm! Cảm ơn.
freakwincy

PS tôi đã bỏ phiếu cho câu trả lời của bạn nhưng tôi chưa tích lũy đủ điểm danh tiếng.
freakwincy

Không vấn đề gì. Nhân tiện chào mừng bạn đến SU ;-)
ℝaphink

16

apt-cache được sử dụng để truy vấn bộ đệm của gói:

apt-cache pkgnames | sắp xếp
điều tìm kiếm apt-cache
tìm kiếm apt-cache - điều chỉ tên

cảm ơn nhưng tôi sợ rằng nó không hoạt động. Tôi đã so sánh danh sách được tạo bởi lệnh đầu tiên với danh sách các gói đã cài đặt được tạo trước đó mà tôi đã tạo ra: code"dpkg --get-selections | grep '[[: space:]] install $' | awk '{print $ 1}' > install.txt "và tìm thấy các bản sao. Hai lệnh khác mà bạn cung cấp sẽ không hoạt động vì tôi không tìm kiếm một gói cụ thể mà là bất kỳ gói nào hiện chưa được cài đặt.
freakwincy

2

Sử dụng apt-cachecho mục đích này:

apt-cache search package

apt-cachechỉ sử dụng bộ đệm gói trên hệ thống, hãy đảm bảo rằng bộ đệm này được cập nhật:

apt-get update

Bạn cũng có thể sử dụng tiện ích apt-filenếu bạn biết tên của tệp bạn muốn tìm kiếm; điều này phải được thêm vào hệ thống tuy nhiên. Ví dụ:

apt-file search somefilename

Tôi có xu hướng sử dụng apt-cachetheo một trong những cách sau:

apt-cache search package | sort | grep item

(Điều này cho bạn thấy những thứ có mục thực sự trong tóm tắt hoặc tên của họ.)

apt-cache search thing | sort | less

(Điều này tìm kiếm thứ sau đó sắp xếp nó để xem dễ chịu với less.)


2

Quan điểm của tôi là làm việc với các lệnh được cài đặt theo mặc định và tránh các gói bổ sung nếu không có bất kỳ lý do cụ thể nào.

Trong Debian của tôi với GNU bash các lệnh đơn giản này

apt list
apt list --all-versions

đưa ra một danh sách bất cứ điều gì (cài đặt và không cài đặt). Sau đó tôi có thể giới hạn kết quả với grep "đã cài đặt" hoặc grep -v "đã cài đặt". Nó cũng có thể được kết hợp với một hoặc nhiều tên gói (dấu tự nhiên được chấp nhận).

Chuyển đổi "-all-Phiên bản" cung cấp các dòng đầu ra riêng biệt cho từng phiên bản gói (ổn định, thử nghiệm, không ổn định, thử nghiệm).

"Danh sách apt" đơn giản chỉ cung cấp một phiên bản (ưu tiên cao nhất).


0

Đặt câu hỏi của bạn một cách nghiêm ngặt (bạn muốn hiển thị một danh sách các gói chưa được cài đặt), hãy thử sử dụng

(chỉnh sửa theo ý kiến ​​dưới đây)

# apt-get update
# dpkg -l '*' | egrep --invert-match '^i'

Không chắc chắn về cú pháp chính xác, vì tôi đang viết điều này trên một hộp cửa sổ và không có cách nào để kiểm tra. Có thể cố gắng thay đổi những gì bạn grep trên


Danh sách này cài đặt các gói, không được gỡ cài đặt .
ℝaphink

@Raphink: Xin lỗi, tôi đã chỉnh sửa bài đăng để sửa lỗi này
PPC

Không có vấn đề, nhưng bạn vẫn không liệt kê các gói chưa được cài đặt. Bằng cách loại trừ các gói 'ii' (thực tế không thực sự là biểu thức của bạn, bạn nên sử dụng '^ii'chứ không phải '[ii]'), bạn đang thiếu các gói được cài đặt nhưng không được định cấu hình chẳng hạn (như iFhoặc iHví dụ).
ℝaphink

Tài khoản loạt dấu gạch ngang là dấu phân cách tiêu đề danh sách. Dẫu sao cũng xin cảm ơn.
freakwincy

@ freakwincy: Phải! Xin lỗi vì đã không kiểm tra nó trước khi gửi (làm việc trên windows). Theo manpage, bạn nên sử dụng "dpkg -l '*'" để liệt kê tất cả các gói.
PPC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.