Aptitude vs. apt-get: Công cụ được khuyên dùng (hay còn gọi là quyền bên phải) được sử dụng?


94

Cách đây một thời gian, tôi đọc được rằng đây aptitudelà công cụ ưa thích để cài đặt trên các hệ thống dựa trên Debian. Nhưng khi bạn tìm kiếm về cách quản trị một hệ thống dựa trên Debian, thì năng khiếu hiếm khi được đề cập. Hầu hết mọi người dường như thích apt-get- và điều đó thậm chí đúng với các trang wiki Debian!

Vì vậy, tôi tự hỏi nếu tôi đã bỏ lỡ một cái gì đó. Đó là công cụ phù hợp để sử dụng?


Điều thú vị là Ubuntu không còn cài đặt aptitudetheo mặc định.
Ốc cơ khí

2
Sự khác biệt quan trọng nhất đối với tôi, là sau khi đọc tài liệu kỹ lưỡng, tôi không thể tìm được cách lấy nguồn của gói thông qua năng khiếu. apt-get source package-namesẽ làm điều đó, nhưng tôi đã thấy không có năng khiếu tương đương
EricR

2
Một điều là aptitude search package-namehoạt động trong năng khiếu. Một cái khác aptitude why package-namecũng hữu ích nhưng không phải trong apt-get. Tôi cũng biết rằng dòng lệnh của aptitudemột chút được làm sạch so với apt-get. Nhưng như bạn nhận thấy, có aptitude build-dep package-namenhưng không aptitude source package-name.
Anders

Câu trả lời:


73

aptitudeapt-gethoạt động giống nhau cho nhiều nhiệm vụ, nhưng đối với các trường hợp khó khăn nhất, chẳng hạn như nâng cấp phân phối ( apt-get dist-upgradeso với aptitude full-upgrade), chúng có các quy tắc khác nhau và quy tắc của năng khiếu gần như luôn luôn tốt hơn trong thực tế khi chúng không đồng ý.

Lý do bạn thấy nhiều tài liệu apt-gethơn aptitudechủ yếu là quán tính: aptitudeđã không được đề xuất cho APT từ lâu, vì vậy rất nhiều tài liệu hiện có đã không được cập nhật và có rất nhiều người nhận ra ưu điểm của aptitudehơn apt-getnhưng sử dụng apt-gettheo phản xạ.

Tôi vừa mới đã đến điểm mà tôi thường làm theo aptvới một ivà không phải là một -khi tôi gõ.

Postcript Lưu ý rằng các quy tắc được sử dụng trong apt-getaptitudeđang di chuyển mục tiêu - như Hubert ghi chú trong các nhận xét, đường dẫn nâng cấp được đề xuất từ ​​Debian Lenny hiện sử dụng apt-get, không phải aptitude. Điều này phản ánh thực tế là apt-gettheo dõi trạng thái ít hơn về gói hiện tại hơn aptitudevà do đó không cần phải lo lắng về trạng thái APT không "sạch" và bởi vì apt-getcác quy tắc thông minh hơn trước đây. Tôi vẫn sử dụng và giới thiệu aptitudehơn apt-get, nhưng đó là một đề xuất nhiều sắc thái hơn


6
Ngoài ra, aptitude cho phép duyệt qua các giải pháp xung đột có thể dễ dàng, trong khi với apt-get, bạn thường chỉ có một cách có thể được hiển thị và bạn chấp nhận hoặc bạn phải giải quyết bằng tay (sử dụng dpkg).
liori

20
apt-getkhông có lợi thế là hiệu quả bộ nhớ hơn. Điều này dường như không đáng chú ý đối với hầu hết người dùng; Tôi đã không thực sự biết về nó cho đến khi tôi cố gắng nâng cấp các gói trên bản cài đặt Debian đầy đủ với 32 MB RAM. aptitudekết thúc việc đập trong trao đổi trong khoảng một giờ mỗi lần chạy; apt-get đã nhanh hơn đáng kể.
trực giác

