Câu hỏi Cách liệt kê tất cả các gói đã cài đặt


Tôi muốn xuất danh sách tất cả các gói đã cài đặt vào một tệp văn bản để tôi có thể xem lại và cài đặt hàng loạt trên một hệ thống khác. Làm thế nào tôi sẽ làm điều này?


1578
2017-12-17 02:08


gốc


Điều này đã được trả lời đây. - Simon Quigley
Wow, trải qua các câu trả lời có vẻ như có rất nhiều cách để thực hiện điều này: / - Madivad
Làm cách nào để thực hiện cài đặt hàng loạt trên hệ thống mới từ tệp văn bản như vậy? - Elysium
@Madivad những người quản lý gói này từng được cho là làm cho cuộc sống dễ dàng hơn ... - René Nyffenegger
Câu hỏi tương tự tại unix.stackexchange.com "Liệt kê các gói theo ngày cài đặt" - JamesThomasMoon1979


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


Ubuntu 14.04 trở lên

Các apt công cụ trên Ubuntu 14.04 trở lên làm cho việc này trở nên rất dễ dàng.

apt list --installed

Các phiên bản cũ hơn

Để có danh sách các gói được cài đặt cục bộ, hãy thực hiện điều này trong terminal của bạn:

dpkg --get-selections | grep -v deinstall

(Các -v tag "inverts" grep để trả về các dòng không phù hợp)

Để có danh sách một gói cụ thể được cài đặt:

dpkg --get-selections | grep postgres

Để lưu danh sách đó vào một tệp văn bản có tên packages trên máy tính của bạn làm điều này trong thiết bị đầu cuối của bạn:

dpkg --get-selections | grep -v deinstall > ~/Desktop/packages

Ngoài ra, chỉ cần sử dụng

dpkg -l

(bạn không cần phải chạy bất kỳ lệnh nào trong số các lệnh này làm superuser, vì vậy không sudo hoặc bất kỳ biến thể nào khác cần thiết ở đây)


1730
2017-12-17 03:02



Sau đó, khi cài đặt vào máy tính mới, hãy làm cat ~/Desktop/packages > sudo dpkg --set-selections && sudo apt-get dselect upgrade  nguồn - koanhead
Cú pháp cho dpkg có thể đã thay đổi một chút kể từ năm 2006 vì lệnh đó không hoạt động đối với tôi, @koanhead. sudo dpkg --set-selections < ~/Desktop/packages && sudo apt-get -u dselect-upgrade không lừa. - James
Lưu ý rằng điều này sẽ không theo dõi các gói nào được người dùng cài đặt một cách rõ ràng và được cài đặt dưới dạng phụ thuộc. Điều này có nghĩa là nếu bạn sử dụng phương pháp này để tạo lại thiết lập của mình trên một máy khác, apt sẽ không thể xóa các phụ thuộc không cần thiết khi bạn xóa một gói nhất định. - intuited
Thật buồn và tuyệt vời khi nhận xét của @intuited không được cộng đồng hiểu rõ hơn. Liệu những người đóng góp "được đánh giá cao" có dừng lại để suy nghĩ nhiều hơn trước khi đưa ra lời khuyên đơn giản là tải lại các gói cũ trên một phiên bản ubuntu mới không phải là một ý tưởng hay không (?). Với tất cả các tùy chọn dpkg, tôi vẫn không nhìn thấy một trong đó kéo ra các gói 'được cài đặt' một cách rõ ràng bởi người dùng để danh sách này có thể được tải lại và được phép cài đặt các phụ thuộc của nó; Tôi rất muốn biết điều đó - hãy chia sẻ thông tin đó. Trong thời gian chờ đợi, hãy tạo danh sách các gói mà bạn thực sự cần khi cài đặt lại và chạy - Ricalsin
Tất cả chúng ta đều biết rằng Linux phân biệt đối xử với mọi người mà không cần bộ nhớ ảnh, nhưng nghiêm túc, điều gì sẽ xảy ra với apt list installed. Một ngày nào đó chúng ta nên dừng một cách có hệ thống nguyên tắc "giữ những điều đơn giản dễ dàng".


Để chỉ nhận các gói được cài đặt rõ ràng (không chỉ được cài đặt dưới dạng phụ thuộc), bạn có thể chạy

aptitude search '~i!~M'

Điều này cũng sẽ bao gồm một mô tả ngắn gọn, mà bạn có thể muốn. Nếu không, hãy thêm tùy chọn -F '%p', như đã đề cập bởi karthick87.


