Я хотел бы получить список пакетов, установленных вручную apt
или, aptitude
и иметь возможность узнать, был ли foobar
пакет установлен вручную или автоматически. Есть ли какой-нибудь аккуратный способ сделать это из командной строки?
183
Ответы:
Вы можете использовать любой из этих двух однострочников. Оба дают одинаковый результат на моей машине и более точны, чем все решения, предложенные до сих пор (6 июля 2014 г.) в этом вопросе.
Использование
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, в то время как другой файл включает.Я использовал различные другие сообщения StackExchange в качестве ссылок, однако ни одна из них не работает так же хорошо, как приведенное выше решение:
Оба перечисляют больше пакетов, чем приведенное выше решение.
РЕДАКТИРОВАТЬ: Что делать, если вы обновились с предыдущего выпуска:
Если вы обновили Ubuntu с одного выпуска на другой, вам, вероятно, придется настроить этот процесс. В этом случае я бы проверил файл манифеста более новой версии (см. Выше) в дополнение к файлу initial-status.gz из текущей версии. Вы можете легко сделать это, просто добавив еще одно сравнение. Использование только файла манифеста не будет работать, так как, к сожалению, файл манифеста не содержит всего, что делает файл initial_status.gz (я проверял).
источник
/var/log/installer/initial-status.gz
отсутствует. Также я хочу знать, зависит ли это от маркировки aptsmanual
или нет?showmanual
команду (ниже). И используйтеcomm
для сравнения двух (отсортированных) списков.showmanual
Результат дал мне 1840 более уникальные пакеты изapt-mark showmanual
не показанных этого метода. НИКАКИЕ пакеты не были уникальными для вывода этойcomm
-команды. Я думаю, что более интересно записать, что для моего ПК в обоих результатах указано 894 пакета. Не уверен, почему есть такое огромное несоответствие. Некоторые (многие?) Пакеты, похоже, зависят от версии. Другие, такие как XOrg, компоненты GTK и другие,lib*
могут быть обновлениями. В любом случае, этот ответ - очень хорошее начало.apt-mark showmanual
. Интересно, сколько различий видно. Ваш список содержит 238 пакетов, а showmanual возвращает 1717 пакетов. Из 2179 установленных пакетов только 223 в обоих списках, 15 только в вашем (примеры: nodejs, lightdm) и 223 только в showmanual (примеры: xserver-xorg, ubuntu-desktop). Такое ощущение, что ваш список более полезен, но, не зная, откуда эти различия, нелегко решить ... (но я совершенно уверен, что я вручную установил nginx и lightdm ...) [извините, я только что написал то же самое;)]В более новых версиях пакета apt есть также команда apt-mark
источник
linux-image-3.11.0-*-generic
т.д. как руководствоlinux-image-3.13.0-24-generic
вручную, а токlinux-image-3.13.0-27-generic
автоматически. Похоже, что при обновлении ссылочного пакета (в данном случаеlinux-image-generic
изменились зависимости) автоматически устанавливается ручная отметкаapt-get autoremove
. Это определенно не то, что вы хотите.Для Ubuntu 16.04 проверьте файл журнала
/var/log/apt/history.log
.Например:
Он не идеален, но он довольно хорош, чтобы прояснить, что именно я установил вручную. Положите
-B 1
на grep, чтобы увидеть, когда он был установлен.Пример вывода
Не уверен, что это подхватит
aptitude
или нет. Похоже, он не забирает установки из настольного приложения Ubuntu Software.источник
apt-mark showauto | grep -iE '^foobar$'
выведет «foobar», если пакет был установлен автоматически, иначе ничего.aptitude search '!~M ~i'
перечислит пакеты, которые не были установлены автоматически. Жаль, что способность не будет частью установки по умолчанию на Ubuntu Desktop, начиная с 10.10.источник
aptitude search
показывает ВСЕ пакеты, а не только те, которые установлены вручную (я полагаю, это то, что хотел ОП)aptitude search '!~M ~i'
и он перечисляет 1043 пакетов. Я не могу установить столько пакетов вручную.Следующий скрипт распечатает все пакеты, которые не установлены для автоматической установки и, следовательно, были установлены вручную:
это основано на том, как apt-mark распечатывает автоматически установленные пакеты.
источник
sys.exit(1)
безimport sys
может привести к ошибке в более новых версиях Python. Либоimport sys
или используйexit(1)
.Чтобы получить список всех пакетов (не установленных, установленных пользователем или установленных по умолчанию для всех PPA),
apt
используется следующий метод:apt list [option]
Возможные варианты, полезные для этого:
--installed
отображать только те пакеты, которые установлены в системе (из примерно 50 000+)--manual-installed
перечислить пакеты, которые были явно установлены командой, либо напрямую, либо как зависимости.В качестве альтернативы вы можете сделать:
apt list --manual-installed | grep -F \[installed\]
получить список пакетов, полученных только из пользовательских команд и их зависимостей, и получить дополнительную информацию о них, такую как поддерживаемая версия и архитектура (x86, x86_64, amd64, все и т. д.)источник
Как прокомментировали несколько человек, шоу apt-mark showmanual выглядит немного глючно (и я сообщил об этом как об ошибке 727799 ). Когда я его использую, он на самом деле сообщает о многих вещах, которые даже не зарегистрированы в / var / lib / apt / extended_states (где это должно храниться), и apt-get не регистрирует вещи как установленные в / var / lib / apt / extended_states (только в / var / lib / dpkg / status). Сценарий python от txwikinger, приведенный выше, напрямую обращается к / var / lib / apt / extended_states, но если вы используете его сегодня, синтаксис может не работать (мой только что начал генерировать ошибки с Kubuntu 13.10). Обновленный синтаксис:
Для меня это был очень короткий список из 5 пунктов, который тоже не совсем точен.
источник
sys.exit(1)
безimport sys
может привести к ошибке в более новых версиях Python. Либоimport sys
или используйexit(1)
.Я хотел бы дать решение GUI.
открыто
Synaptic Package Manager
Перейти к
Status
Нажмите
Installed (manual)
Он выдаст список пакетов, установленных вручную с помощью apt или aptitude.
К сожалению, я не смог найти никакой опции,
Custom Filters
чтобы узнать, был лиfoobar
пакет установлен вручную или автоматически.Если пакет находится под,
Installed
но не под,Installed (manual)
то он был установлен автоматически. Если пакет находится под,Installed (manual)
то он был установлен вручную.источник
Если никто не дает вам хороший ответ с помощью команды apr-что-то, вы можете сделать это трудным путем . Apt-get хранит свою информацию в / var / lib / apt / extended_states. Любой файл, который устанавливается автоматически, будет добавлен в этот файл. Если вы устанавливаете пакет уже в этом файле вручную, пакет останется в этом файле, но с автоматически установленным: 0 во второй строке. Это не удалено.
Примечание. Как и ожидалось, лучше будут ответы, которые могут сработать, если появятся изменения размещения файлов. Я оставляю свои на всякий случай, если информация о расположении файла полезна.
источник
apt-get install liferea
и он не установился, но я получил вывод, который был чем-то вроде «помечен как установленный вручную». Теперь liferea все еще находится в файле, за исключением того, что в следующей строке0
вместо a1
. Кроме того, вы должны изменить свой шаблон регулярных выражений" foobar$"
вместо простоfoobar
.После долгих поисков, мне удалось собрать этот скрипт. Это работает хорошо для меня:
источник
sort -u
вместоsort | unique
. Посколькуapt-mark
не отображает архитектуру, вы должны удалить ее из вывода dpkg перед выполнением операций set (или использованиемdpkg-query -W -f='${Package}\n'
). Кроме того, dpkg может перечислить некоторые пакеты, которые не установлены в настоящее время. Что касается "desc", вы можете использовать `dpkg-query -W -f = '# $ {binary: Summary} \ n' $ pack, что быстрее.apt-mark
может отображать архитектуру для некоторых пакетов, но не для многихdpkg -l
.apt-cache search
медленный. Заранее получить список установленных дат, используя что-то вроде help.ubuntu.com/community/ListInstalledPackagesByDate, может быть более эффективнымКак сказал Ли Ло,
apt-mark showauto
вы должны получить полный список автоматически установленных вещей.Теперь, чтобы показать вещи, которые установлены вручную, оказалось, что есть замечательный простой модификатор поиска для aptitude. Но ты не хочешь этого делать. Вы хотите написать огромную команду bash, которая занимается ракетостроением.
Примечание. Это еще одна иллюстрация того, как здорово вы будете выглядеть, выполняя массовые команды bash всем своим друзьям.
Я разбил его на две строки для удобства чтения. Что это делает?
apt-mark
источник
comm -3 <(dpkg -l | grep '^ii' | cut -d \ -f 3|sort) <(apt-mark showauto|sort)
по-настоящему лучше;)В этом списке перечислены все установленные вручную пакеты без: зависимостей, удаленных пакетов, пакетов, установленных во время установки системы.
источник