Câu trả lời:
Tất cả các hành động với apt (apt-get) được ghi lại. Các tệp này có sẵn trong / var / log / apt /. Để xem nhật ký lịch sử gần đây nhất, hãy thực hiện:
less /var/log/apt/history.log
Các nhật ký này được xoay vòng (mỗi tháng tôi đoán), các tệp cũ sẽ được thêm vào một số và được nén. Vì vậy, để xem nhật ký lịch sử tiếp theo, hãy sử dụng:
zless /var/log/apt/history.log.1.gz
Để xem các bản ghi có sẵn:
ls -la /var/log/apt/
Bạn cũng có thể thực hiện một lệnh ngắn để hiển thị nội dung thú vị.
Thêm chức năng tùy chỉnh này vào ~/.bashrc
:
### pars for fun: install | remove | rollback
function apt-history(){
case "$1" in
install)
grep 'install ' /var/log/dpkg.log
;;
upgrade|remove)
grep $1 /var/log/dpkg.log
;;
rollback)
grep upgrade /var/log/dpkg.log | \
grep "$2" -A10000000 | \
grep "$3" -B10000000 | \
awk '{print $4"="$5}'
;;
*)
cat /var/log/dpkg.log
;;
esac
}
Và gọi nó trong một thiết bị đầu cuối như thế này:
kreso@h17:~$ apt-history install
2013-08-06 14:42:36 install gir1.2-nautilus-3.0:amd64 <none> 1:3.8.2-0ubuntu1~ubuntu13.04.1
2013-08-06 14:42:36 install python-nautilus:amd64 <none> 1.1-3ubuntu1
2013-08-06 14:42:37 install insync-nautilus:all <none> 1.0.20
2013-08-07 14:41:37 install powertop:amd64 <none> 2.1-0ubuntu1
2013-08-07 18:44:10 install libdiscid0:amd64 <none> 0.2.2-3build1
2013-08-07 18:44:11 install sound-juicer:amd64 <none> 3.5.0-0ubuntu1
Lấy từ đây
zgrep ... /var/log/dpkg.log*
- đầu ra mục từ tài liệu lưu trữ quá.
Bạn cũng có thể sử dụng lệnh sau để liệt kê các gói được cài đặt gần đây
grep "\ install\ " /var/log/dpkg.log
grep "\ install\ " /var/log/apt/history.log
trong trường hợp bạn cần sao chép và dán danh sách vào apt-get
Nếu bạn muốn các gói đã được cài đặt và sau đó không được gỡ cài đặt, hãy thử điều này:
comm -23 <(grep "apt-get install" /var/log/apt/history.log | sed 's/.* //' | sort) \
<(grep "apt-get remove" /var/log/apt/history.log | sed 's/.* //' | sort)
Đây là cài đặt trừ đi bất kỳ loại bỏ phù hợp.
Người giới thiệu:
sort
sử dụng sort -u
trong cả hai trường hợp để tránh các dòng trùng lặp hiển thị, chẳng hạn như trong gói like oracle-java8-installer
và nhiều thứ khác.
Đây là cách bạn thực sự làm điều đó, nói lẩm bẩm gói:
_P=mutter &&
(cat /var/log/dpkg.log{,.1};zcat /var/log/dpkg.log.*.gz) |
egrep --text "^[^ ]* [^ ]* (configure|install|remove|status [^ ]*|trigproc|upgrade) $_P[: ]" |
sort --reverse | less
Sử dụng dpkg.log sẽ ghi lại các hoạt động mà apt-get không nhìn thấy.
Đầu ra:
2016-12-20 09:47:35 status unpacked mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
2016-12-20 09:47:35 status installed mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
…
Để có được lịch sử cập nhật của một gói cụ thể giả sử nó đã được cài đặt / cập nhật thông qua apt đây là một oneliner (bash và zgrep), ví dụ dành cho gói skypeforlinux:
package='skypeforlinux'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)
Điều này ghi lại các tệp nhật ký lịch sử của apt cho skypeforlinux, bao gồm cả ba dòng trước để lấy ngày. Sau đó lặp lại kết quả và lặp lại ngày và phiên bản có liên quan.
Thay thế giá trị biến gói bằng tên gói của bạn, thậm chí hoạt động cho nhiều gói với điều kiện chúng bắt đầu bằng cùng một chuỗi.
Ví dụ với đầu ra:
package='apache'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)
2017-10-19 15:00:09 apache2-utils:amd64 (2.4.18-2ubuntu3.5)
2017-11-24 14:24:45 apache-pom-java:amd64 (10-2build1, automatic)
2018-02-22 16:42:02 apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26 15:34:34 apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26 15:36:32 apache2-data:amd64 (2.4.18-2ubuntu3.5)
2018-02-26 15:40:50 apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26 15:42:07 apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26 15:42:39 apache2:amd64 (2.4.18-2ubuntu3.5)
2018-03-15 10:08:50 apache-pom-java:amd64 (10-2build1)
2018-04-20 08:55:07 apache2-data:amd64 (2.4.18-2ubuntu3.5, 2.4.18-2ubuntu3.8)
2018-07-06 08:55:11 apache2-data:amd64 (2.4.18-2ubuntu3.8, 2.4.18-2ubuntu3.9)