Làm thế nào để xem lịch sử cài đặt apt-get?


18

Làm cách nào tôi có thể xem lịch sử của apt-get installcác lệnh mà tôi đã thực hiện thủ công?

Dường như với tôi rằng tất cả các phương thức có sẵn đều hiển thị mọi thứ đã được cài đặt ngay từ khi bắt đầu cài đặt Ubuntu.

Làm cách nào tôi có thể xem lịch sử apt-get installkể từ khi quá trình cài đặt hệ thống của tôi hoàn tất?


Vâng, vâng. Bạn mong chờ gì nữa? Bạn có muốn chỉ hiển thị những người bạn đã chạy từ thiết bị đầu cuối chứ không phải những người được chạy bởi GUI hoặc một cái gì đó? Vui lòng chỉnh sửa câu hỏi của bạn và làm rõ.
terdon

@terdon Được rồi, thực hiện một chỉnh sửa mới
TellMeWhy

1
Có các bản ghi của dpkgtrong /var/log/dpkg.log*.
Velkan

1
@ParanoidPanda Điều đó thất bại theo nhiều cách khác nhau. Cắt ngắn lịch sử, mọi thứ chạy trong các vỏ khác, những thứ bị xóa khỏi lịch sử hoặc không bao giờ được đặt ở vị trí đầu tiên, những thứ được cài đặt từ các tập lệnh, những thứ được điều hành bởi những người dùng khác, v.v.
Squidly

1
@MrBones: Tôi biết, và tôi đã nói như vậy trong câu trả lời của tôi (và trong các bình luận bên dưới nó). Tuy nhiên, OP đã yêu cầu một cách để xem tất cả các trường hợp khi họ đã thực hiện apt-get installlệnh thủ công để cài đặt gói và tôi đã cung cấp một giải pháp cung cấp thông tin này trừ khi tệp lịch sử đã bị thay đổi theo một số cách nhất định (ví dụ: các mục có đã bị loại bỏ).

Câu trả lời:


20

Tôi nghĩ rằng câu trả lời được đưa ra ở đây bởi kos là cách tốt nhất tôi từng thấy cho đến nay. Mặc dù Trung tâm phần mềm sử dụng apt, mọi thứ mà nó đã cài đặt cũng sẽ được liệt kê.

Lệnh là:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

Tôi sẽ kiểm tra điều này khi tôi về nhà và chấp nhận nếu nó hoạt động :)
TellMeWhy

Nó không thể! kiểm tra bản cập nhật: askubfox.com/a/680405/320386
kos

Sử dụng cái này, sẽ an toàn hơn cho tác vụ này zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d':: grep -Po '^Commandline:(?=.* install ) \K.*'sẽ chỉ lọc các apt-getlệnh chứa installkhông gian hàng đầu và dấu, sed '1,4d' thể phụ thuộc vào cài đặt cụ thể; trong tôi 1,4xóa chính xác số lượng mục đến từ Ubiquity, đó là những mục bạn muốn xóa. Hãy cho tôi biết nếu số này giống nhau trong cài đặt của bạn, theo cách đó ít nhất chúng ta có một đường cơ sở: |
kos

@kos Tôi nhận được các dòng bổ sung như apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericvới lệnh mới. Có phải họ là dòng Ubiquity?
Arronical

Không, những thứ đó trông giống như chúng đến từ Software Updater; không có cách nào để phân biệt với các lệnh chạy từ người dùng và các lệnh được chạy bởi một số apt-getfrontend, ngoài Ubiquity chỉ chạy một lần (ví dụ như aptdaemoncác mục sẽ được hiển thị bởi lệnh đó). Mặc dù vậy, đặt cược tốt nhất vẫn là sử dụng lệnh đó, ít nhất là loại trừ các mục Ubiquity.
kos

9

Chỉ cần gõ lệnh sau trong thiết bị đầu cuối của bạn để xem tất cả các bản ghi cài đặt.

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

3

Để đơn giản hóa câu trả lời @Arronical, Một mẹo gọn gàng mà tôi đã học gần đây là bạn có thể sử dụng zcat -qfđể cat các tệp được nén cả txt và txt.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

trở thành

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

Từ người đàn ông zcat:

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.

2

Đây là tập lệnh chỉ in các gói cấp cao nhất hiện được cài đặt , trong đó "gói cấp cao nhất" được định nghĩa là các gói atp mà không có gói atp nào khác phụ thuộc. Nếu các chương trình cấp cao nhất như vậy được cài đặt bởi atp hoặc trình quản lý gói như synaptic, thì chúng sẽ được người dùng chọn thủ công.

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

Các gói được in theo thứ tự ngược với giả định rằng người dùng có nhiều khả năng muốn thông tin mới hơn sớm hơn và vì chương trình chậm.

Luồng chương trình:

  • Chương trình đầu tiên tập hợp vào một danh sách tất cả các gói được cài đặt bằng cách đọc tên tệp bên dưới /var/lib/dpkg/info/. Thời gian mod tập tin là thời gian cài đặt.
  • Danh sách đó được sắp xếp theo thứ tự ngược lại.
  • Đối với mỗi gói được cài đặt $Pkg, một cuộc gọi để apt-cache rdepends $Pkg yêu cầu các phụ thuộc ngược lại của $Pkg. Nếu không có phụ thuộc, thì đó là gói cấp cao nhất và thông tin gói được in: ngày thời gian packagename

