Как получить список установленных пакетов без зависимостей?

Как получить список установленных пакетов без зависимостей?

Software Center почему-то показывает довольно короткий список установленных пакетов. Как получить его в текстовом файле?

Я пытался:

> dpkg --get-selections|wc -l
3265

> aptitude search '~i!~M'|wc -l
1181

> dpkg -l | grep ^ii | sed 's_  _\t_g' | cut -f 2|wc -l
3076

> dpkg --get-selections | grep -v deinstall|wc -l
3076

> apt-mark showmanual|wc -l
1181

Я знаю, что установил несколько десятков пакетов, а не тысячи. Мне нужны в списке именно те пакеты, которые я выбрал без зависимостей, чтобы просмотреть его.

ОБНОВЛЯТЬ

Большое спасибо @kos, я наконец получил список с помощью этой команды:

> zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install \K.*' | tr ' ' '\n' | grep -v '\-\-reinstall'|grep -v '\-\-force-yes'|grep -v '\-y'|grep -v '\-f'|sort|uniq wc -l
103

решение1

Это не дает точного ответа на вопрос: скорее, он дает команду вывести список всех apt-get installкогда-либо выполненных команд, а также некоторые советы о том, как проанализировать список дальше, чтобы получить список всех apt-get installкогда-либо выполненных команд, за исключением тех, которые были запущены Ubiquity, поскольку идеального решения для этой задачи, похоже, не существует.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*'
  • zcat /var/log/apt/history.log.*.gz: распаковывает все сжатые aptжурналы в /var/log/apt, объединяет их и печатает в stdout;
  • cat - /var/log/apt/history.log: добавляет /var/log/apt/history.logи печатает в stdout;
  • grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*': выбирает только строки, начинающиеся с , Commandline: apt-getсодержащие installначальный и конечный пробелы, и печатает остаток каждой выбранной строки в stdout;

Это выведет список всех apt-get installкогда-либо запущенных команд (единственным нежелательным выводом может быть команда apt-get-non-, installупоминающая installпакет, но этот пакет не существует (пока?), по крайней мере, в репозиториях по умолчанию);

Примечание:В моей установке (Ubuntu 15.04 64-бит) первые четыре перечисленные команды — это те, которые Ubiquity запускает во время установки; чтобы исключить их, вы можете направить вывод в sed:

sed '1,4d'

Так что финалприблизительныйКоманда для Ubuntu 15.04 64-bit будет выглядеть так:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*' | sed '1,4d'

решение2

apt-mark showmanual

выдаст вам список всех установленных вручную пакетов без зависимостей. Важно отметить, что он также покажет, какие пакеты были установлены во время установки Ubuntu.

Чтобы записать вывод в файл:

apt-mark showmanual > некий_файл

На самом деле есть много других способов, например, использование этой команды

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u) 

Хотя я понятия не имею, как все вышеперечисленное работает ;)

Чтобы просмотреть установленные пакеты по дате:

Установленные пакеты по дате использования cat /var/log/dpkg.log | grep "\ install\ > somefile"
Установленные пакеты с использованием dpkgиспользования ls -l /var/log/dpkg* > somefile— это, вероятно, то, что вы ищете.

Чтобы просмотреть пакеты, установленные с помощью dpkg:

Этот файл содержит указанную выше информацию:/var/log/dpkg.log

решение3

На самом деле это сложнее, чем кажется, и на Ask Ubuntu есть немало похожих вопросов.

Я обнаружил, что, просматривая /var/log/apt/history.logстарые сжатые версии этого журнала, все, что установлено командой, apt-get installуказано как установленное этой командой.

Так:

grep "apt-get install" /var/log/apt/history.log

Покажет вам все из них за период, который охватывает текущий журнал истории apt. Вам понадобятся gunzipваши старые журналы и grep, чтобы собрать всю информацию вместе. Все команды grep можно перенаправить в текстовый файл, чтобы получить хороший список.

Это, вероятно, полезно только для вашего случая, если Software Center использует apt-get installпри установке. Я знаю, что Software Center — это интерфейс для, aptно не уверен, что он использует эту команду явно.

решение4

Эта команда выведет список пакетов, установленных вручную, а также тех, у которых были удалены их «автоматически установленные» обратные зависимости (например, если вы удалите метапакет ubuntu-server, его зависимости больше не будут помечены как автоматические и теперь будут в этом списке):

apt list --installed | grep -v automatic

Другими словами, приведенный выше список вернет все пакеты, у которых либо нет обратных зависимостей, либо они также помечены как установленные вручную.

Связанный контент