Як переглянути історію встановлення apt-get?


18

Як я можу переглянути історію apt-get installкоманд, які я виконував вручну?

Мені здається, що всі доступні методи показують все, що було встановлено з самого початку установки Ubuntu.

Як я можу переглянути історію з apt-get installмоменту завершення моєї інсталяції системи?


Ну так. Що ще ви очікували? Ви хочете показати лише тих, кого ви бігли з терміналу, а не тих, якими керував графічний інтерфейс чи щось таке? Будь ласка , змініть своє питання і уточнити.
terdon

@terdon Okay зробив нову
редакцію

1
Є журнали dpkgв /var/log/dpkg.log*.
Велкан

1
@ParanoidPanda Це виходить з ладу різними способами. Обрізання історії, речі виконуються в інших оболонках, речі, вилучені з історії або ніколи не ставлять їх на перше місце, речі, встановлені за сценаріями, речі, якими керують інші користувачі тощо тощо
Squidly

1
@MrBones: Я знаю, і про це я заявив у своїй відповіді (і в коментарях під нею). Однак ОП попросив спосіб переглянути всі випадки, коли вони вручну виконали apt-get installкоманду встановлення пакету, і я запропонував рішення, яке дає цю інформацію, якщо файл історії не змінено певними способами (наприклад: записи мають було видалено).

Відповіді:


20

Я думаю , що відповідь дається тут на кіс є кращим способом я бачив до сих пір. Незважаючи на те, що програмний центр використовує apt, все, що було встановлено, також буде вказане.

Команда така:

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


Це не! перевірити оновлення: askubuntu.com/a/680405/320386
kos

Використовуйте це, це спосіб більш безпечна для виконання цього завдання: 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.*'буде фільтрувати тільки apt-getкоманди , що містять installз переднім і заднім простором, sed '1,4d' може залежати від конкретної установки; в шахті 1,4видаляється рівно кількість записів, що надходять з повсюдності, які ви хочете видалити. Дайте мені знати, чи число у вашій установці однакове, то, принаймні, у нас є базовий рівень: |
kos

@kos Я отримую додаткові рядки, такі як apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericнова команда. Це лінії повсюди?
Арронічний

Ні, вони схожі на те, що вони прийшли з Software Updater; немає ніякого способу відрізнити від команд, запущених від користувача, і команд, які виконуються деяким apt-getінтерфейсом, окрім Ubiquity, який запускається лише один раз (наприклад aptdaemon, ці команди будуть показані і цією командою). Найкраще, хоча все-таки використовувати цю команду, яка принаймні виключає записи повсюдності.
kos

9

Просто введіть наступну команду у свій термінал, щоб переглянути всі журнали встановлення.

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

3

Щоб спростити @Arronical відповідь, акуратний трюк, про який я нещодавно дізнався, - ви можете використовувати zcat -qfкіт як gxtp файли txt та txt.

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

стає

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

Від man 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

Ось сценарій, який друкує тільки встановлені на даний момент пакети верхнього рівня , де "пакунки верхнього рівня" визначаються як пакунки atp, від яких не залежать інші пакети atp. Якщо такі програми вищого рівня були встановлені програмою atp або менеджером пакунків, наприклад, синаптичним, вони були вибрані користувачем вручну.

#!/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"

Пакети друкуються у зворотному порядку під припущенням, що користувач швидше захоче нову інформацію швидше, і тому що програма повільна.

Потік програми:

  • Програма спочатку збирає в список всі встановлені пакети, читаючи назви файлів під /var/lib/dpkg/info/. Модні файли часу - це час інсталяції.
  • Цей список сортується у зворотному порядку.
  • Для кожного встановленого пакету $Pkgдзвінок apt-cache rdepends $Pkg запитує зворотні залежності $Pkg. Якщо залежностей немає, то це пакет верхнього рівня і надрукована інформація про пакет: ім'я пакету дати

