Просто код
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
объяснение
Один из способов решения этой проблемы - разбить ее на три части:
- Как получить список пакетов, не установленных как зависимости?
- Как получить список пакетов, установленных по умолчанию?
- Как я могу получить разницу между этими двумя списками?
Как получить список пакетов, не установленных как зависимости?
Следующая команда работает в моей системе:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Подобные подходы можно найти в ссылках, которые Жиль опубликовал в качестве комментария к вопросу. Некоторые источники утверждают, что это будет работать, только если вы использовали aptitude для установки пакетов; однако я почти никогда не использовал aptitude для установки пакетов и обнаружил, что это все еще работает. В --disable-columns
предотвращает APTITUDE от дополняя линии имена пакетов пробелами , которые будут препятствовать сравнения ниже. | sort -u
Сортируют дубликаты файлов и удаляет. Это делает последний шаг намного проще.
Как получить список пакетов, установленных по умолчанию?
Примечание. Этот раздел начинается с «неправильного пути», который я считаю иллюстративным. Второй кусок кода, который работает.
Это немного сложнее. Сначала я подумал, что хорошим приближением будут все пакеты, являющиеся зависимостями мета-пакетов ubuntu-minimal, ubuntu-standard, ubuntu-desktop и различных пакетов, связанных с ядром Linux. Некоторые результаты поиска в Google, похоже, использовали этот подход. Чтобы получить список этих зависимостей, я сначала попробовал следующее (что не сработало):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
Это, кажется, оставляет некоторые пакеты, которые я знаю, должны были прийти по умолчанию. Я все еще считаю, что этот метод должен работать, если создать правильный список метапакетов.
Однако кажется, что зеркала Ubuntu содержат файл "манифеста", который содержит все пакеты в установке по умолчанию. Манифест для Ubuntu 12.04.3 находится здесь:
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
Если вы просматриваете эту страницу (или страницу зеркала, расположенную ближе к вам):
http://mirror.pnl.gov/releases/precise/
Вы сможете найти файл ".manifest", который соответствует используемой версии и архитектуре. Чтобы извлечь только имена пакетов, я сделал это:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
Список, скорее всего, уже отсортирован и уникален, но я хотел убедиться, что он правильно отсортирован, чтобы упростить следующий шаг. Затем я вставил вывод defaultinstalled.txt
.
Как я могу получить разницу между этими двумя списками?
Это самая простая часть, так как большинство Unix-подобных систем имеют много инструментов для этого. comm
Инструмент является одним из многих способов сделать это:
comm -23 currentlyinstalled.txt defaultinstalled.txt
Это должно напечатать список строк, которые являются уникальными для первого файла. Таким образом, он должен напечатать список установленных пакетов, которые не установлены по умолчанию.
aptitude search '~i!~M' -F %p
нет?http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest
и дополнительные,| sed "s/ *$//"
но до сих пор нет кости.apt-mark showmanual | sort -u
, как показано в других ответах. Проще и не полагается на то,aptitude
что не установлено по умолчанию.Вы можете использовать любой из этих двух однострочников. Оба дают одинаковую производительность на моей машине и более точны, чем все решения, предложенные до сих пор (июль 2014 г.) в этом вопросе. Они представляют собой комбинацию двух ответов (1) и (2) . Обратите внимание, что я первоначально разместил этот ответ здесь .
Использование
apt-mark
:Использование
aptitude
:Очень немногие пакеты по-прежнему попадают в трещины, хотя я подозреваю, что они на самом деле устанавливаются пользователем, либо сразу после установки через настройку языковой локализации, либо, например, через установщик кодеков Totem. Кроме того, версии заголовков linux также накапливаются, хотя я установил только не зависящий от версии метапакет. Примеры:
Как это работает
sed
удаляют оставшиеся пробелы в конце строки.Другие возможности не работают так же хорошо:
ubuntu-14.04-desktop-amd64.manifest
файла ( здесь для Ubuntu 14.04) вместо/var/log/installer/initial-status.gz
. Дополнительные пакеты отображаются как установленные вручную, хотя это не так.apt-mark showauto
вместо/var/log/installer/initial-status.gz
.apt-mark
например, не включает пакет xserver-xorg, в то время как другой файл включает.Оба перечисляют больше пакетов, чем приведенное выше решение.
источник
По словам
man apt-mark
:источник
showmanual
показывает такие вещиxserver-xorg-video-vesa
, которые, клянусь, я не установил вручную.Вот пример вывода
cat /var/log/apt/history.log
:Что касается вашего вопроса, отфильтруйте материал с помощью grep (
cat /var/log/apt/history.log | grep Commandline
).Обратите внимание, что эти файлы повернуты, поэтому проверьте другие, чтобы ничего не пропустить:
ПРИМЕЧАНИЕ :
Commandline
, поэтомуgrep
уловка с ними не сработает.источник
aptitude
другими менеджерами пакетов. Если ваши журналы сместились, значит, вам не повезло.Я наткнулся на этот прекрасный oneliner, когда я искал этот запрос
Один лайнер
Этот oneliner фильтрует пакеты, установленные системой, используя логи
/var/log/installer/initial-status.gz
Я опубликую ссылку на оригинальную ветку, когда найду ее, так как этот oneliner не мой, и я не могу вспомнить, где я ее видел.
источник
Вы хотели бы взглянуть на эту статью .
В конце статьи есть скрипт на python, который должен делать то, что вы хотите.
Это было написано для (k) Ubuntu . но должен работать и для Ubuntu .
источник
Ниже дополнение к ответу Стивена двойки .
Следующая строка, похоже, усекает имена пакетов до 32 символов:
Это похоже на работу:
увидеть этот ответ
источник
Проверять, выписываться
/var/log/apt/term.log
источник
Вы также можете посмотреть файл
/var/lib/apt/extended_states
.Это полезно, если вы хотите знать, что было установлено на старом разделе.
источник
Большое спасибо и поздравления тем, кто придумал эту жемчужину сценария !!!
Я хотел добавить свои 2 ¢, и я установил дату установки, которую я определяю из $ info.
Я не освоил детали, почему $ info файлы обновляются или нет и когда, но это работает на практике.
Мой скрипт перечисляет последние обновления пакетов, не зависящих от версии, добавленных после установки.
Периодически проверяя, я видел, что я мог бы зарегистрировать вручную без единого промаха.
То есть пакеты пакетов установлены по той же причине. К сожалению, обновления нарушают этот порядок.
После обновления системы у меня был список добавленных пакетов, которые не были обновлены после обновления, а также те, которые были обновлены.
Ухоженная! Наслаждаться.
источник