Список явно установленных пакетов

В Gentoo есть файл /var/lib/portage/world который содержит пакеты, которые я явно установил. Явным я имею в виду, что пакеты, которые я выбираю, не включая ничего, установленное по умолчанию, или втянутые зависимостями.

Есть ли подобный файл или команда, чтобы найти эту информацию в Ubuntu?

8 Solutions collect form web for “Список явно установленных пакетов”

Просто код

 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 

Аналогичные подходы можно найти в ссылках, которые Gilles опубликовал в качестве комментария к вопросу. Некоторые источники утверждают, что это будет работать, только если вы использовали aptitude для установки пакетов; однако я почти никогда не использовал aptitude для установки пакетов и обнаружил, что это все еще работает. --disable-columns предотвращает aptitude от заполнения строк имен пакетов пробелами, которые препятствуют сравнению ниже. | sort -u | sort -u сортирует файл и удаляет дубликаты. Это делает последний шаг намного проще.

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

Примечание. Этот раздел начинается с «неправильного пути», который я считаю иллюстративным. Второй фрагмент кода – тот, который работает.

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

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

Вы можете использовать любой из этих двух однострочных. Оба дают точный результат на моей машине и точнее, чем все предлагаемые до сих пор решения (июль 2014 года) в этом вопросе. Они представляют собой комбинацию двух ответов (1) и (2) . Обратите внимание, что я изначально разместил здесь этот ответ.

Использование apt-mark :

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

Использование aptitude :

 comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u) 

Очень мало пакетов по-прежнему попадают в трещины, хотя я подозреваю, что они фактически установлены пользователем, либо сразу после установки через установку локализации языка, либо, например, через установщик кодеков Totem. Кроме того, похоже, что потоки заголовков linux также накапливаются, хотя я установил метапакет, не относящийся к версии. Примеры:

 libreoffice-help-en-gb openoffice.org-hyphenation gstreamer0.10-fluendo-mp3 linux-headers-3.13.0-29 

Как это работает

  1. Получить список установленных вручную пакетов. Для aptitude дополнительный sed выравнивает оставшиеся пробелы в конце строки.
  2. Получите список пакетов, установленных сразу после новой установки.
  3. Сравните файлы, выводите только строки в файле 1, отсутствующие в файле 2.

Другие возможности не работают:

  • Используя файл 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, а другой – файл.

Оба перечисляют больше пакетов, чем указанное выше решение.

Вот пример вывода cat /var/log/apt/history.log :

 Start-Date: 2011-01-22 00:43:38 Commandline: apt-get --target-release experimental install libdbus-1-dev Upgrade: libdbus-1-3:i386 (1.4.0-1, 1.4.1-1), libdbus-1-dev:i386 (1.4.0-1, 1.4.1-1) End-Date: 2011-01-22 00:43:48 Start-Date: 2011-01-23 01:16:13 Commandline: apt-get --auto-remove purge webcheck Purge: python-utidylib:i386 (0.2-6), python-beautifulsoup:i386 (3.1.0.1-2), libtidy-0.99-0:i386 (20091223cvs-1), webcheck:i386 (1.10.3) End-Date: 2011-01-23 01:16:31 

Что касается вашего вопроса, отфильтруйте материал с помощью grep ( cat /var/log/apt/history.log | grep Commandline ).

Обратите внимание, что эти файлы повернуты, поэтому проверьте других, чтобы вы ничего не пропустили:

 $ ls /var/log/apt/history.log* -rw-r--r-- 1 root root 69120 2011-01-23 18:58 /var/log/apt/history.log -rw-r--r-- 1 root root 19594 2011-01-01 02:48 /var/log/apt/history.log.1.gz 

ПРИМЕЧАНИЕ .

  • Я проверил как aptitude, так и synaptic (версии 0.70 и 0.6.3 соответственно), и оба они регистрируют свои действия в этом файле журнала. Одна неудача с ними в том, что у них нет линии, начинающейся с Commandline , поэтому трюк grep не будет работать с ними.

Я наткнулся на этот красивый oneliner, пока я искал этот запрос

Один вкладыш

 comm -13 \ <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \ <(comm -23 \ <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \ <(apt-mark showauto | sort) \ )` 

Этот oneliner фильтрует пакеты, установленные системой, используя журналы из /var/log/installer/initial-status.gz

Я отправлю ссылку на исходную тему, когда я ее найду, поскольку этот oneliner не мой, и я не могу вспомнить, где я его видел.

По словам man apt-mark :

 apt-mark showauto apt-mark showmanual 

Вы хотели бы взглянуть на эту статью .

В конце статьи есть сценарий python, который должен делать то, что вы хотите.

Это было написано для (k) ubuntu . но должен работать и для Ubuntu .

Ниже приводится дополнение к ответу Стивена D.

Следующая строка, как представляется, обрезает имена пакетов с 32 символами:

 aptitude search '~i !~M' | cut -d" " -f4 | sort -u > currentlyinstalled.txt 

Это похоже на работу:

 aptitude search '~i !~M' -F "%p" > sort -u > currentlyinstalled.txt 

см. этот ответ

Проверьте /var/log/apt/term.log

  • Gimp пропускает библиотеки после установки скомпилированной версии и удаления пакета
  • Как мне разбить жесткий диск?
  • Клавиша Alt + tab не работает в клиенте NX для Linux
  • Пользовательские настройки для monit? Должна ли она выполняться как root или ее собственный пользователь?
  • Xubuntu Oneiric не запускает XFCE
  • Сетевые интерфейсы до порядка, проблема с туннелем ipv6
  • Проблемы с шрифтом для конкретного пользователя в разных приложениях
  • Какую функциональность я теряю, отключая диспетчеры дисплеев GDM / KDM / SLIM / CDM и т. Д.?
  • Минимальная демонстрация VLC с HIP для Linux (HIPL)
  • Как сделать экран черно-белым?
  • Evince не запускается, потому что он не может читать .Xauthority
  • Linux и Unix - лучшая ОС в мире.