
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
Другими словами, приведенный выше список вернет все пакеты, у которых либо нет обратных зависимостей, либо они также помечены как установленные вручную.