Tuy nhiên, một tùy chọn khác có vẻ là sao chép tệp /var/lib/apt/extended_states, là một cơ sở dữ liệu tệp văn bản ở định dạng này:

Package: grub-common
Architecture: amd64
Auto-Installed: 0

Package: linux-headers-2.6.35-22-generic
Architecture: amd64
Auto-Installed: 1

Auto-Installed: 0 cho biết rằng gói đã được cài đặt rõ ràng và không chỉ phụ thuộc.


380
2017-08-28 21:35



Đây sẽ là câu trả lời đúng. Tại sao phải liệt kê các phụ thuộc? - Stavros Korokithakis
Điều này Nên là câu trả lời, nhưng sử dụng năng khiếu là một chút không đáng tin cậy vì Multiarch hiện tại (trên đường), thật không may. Vẫn +1 cho chỉ ra chỉ liệt kê các gói được cài đặt một cách rõ ràng và một cách để làm điều này (mặc dù nó sẽ không hoạt động trên 11.10+ hiện tại). - gertvdijk
@intuited "Fix Released" cho Chính xác (một số thời gian trước đây). :) - gertvdijk
Điều này liệt kê tất cả các gói, không chỉ các gói được cài đặt thủ công trên Ubuntu 13.10. - Eamon Nerbonne
trên Ubuntu-15.10, phải cài đặt aptitude trước ví dụ: sudo apt-get install aptitude - Mark Mikofski


Tạo bản sao lưu những gói hiện được cài đặt:

dpkg --get-selections > list.txt

Sau đó (trên một hệ thống khác) khôi phục các cài đặt từ danh sách đó:

dpkg --clear-selections
sudo dpkg --set-selections < list.txt

Để loại bỏ các gói cũ:

sudo apt-get autoremove

Để được cài đặt như lúc sao lưu (tức là cài đặt các gói được thiết lập bởi dpkg --set-selections):

sudo apt-get dselect-upgrade

179
2018-05-16 18:26



Lời khuyên tuyệt vời về khôi phục trên một máy khác. +1. - Drew Noakes
di chuyển giữa 2 máy ubuntu 12.04 khác nhau cách tiếp cận này đã phá vỡ hệ thống của tôi. phải mất một lúc cho đến khi tôi nhận ra rằng bằng cách nào đó ubuntu-desktop đã gỡ cài đặt - có thể do một trong các lệnh dpkg. hãy cẩn thận, phải mất nhiều giờ để sửa chữa thiệt hại! - Karl Frisk
Và đôi khi hệ thống cập nhật ứng dụng mà bạn đặc biệt muốn hệ thống không chạm vào ứng dụng đó, hãy kích hoạt tính năng này ở cuối lệnh sudo apt-mark hold name-your-package  . Điều này sẽ ngăn apt-get nâng cấp lên phiên bản hiện tại, là mặc định cho quá trình cập nhật. - Faron


Để liệt kê tất cả các gói được cài đặt cố ý (không phải là phụ thuộc) bởi lệnh apt, hãy chạy như sau:

(zcat $(ls -tr /var/log/apt/history.log*.gz); cat /var/log/apt/history.log) 2>/dev/null |
  egrep '^(Start-Date:|Commandline:)' |
  grep -v aptdaemon |
  egrep '^Commandline:'

Điều này cung cấp chế độ xem dựa trên thời gian ngược lại, với các lệnh cũ được liệt kê trước:

Commandline: apt-get install k3b
Commandline: apt-get install jhead
...

Dữ liệu cài đặt cũng hiển thị việc sử dụng synaptic, nhưng không có chi tiết (cùng với ngày cài đặt):

(zcat $(ls -tr /var/log/apt/history.log*.gz); cat /var/log/apt/history.log) 2>/dev/null |
  egrep '^(Start-Date:|Commandline:)' |
  grep -v aptdaemon |
  egrep -B1 '^Commandline:'

cung cấp những điều sau đây:

Start-Date: 2012-09-23  14:02:14
Commandline: apt-get install gparted
Start-Date: 2012-09-23  15:02:51
Commandline: apt-get install sysstat
...

174
2018-02-02 10:39



