Làm cách nào để xem các gói được cài đặt vào một ngày nhất định bằng cách sử dụng 'aptitude'?


54

Có ai biết nếu có một cách dễ dàng để tìm danh sách các gói được cài đặt, sắp xếp theo ngày, khi sử dụng aptitude(hoặc apt-get) không?

Tôi đã cài đặt một loạt các gói để thử một cái gì đó mới, nhưng nó không thành công. Tôi muốn xóa tất cả các gói này, để lấy lại dung lượng đĩa.

Tôi đã thử chỉ nhìn vào danh sách các tệp .deb được tải xuống, nhưng đó có vẻ là một cách làm ngược lại (mặc dù nó đã hoạt động).

Câu trả lời:


43

Thật không may, dpkg (trình xử lý gói xử lý hoạt động ở trên cùng) không đặc biệt lưu ngày cài đặt của các gói, mặc dù có những suy nghĩ về việc thêm nó. Tuy nhiên, ngày cài đặt có thể được tìm thấy bằng cách nhìn vào dấu ngày của các tệp được ghi vào thư mục /var/lib/dpkg/info.


4
Nếu bạn sử dụng phương pháp này, hãy chắc chắn chỉ kiểm tra dấu thời gian trên các *.listtệp vì các tệp khác được đóng dấu ngày gói.
Dave

20

Tôi đã cấu hình năng khiếu để ghi vào một bản ghi ( /var/log/aptitude). Nó tạo ra đầu ra như thế này;

Aptitude 0.4.11.11: log report
Mon, Feb  9 2009 13:21:28 +0100

IMPORTANT: this log only lists intended actions; actions which fail due to
dpkg problems may not be completed.

Will install 6 packages, and remove 0 packages.
4096B of disk space will be used
===============================================================================
[UPGRADE] apt 0.7.20.1 -> 0.7.20.2
[UPGRADE] apt-utils 0.7.20.1 -> 0.7.20.2
[UPGRADE] base-passwd 3.5.19 -> 3.5.20
[UPGRADE] libgnutls26 2.4.2-5 -> 2.4.2-6
[UPGRADE] libpq5 8.3.5-1 -> 8.3.6-1
[UPGRADE] ucf 3.0015 -> 3.0016
===============================================================================

Log complete.

Điều này cho thấy ngày chính xác và các gói được cài đặt. Để cấu hình này, hãy làm theo tài liệu tham khảo năng khiếu;

Option:Aptitude::Log

Default:/var/log/aptitude

Description: If this is set to a nonempty string, aptitude will log the package
installations, removals, and upgrades that it performs. If the value of
Aptitude::Log begins with a pipe character (ie, ``|''), the remainder of its
value is used as the name of a command into which the log will be piped: for
instance, |mail -s 'Aptitude install run' root will cause the log to be emailed
to root. To log to multiple files or commands, you may set this option to a list
of log targets.

Bạn sẽ tìm thấy một liên kết đến tài liệu tham khảo năng khiếu trong trang người đàn ông năng khiếu.


1
Xin vui lòng gửi liên kết và làm thế nào để thực hiện nó. Chỉ cần tham khảo một số văn bản thủ công là không hữu ích.
not2qubit

17

Có một cách đơn giản để xem tất cả các ngày cài đặt gói. Chỉ cần thực hiện:

grep " install" /var/log/dpkg.log*

Kết quả là bạn sẽ nhận được một danh sách tất cả các gói được cài đặt với ngày và giờ chính xác.

Cảm ơn cho ý kiến ​​dẫn tôi đến giải pháp đó.


2
Các cdlệnh là không cần thiết nếu bạn sử dụng đường dẫn đầy đủ trong catlệnh ...
papukaija

1
Mục đích của cdlệnh là vào lsbên trong thư mục này để kiểm tra các tập tin dpkg.log có sẵn. Nhưng giải pháp tốt hơn sẽ được chạy ls /var/log | grep 'dpkg.log'để liệt kê các tệp nhật ký. Xin lỗi vì sự lộn xộn.
jmarceli

2
hoặc chỉ "cài đặt grep /var/log/dpkg.log*"?
Marc Van Daele

1
Huh, tôi không biết cat | catlà một điều bạn có thể làm. Nhưng tại sao không cat cả hai tập tin trong một lệnh? (Hoặc thậm chí tốt hơn: chỉ cần làm những gì @MarcVanDaele nói.)
mwfearnley

13

Tôi tìm thấy cái này ở đây trên web. Nó tạo ra một lịch sử của dpkg từ tệp nhật ký dpkg.

Trông rất đơn giản.