Примітки:

  • Сценарій залежить від вихідного формату, apt-cache rdepends $Pkgякий був призначений для людських очей і міг би змінитися в майбутніх версіях apt.
  • Код для частини, що збирає назви файлів під / var / lib / dpkg / info /, прийшов з цієї публікації unix.stackexchange . Як вказував цей «микель» на плакаті , журналиdpgk історії не є надійними, оскільки вони будуть повернуті після досягнення певного обсягу.
  • Сторінка людини для apt-chache
  • apt-cache rdepends ...Імовірно, виклик дуже повільний, тому що кожен виклик обчислюється ітерацією через всі залежності. Отже, вищезазначений сценарій починається з новітніх встановлень, щоб запропонувати користувачеві якомога більше миттєвого задоволення.
  • --installedПрапор після apt-cacheперевірки , що DPKG встановлених пакетів також схильні встановлено. Якщо користувач або інше встановити програмне забезпечення обійшли apt і використали dpkg безпосередньо, це було б можливо. ЦЕ СПРАВУ НЕ ВИБУЛЯЄТЬСЯ, але я думаю, що щось помітне було б надруковано як у стандартному, так і у вихідному помилку
  • Вихідні дані не включають вибрані вручну пакунки, від яких згодом залежав більш високий пакет. Вихід також може включати пакети, які були встановлені через apt іншим програмним забезпеченням для встановлення третьої сторони, а отже, не справді встановлені вручну. Однак, якщо мета виводу є основою для встановлення відновленого Linux з резервного /homeкаталогу, який включає вказане програмне забезпечення сторонніх виробників, то такий вихід був би придатним.
  • Деякі назви пакетів включають номери версій, а деякі ні. Згадується лише для того, щоб довести до відома факт.

1

Якщо ви хочете побачити всі встановлені вами речі, виконавши:

sudo apt-get install [package]

І ви не заплуталися з історією bash, і не хочете переглядати історію подібного типу установки для іншого користувача (або всіх користувачів), тоді ви можете просто запустити:

history | grep "apt-get install"

І це має отримати в основному відповідні результати.


1
Чи отримаю я всю історію з цим?
TellMeWhy

@DevRobot: Якщо ви не вручну змінили записи із вхідним файлом apt-get installу .bash_historyфайлі чи не видалили цей файл, команда покаже вам усі випадки, коли ви виконали команду із рядком apt-get installу ній у своєму обліковому записі користувача (навіть якщо ви запустити команду як root, а отже, не точно так, як ваш обліковий запис користувача - тобто, за допомогою якого виконується команда sudo).

2
Може виникнути проблема, якщо ви ввели більше 200 команд
Arronical

2
@ Арронічний доказ очікується при пред'явленні претензій ;-)
Rinzwind

1
Я б вважав, що 500 є типовим ( gnu.org/software/bash/manual/html_node/… ).
Rinzwind

1

Якщо ви хочете історію apt-get installкоманд, використовуйте таку команду:

grep "apt-get install" .bash_history

Вихід:

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" 

Для іншої інформації див додаткову інформацію .

Існує також більш детальна інформація про установці в /var/log/apt/в history.logі history.log.X.gzфайлах і term.logі term.log.X.gzфайлів

Якщо ви хочете історію лише apt-getвключених команд, то

history | grep apt-get


apt-mark showmanualпоказує всі пакунки, встановлені після встановлення ОС, а не лише ті, які фактично встановлені вручну. Це дивний спосіб поводитись!
Арронічний

1
Це не обов'язково дає конкретні дані щодо історії. Що люди повинні подивитися, це /var/log/apt/history.logі подібні файли. Ви отримуєте лише список вручну вибраних та автоматично вибраних пакетів. Ви не дають ніякого хронологічну історію того , що було встановлено, що видалено, що модернізований і т.д. з цієї відповіді.
Thomas Ward

@Arronical - Де це сторінка людини apt -mark showmanual? Я не можу бачити його на сторінці Ubuntu 16.04 LTS для apt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >.
Крейг Хікс


0

Для того, щоб побачити, що ви встановили та вилучили, перевстановили тощо. Докладніше про шлях встановлення apt-get.

Відповідь можна змінити на псевдонім:

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

Зауважте, що деякі аргументи можна встановити перед інсталяцією, як це робить скрипт virtualmin під час встановлення: apt-get -y встановити ім'я пакета.

Отже, якщо ви хочете захопити всі команди встановлення, вам потрібно змінити запит регулярних виразів.

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.