4
Tài liệu siết chặt chính thức của Debian tuyên bố rõ ràng không sử dụng aptitudeđể nâng cấp từ Lenny mặc dù nó được hỗ trợ cho các nâng cấp trước đó, vì vậy tôi không nghĩ đó chỉ là quán tính ...
Hubert Kario

@HubertKario - Vâng, thực sự. Tôi đã cập nhật câu trả lời của mình.
Charles Stewart

Tôi chỉ có thể nói rằng apt-gethầu như luôn luôn ném lỗi (kinh nghiệm từ máy chủ Ubuntu 12.10, 14.04) trong khi aptitudethực sự có thể làm một cái gì đó. Tôi vẫn không hiểu làm thế nào apt-get vẫn tồn tại.
Totty.js

20

aptitudegiúp thuận tiện để hiển thị các chương trình trong tìm kiếm bạn đã cài đặt trên hệ thống (với sự trợ giúp của grep):

aptitude search flash | grep ^i

Trên thực tế, aptitudetìm kiếm của nó mạnh hơn nhiều so với những gì bạn có được grep, vì nó hỗ trợ tìm kiếm theo ngữ cảnh:

ví dụ: điều này tìm thấy tất cả các gói có 'flash' trong tên gói được cài đặt:

aptitude search '~iflash'

Một "hình thức dài" tương đương của "hình thức ngắn" ~i:

aptitude search '?installed(flash)'

Lưu ý rằng các mẫu tìm kiếm là miễn phí (không được bảo vệ) theo mặc định. Để neo chúng, bạn cần sử dụng các mẫu neo ' ^' (bắt đầu chuỗi) và / hoặc ' $' (cuối chuỗi).

Để tìm tất cả các gói có tên bắt đầu bằng 'ttf' hoặc 'font':

aptitude search '(^ttf|^font)'

(Lưu ý: đây là cách khắc phục lỗi aptitude, vì regex chính xác '^(ttf|font)'không hoạt động chính xác - nó tìm thấy các gói có tên bắt đầu bằng 'ttf' hoặc chứa 'font'.)

Các aptitudetính năng tiện lợi khác:

Hiển thị tất cả các gói có 'phần sụn' trong tên của chúng C ALNG có 'không dây' trong mô tả của chúng:

aptitude search 'firmware ~dwireless'

hoặc dạng dài:

aptitude search '?and(?name(firmware),?description(wireless))'

(Lưu ý: ở dạng ngắn, các đối số được phân tách bằng dấu cách được ANDed trong dấu ngoặc kép; nếu được chuyển dưới dạng đối số dòng lệnh argv [] riêng thì chúng được ORed.)

p   atmel-firmware       - Firmware for Atmel at76c50x wireless networking chips.
p   firmware-atheros     - Binary firmware for Atheros wireless cards
...
p   libertas-firmware    - Firmware for Marvell's libertas wireless chip series
p   zd1211-firmware      - Firmware images for the zd1211rw wireless driver

~U hiển thị tất cả các gói được nâng cấp từ các phiên bản hiện tại của chúng với các phiên bản mới:

# aptitude update ; aptitude versions '~U'
Package virtualbox-4.1:            
i   4.1.18-78361~Debian~squeeze                       100
p   4.1.20-80170~Debian~squeeze     <NULL>            500

Hiển thị các gói đề xuất 'gcc-multilib'

$ aptitude search '~DRecommends:gcc-multilib'
i   libc6-dev-i386   - Embedded GNU C Library: 32-bit development libraries for AMD64

Giải thích tại sao 'cầu chì' có thể cần phải được cài đặt