function apt-history(){
      case "$1" in
        install)
              cat /var/log/dpkg.log | grep 'install '
              ;;
        upgrade|remove)
              cat /var/log/dpkg.log | grep $1
              ;;
        rollback)
              cat /var/log/dpkg.log | grep upgrade | \
                  grep "$2" -A10000000 | \
                  grep "$3" -B10000000 | \
                  awk '{print $4"="$5}'
              ;;
        *)
              cat /var/log/dpkg.log
              ;;
      esac
}

Nguồn

BIÊN TẬP

Tôi đã thử tập lệnh này trên Ubuntu 8.10 Server và nó hoạt động rất tốt. Bạn có thể cung cấp một số thông tin, làm thế nào bạn giải quyết vấn đề của bạn?


5
  • Sử dụng nhật ký dpkg

    locate dpkg.log | xargs cat {} | grep " install "
    
  • HOẶC nếu bạn không có locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • Sử dụng sortđể đảm bảo đặt hàng đúng thời gian

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • Sử dụng tac(đảo ngược cat) *, đầu ví dụ như để có được mới nhất 4 mục

    locate dpkg.log | xargs cat {} | grep " install " | sort | tac | head -n4
    

ví dụ: Đối với lệnh cuối cùng, tôi nhận được:

2014-10-08 18:56:12 install xorg-server-source:all <none> 2:1.16.1-1
2014-10-08 18:49:34 install libelementary-data:all <none> 0.7.0.55225-1
2014-10-08 18:46:57 install e17:i386 <none> 0.17.6-1
2014-10-08 18:46:56 install libedje-bin:i386 <none> 1.8.6-2.1+b1

1
Tại sao bạn sẽ sử dụng tac+ headthay vì tail?
Zanna

1
Đã được một thời gian, tôi đã quên tại sao - nhưng có thể đó là một lý do hoàn toàn chính đáng cho nó .. hoặc có thể tôi đã có một khoảnh khắc tóc vàng: D
a20

4

Bạn cũng có thể theo dõi các hành động trước đó của mình bằng cách kiểm tra /var/log/apt/term.log và các tệp cũ hơn term.log.1.gz, v.v.). Nó có dấu thời gian và nhật ký hoàn chỉnh từ các tin nhắn trong khi cài đặt.


2

[TRẢ LỜI CÂU HỎI THỰC TẾ], Có, có một cách DỄ DÀNG để tra cứu các gói được cài đặt vào một ngày cụ thể, ngay cả khi nó được thực hiện bên trong thiết bị đầu cuối bằng apt-get.

Nếu bạn cài đặt Trình quản lý gói Synaptic, có thể cài đặt miễn phí từ Trung tâm phần mềm Ubuntu, bạn chỉ cần mở menu FILE của nó và chọn tùy chọn "Lịch sử". Ở đó bạn sẽ tìm thấy một kế toán của tất cả các gói ứng dụng được thêm và xóa, được sắp xếp theo ngày, bất kể chúng được cài đặt hoặc gỡ bỏ như thế nào.


2

Thực sự có một pkginstall.shkịch bản 'chính thức' có thể làm điều này. Thực hiện theo các hướng dẫn trong tài liệu chính thức . Tóm lại, tải xuống tập lệnh từ liên kết trên, đảm bảo tập lệnh có thể thực thi được và sau đó chạy với:

~/pkginstalls.sh

Điều này sẽ tạo pkginstalls.txttập tin trong thư mục nhà của bạn có chứa tất cả các gói được cài đặt được sắp xếp theo ngày.

BTW, đây là nội dung của kịch bản:

#!/bin/bash
#pkginstalls.sh
#creates text file with a list of all packages installed by date

#first append all info from archived logs

i=2
mycount=$(ls -l /var/log/dpkg.log.*.gz | wc -l)
nlogs=$(( $mycount + 1 ))

while [ $i -le $nlogs ]
do
if [ -e /var/log/dpkg.log.$i.gz ]; then
zcat /var/log/dpkg.log.$i.gz | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append all info from unarchived logs

i=1
nulogs=$(ls -l /var/log/dpkg.log.* | wc -l)
nulogs=$(( $nulogs - $nlogs + 1 ))
while [ $i -le $nulogs ]
do
if [ -e /var/log/dpkg.log.$i ]; then
cat /var/log/dpkg.log.$i | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append current log

cat /var/log/dpkg.log | grep "\ install\ " >> $HOME/pkgtmp.txt

#sort text file by date

sort -n $HOME/pkgtmp.txt > $HOME/pkginstalls.txt

rm $HOME/pkgtmp.txt

exit 0
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.