Ghi chú:

  • Kịch bản phụ thuộc vào định dạng đầu ra apt-cache rdepends $Pkgdành cho mắt người và có thể thay đổi trong các phiên bản tương lai của apt.
  • Mã cho phần tập hợp tên tệp dưới / var / lib / dpkg / thông tin / đến từ bài đăng unix.stackexchange này . Như poster 'mikel' đã chỉ ra, các dpgklogfile lịch sử không đáng tin cậy vì chúng sẽ bị xoay ra sau khi đạt đến một khối lượng nhất định.
  • Trang nam cho apt-chache
  • Cuộc gọi apt-cache rdepends ...rất chậm có lẽ vì mỗi cuộc gọi được tính bằng cách lặp qua tất cả các phụ thuộc. Do đó, tập lệnh trên bắt đầu từ các bản cài đặt mới nhất để cung cấp cho người dùng càng nhiều sự hài lòng tức thì càng tốt.
  • Các --installedlá cờ sau khi apt-cachekiểm tra rằng các gói dpkg-cài đặt cũng là apt-cài đặt. Nếu người dùng hoặc phần mềm cài đặt khác bỏ qua apt và sử dụng trực tiếp dpkg, điều đó là có thể. TRƯỜNG HỢP NÀY KHÔNG ĐƯỢC KIỂM TRA, nhưng tôi nghĩ rằng một cái gì đó đáng chú ý sẽ được in ở đầu ra tiêu chuẩn hoặc lỗi
  • Đầu ra không bao gồm các gói được chọn thủ công mà sau đó trở nên phụ thuộc bởi gói cao hơn. Đầu ra cũng có thể bao gồm các gói được cài đặt qua apt bởi phần mềm cài đặt của bên thứ ba khác và do đó không được cài đặt thủ công. Tuy nhiên, nếu mục đích của đầu ra là cơ sở để thiết lập một linux được khôi phục từ một /homethư mục sao lưu bao gồm phần mềm của bên thứ ba, thì đầu ra này sẽ phù hợp.
  • Một số tên gói bao gồm số phiên bản, và một số thì không. Nhắc đến chỉ để mang lại nhận thức cho thực tế.

1

Nếu bạn muốn xem tất cả những thứ bạn đã cài đặt bằng cách chạy:

sudo apt-get install [package]

Và bạn không bị rối với lịch sử bash, bạn cũng không muốn xem lịch sử của loại cài đặt này cho một người dùng khác (hoặc tất cả người dùng) thì bạn chỉ có thể chạy:

history | grep "apt-get install"

Và điều đó sẽ giúp bạn có được kết quả chủ yếu liên quan.


1
Tôi sẽ nhận được tất cả lịch sử với điều này?
TellMeTại sao

@DevRobot: Trừ khi bạn đã thay đổi thủ công các mục có apt-get installtrong chúng trong .bash_historytệp hoặc xóa tệp này, lệnh sẽ hiển thị cho bạn tất cả các trường hợp khi bạn đã thực thi một lệnh có chuỗi apt-get installtrong tài khoản người dùng của mình (ngay cả khi bạn chạy lệnh với quyền root và do đó không chính xác như tài khoản người dùng của bạn - đó là đang chạy lệnh với sudo).

2
Nó có thể có vấn đề nếu bạn đã nhập hơn 200 lệnh
Arronical

2
@Arronical bằng chứng được mong đợi khi đưa ra yêu cầu ;-)
Rinzwind

1
Bản thân tôi sẽ cho rằng 500 là mặc định ( gnu.org/software/bash/manual/html_node/ mẹo ).
Rinzwind

1

Nếu bạn muốn lịch sử của apt-get installcác lệnh sử dụng lệnh sau:

grep "apt-get install" .bash_history

Đầu ra:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

Đối với thông tin khác tham khảo thêm thông tin .

Ngoài ra còn có thông tin cài đặt chi tiết hơn /var/log/apt/trong history.loghistory.log.X.gztập tin term.logterm.log.X.gztập tin

Nếu bạn muốn lịch sử chỉ apt-getbao gồm các lệnh, thì

history | grep apt-get


apt-mark showmanualhiển thị tất cả các gói được cài đặt khi HĐH cũng được cài đặt, thay vì chỉ các gói thực sự được cài đặt thủ công. Đó là một cách kỳ lạ để nó cư xử!
Arronical 1/10/2015

1
Điều này không nhất thiết phải cung cấp chi tiết cụ thể như lịch sử. Những gì mọi người cần phải xem là /var/log/apt/history.logvà các tập tin tương tự. Bạn chỉ nhận được danh sách các gói được chọn thủ công và tự động chọn. Bạn không đưa ra bất kỳ lịch sử theo thời gian của những gì đã được cài đặt, những gì đã được gỡ bỏ, những gì đã được nâng cấp, vv từ câu trả lời này.
Thomas Ward

@Arronical - Trang người đàn ông ở apt -mark showmanualđâu? Tôi không thể thấy nó trên trang người dùng Ubuntu 16.04 LTS cho apt: < manpages.ub Ubuntu.com/manpages/xenial/en/man8/apt.8.html >.
Craig Hicks


0

Để xem những gì bạn đã cài đặt và gỡ bỏ, cài đặt lại, v.v. Thông tin thêm về hành trình cài đặt apt-get.

Câu trả lời có thể được sửa đổi thành bí danh:

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'

0

Lưu ý rằng một số đối số có thể được đặt trước khi cài đặt, như tập lệnh virtualmin đang thực hiện trong quá trình cài đặt: apt-get -y cài đặt packagename.

Vì vậy, nếu bạn muốn nắm bắt tất cả các lệnh cài đặt, bạn cần thay đổi truy vấn regex.

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
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.