Làm cách nào để biết lịch sử của apt apt-get cài đặt trên Ubuntu?


85

Tôi chuẩn bị chuyển máy chủ từ hộp Ubuntu này sang hộp khác. Tôi không nhân bản hộp cũ sang mới; Tôi đang tạo một hệ thống mới và sẽ di chuyển dữ liệu khi cần. Tôi muốn cài đặt tất cả phần mềm mà tôi có trên hộp cũ trên cái mới.

Có cách nào đơn giản để tìm lịch sử của tất cả các lệnh "sudo apt-get install" mà tôi đã đưa ra theo thời gian không? Đó là, dpkg -l hiển thị cho tôi tất cả các gói đã được cài đặt, nhưng không phải gói nào cấp cao nhất đã cài đặt chúng. Nếu có một cách để dpkg đưa cho tôi gói cài đặt, tôi có thể tìm những gói duy nhất ở đó; mặt khác, tôi muốn một cái gì đó khác nói "bạn đã cài đặt 24 gói này".



Bạn có thể chấp nhận một câu trả lời dưới đây? Để biết ơn những người đã trả lời.
m-ric


Các giải pháp này sẽ chỉ kiểm tra những gì đã xảy ra SAU vòng quay nhật ký cuối cùng. Họ không kiểm tra tất cả lịch sử.
Kraang Prime

Câu trả lời đơn giản và nhanh chóng được đưa ra bởi câu trả lời này, Askubfox.com/a/250530/197730 , cho câu hỏi này Làm thế nào để liệt kê tất cả các gói đã cài đặt .
TooTone

Câu trả lời:


68

Các aptlịch sử là /var/log/apt/history.lognhư đã nói trong một chú thích ở trên. Điều đó nói rằng, điều này sẽ không liệt kê các gói được cài đặt thủ công, sử dụng dpkghoặc GUI như gdebi. Để xem tất cả các gói đã đi qua dpkg, bạn có thể nhìn vào /var/log/dpkg.log.


8

5
Quy trình trong liên kết đầu tiên không phân biệt giữa các gói được cài đặt tự động và các gói được cài đặt thủ công. /var/log/apt/history.log(bạn đã xác định sai vị trí btw) sẽ bị quay vòng sau một vài tháng.
Gilles

Gilles là đúng trên cả hai tính. Tôi chỉ có giá trị của các bản ghi đó trong khoảng một tháng và thậm chí tôi không thể thấy tốc độ xóa nhật ký được đặt (nó được thực hiện với 'newsyslog' trên FreeBSD). Vì vậy, tôi vẫn không có giải pháp, nhưng tôi có một số gợi ý. Tôi ít nhất có thể grep đầu ra từ lệnh trong bài viết nhân bản, tìm tên "cấp cao", cài đặt chúng trên tên mới, thực hiện tương tự trên hộp mới, tìm hai kết quả và lặp lại cho đến khi hài lòng. Tôi vẫn sẽ nghe nhiều ý tưởng hơn.
Paul Hoffman

7

Bạn có thể liệt kê các gói có cài đặt đã được yêu cầu rõ ràng với apt-mark.

apt-mark showmanual

Trong trường hợp bạn đang chạy một bản phát hành cổ xưa của Debian, đây là một cách thủ công.

Lệnh sau đưa ra danh sách các gói có yêu cầu cài đặt, cho dù là thủ công hay tự động. Trừ khi bạn ở giữa (các) gói cài đặt, đây là danh sách các gói đã cài đặt.

dpkg --get-selections | sed -n 's/\t\+install$//p'

Lệnh sau cung cấp cho siêu gói các gói được cài đặt tự động:

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

Đặt tất cả lại với nhau, các lệnh sau liệt kê các gói được cài đặt thủ công:

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)

1
--- kết quả rất khác so vớicomm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe

Trên Debian, có apt-mark showmanuallệnh tương đương với lệnh cuối cùng của bạn.
maxschlepzig

3
grep -i "Commandline" /var/log/apt/history.log

Hiển thị tất cả các gói bạn đã cài đặt bằng cách sử dụng: sudo apt-get install xxxxx


Điều này không đủ khác với câu trả lời của @ ℝaphink và nên là một nhận xét cho nó.
Karl Richter

2

Thay vì kết hợp tac / head, tốt hơn là sử dụng đuôi (cho 25 dòng cuối cùng):

tail -n 25 /var/log/apt/history.log

Điều này không đủ khác với câu trả lời của @ ℝaphink và nên là một nhận xét cho nó.
Karl Richter

Ngoài ra, nó không giống nhau. tail sẽ liệt kê các dòng cuối cùng trong tệp, theo thứ tự chúng nằm trong tệp. tac sẽ đảo ngược thứ tự sao cho dòng cuối cùng là đầu tiên, thứ hai đến cuối cùng là thứ hai, v.v ... Ngoài ra, có vẻ như bạn có nguy cơ bị sai khi bạn nói điều gì đó "tốt hơn" mà không giải thích lý do. Ý tôi là "tốt hơn" theo ai? Vì yêu cầu gì? Có vẻ hơi quá tự tin.
Todd Walton

0

Các câu trả lời khác đã giúp nhưng cho tôi quá nhiều đầu ra. Để cắt giảm đầu ra, tôi bắt đầu apt-mark showmanualnhư trong câu trả lời này , sau đó lọc ra các gói được cài đặt ban đầu (xem câu trả lời này để biết cách lấy danh sách các gói được cài đặt ban đầu; Tôi đang sử dụng ubfox 18.04.2 do đó liên kết bên dưới) .

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
    cut -f1 |
    sort |
    uniq

Kịch bản lọc ra các gói trong bảng kê khai ban đầu bằng cách thực hiện so sánh độc lập với phiên bản, để các gói được nâng cấp không xuất hiện trong danh sách. Tôi đã kết thúc với một danh sách khoảng 60 gói.

Một cách khác tôi thích là câu trả lời này tìm kiếm tất cả các bản ghi apt .


-1

Để có được danh sách các gói được cài đặt gần đây nhất theo thứ tự giảm dần, tôi thích sử dụng (ví dụ 25 dòng):

tac /var/log/apt/history.log |head --lines=25

1
Hiệu quả hơn (và tiêu chuẩn) sẽ là: tail -25 /var/log/apt/history.log | tac
agc

Điều này không đủ khác với câu trả lời của @ ℝaphink và nên là một nhận xét cho nó.
Karl Richter
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.