Hoặc (với zgrep và xóa thông báo cập nhật): zgrep -hE '^(Start-Date:|Commandline:)' $(ls -tr /var/log/apt/history.log*.gz ) | egrep -v 'aptdaemon|upgrade' | egrep -B1 '^Commandline:' - belacqua
Cách tiếp cận này có bỏ lỡ các gói được cài đặt với dpkg?? - drevicko
Trong khi các câu trả lời đơn giản ở trên là tốt cho người dùng chung. Phương pháp này cho đến nay là tốt nhất cho backtracking tất cả các tùy chỉnh được thực hiện cho máy, vì nó cũng cho thấy những gì đã được gỡ bỏ, hoặc thêm vào, từ hình ảnh cơ sở, vì nó liệt kê chúng theo trình tự nó được thực hiện, và giúp bạn nhớ trình tự chính xác để thêm chúng trở lại trong một hệ thống khác. - AllGamer
@drevicko bạn là chính xác, nó không liệt kê các gói được cài đặt với dpkg - Steve Buzonas
Điều này khá tiện dụng để giữ tổ chức-- bộ não của tôi thích nó theo cách này vì bất kỳ lý do nào .. - JeremyFelix


apt-mark showmanual

trang người đàn ông nhà nước:

sẽ in danh sách các gói được cài đặt theo cách thủ công

Vì vậy, nó chỉ cần cung cấp một danh sách các gói được cài đặt rõ ràng (mặc dù điều này bao gồm các gói là một phần của cài đặt ban đầu mặc định) mà không có tất cả các phụ thuộc được bao gồm do các gói này đang được cài đặt.

Để xuất kết quả vào một tệp văn bản:

apt-mark showmanual >list-installed.txt

60
2017-07-10 13:43



Trên Debian "apt-mark showmanual" không hoạt động trên "squeeze" nhưng làm việc trên "wheezy" - Wadih M.
Giống như hầu hết các câu trả lời khác, apt-mark showmanual không thực sự. Nó cũng liệt kê hàng tấn gói được cài đặt tự động, có thể là một phần của cài đặt cơ bản. - mivk
Vâng câu hỏi là cho các gói đã cài đặt và điều này cho tất cả các gói đã cài đặt trừ đi các phụ thuộc được cài đặt tự động. Nó bao gồm các gói ban đầu như là một phần của cài đặt ban đầu. Tôi đoán bạn có thể chạy nó trên một cài đặt mới để có được một danh sách các cài đặt mặc định và sau đó trừ nó từ này để thấy sự khác biệt. - Tim Tisdall


dpkg-query (thay vì dpkg --get-selections, liệt kê một số gói chưa được cài đặt) như sau:

dpkg-query -W -f='${PackageSpec} ${Status}\n' | grep installed |  sort -u | cut -f1 -d \ > installed-pkgs

Hoặc là:

dpkg -l | grep ^ii | sed 's_  _\t_g' | cut -f 2 > installed-pkgs

38
2018-05-16 18:40



Typying # for pkg in `cat installed-pkgs`; do apt-get install -y $pkg; done trong hệ thống thứ hai tôi đã thực hiện điều này để nó sẽ cài đặt gói. - xyz
@julianromera: apt-get install -y $(< installed-pkgs) sẽ làm cho nó để apt-get chạy một lần và chăm sóc tất cả các phụ thuộc cùng một lúc. - jamadagni
@julianromera ... sửa tôi nếu tôi nhầm lẫn nhưng để xây dựng một ứng dụng có phụ thuộc trước khi thực hiện cài đặt thường sẽ là sudo apt-get build-dep name-package; sudo apt-get install name-package;  ? - Faron


Để liệt kê tất cả các gói đã cài đặt,

dpkg -l |awk '/^[hi]i/{print $2}' > 1.txt

hoặc là

aptitude search -F '%p' '~i' > 1.txt

hoặc là

dpkg --get-selections > 1.txt

Chú thích:
Bạn sẽ nhận được kết quả 1.txt tập tin trong thư mục nhà của bạn hoặc bạn có thể chỉ định đường dẫn của riêng bạn.


36
2017-12-17 03:35





Bạn có thể sử dụng Synaptic để lưu trạng thái hiện tại của gói đã cài đặt của bạn. Trong Synaptic, chọn "file / save markings", Nhập tên của tập tin để lưu trạng thái, và đảm bảo chọn hộp "Lưu trạng thái đầy đủ, không chỉ thay đổi".

Tệp được lưu từ tệp này có thể được tải vào máy mới bằng cách sử dụng "tệp / đọc dấu" trong Synaptic.


33
2017-12-17 04:46