Просто код
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
нет?