$ aptitude why fuse-utils
i   xorg           Depends    xterm | x-terminal-emulator
pi  gnome-terminal Provides   x-terminal-emulator
pi  gnome-terminal Recommends gvfs
pi  gvfs           Depends    libgdu0 (>= 2.29.90)
pi  libgdu0        Depends    udisks (< 1.1.0)
pi  udisks         Recommends ntfsprogs
pi  ntfsprogs      Depends    fuse-utils (> 2.5.0)

(Ví dụ này cho thấy một số sự điên rồ xuất phát từ mặc định kể từ khi Squeeze (?) Cài đặt tất cả các gói "Đề xuất". không phải tích hợp NTFS tích hợp, là tùy chọn, trừ khi họ chỉ định nó.)

Tìm tất cả các gói cung cấp dịch vụ "mail-Transport-agent":

$ aptitude search '?provides(mail-transport-agent)'
p   citadel-mta          - complete and feature-rich groupware server (mail transport agent)
...
p   nullmailer           - simple relay-only mail transport agent
p   postfix              - High-performance mail transport agent
i   sendmail-bin         - powerful, efficient, and scalable Mail Transport Agent
p   ssmtp                - extremely simple MTA to get mail off the system to a mail hub
p   xmail                - advanced, fast and reliable ESMTP/POP3 mail server

Hiển thị tất cả các tên gói được cài đặt, không phải là Essential hoặc được cài đặt tự động bởi các phụ thuộc:

$ aptitude search '~i!(~E|~M)' -F '%p'

Thật không may, công cụ này là tài liệu khá kém và khó tìm, nhưng đây là tài liệu tham khảo tốt nhất (từ người duy trì 'năng khiếu').


4
Các tính năng tìm kiếm có sẵn từ apt-getthông quaapt-cache search NAME
EricR

@EricR đúng nhưng tôi không tìm thấy khả năng tìm kiếm như thế này
niceman

4

Theo Câu hỏi thường gặp về Debian GNU / Linux về quản lý gói , aptitude phức tạp hơn apt-get và phụ thuộc vào các công cụ quản lý gói ít phức tạp hơn apt-get và dpkg.

Do đó, đối với các nhu cầu đơn giản hơn, bạn có thể sử dụng các công cụ đơn giản hơn, trong khi đối với các nhu cầu phức tạp hơn, bạn có thể tin tưởng vào công cụ tinh vi hơn (apitude).

Trích dẫn từ Câu hỏi thường gặp về Debian: "aptitude cung cấp chức năng của dselect và apt-get, cũng như nhiều tính năng bổ sung không có trong một trong hai chương trình."


3

aptitude đánh dấu các gói được cài đặt vì phụ thuộc vào thẻ tự động. Nếu bây giờ bạn thanh lọc hoặc xóa gói, aptitude sẽ tự động xóa các gói được cài đặt tự động không còn được sử dụng nữa cùng với gói bạn muốn thanh lọc hoặc xóa.

Đây là lý do chính tại sao cá nhân tôi nghĩ rằng năng khiếu luôn tốt hơn apt.


Trích dẫn cần thiết, nhưng đó sẽ là một sự khác biệt hấp dẫn.
Kzqai


Trên thực tế apt-getcũng làm điều đó, với apt-get autoremove <package-name>. Cả hai apt-getaptitudeđánh dấu các gói được cài đặt tự động
Legionair

Nhưng aptitudehãy dọn dẹp các gói tự động mỗi khi nó được sử dụng. Trong khi apt-getbạn cần phải bắt đầu rõ ràng.
Anders

2

Không có công cụ phù hợp, bạn có thể trộn và kết hợp cả hai tùy thuộc vào công cụ mà bạn thấy thuận tiện nhất cho nhiệm vụ trong tay. aptitude là một công cụ tuyệt vời để kiểm tra / người dùng sid nhưng nó có xu hướng kém tin cậy hơn cho việc nâng cấp từ bản ổn định này sang bản ổn định khác. Xem bài viết của tôi apt-get, aptitude, Nhận chọn trình quản lý gói phù hợp với bạn .

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.