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

В 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

  • Когда происходит сбой chmod?
  • Невозможно получить доступ к другому серверу через локальную сеть в Digital Ocean
  • Что такое эквивалент Debian для обновления операционной системы до выпуска?
  • невозможно подключить ftp в режиме паузы
  • tmux / screen ctrl + стрелка (слева направо) не работает на SSH
  • Устранение неполадок Ubuntu 16.04 при конфигурации сети NAT
  • Не удается установить Ubuntu, поскольку ПК продолжает закрывать
  • Ограничение сеанса для сервера OpenSSH на Ubuntu Desktop 7.10
  • Общесистемный способ установить или получить $ JAVA_HOME в Ubuntu?
  • acpi_video0 яркость не влияет на экран
  • Ошибка MDADM RAID 0
  • Interesting Posts

    Ускорение видео в Mint Linux 15 (Olivia) на процессоре Intel Atom

    Функция BASH для чтения пользовательского ввода ИЛИ прерывания по таймауту

    Как выводить строки файла после поиска и grep?

    Зачем запускать путь к каталогу в качестве команды, возвращать «разрешение отказано», а не «команда не найдена»?

    Вопрос о OpenOCD

    bash: /etc/bash.bashrc: разрешение отклоняется всякий раз, когда я открываю терминал

    синтаксическая ошибка: неверный арифметический оператор (токен ошибки – .c)

    Базы данных для встроенной Linux?

    nc -l в фоновом закрытии немедленно закрывается (nc -l 1234 &)

    отображать только файлы, начиная с. (скрытый)

    Какова цель опции -I команды xargs?

    SLES не может обновлять пакеты через zypper или yast2

    Сгенерировать массив строк в сочетании с числом

    Один сетевой адаптер имеет несколько IP-адресов. Можно ли дросселировать скорость на каждый IP-адрес?

    Как установить Ruby 1.9.3 на Arch?

    Linux и Unix - лучшая ОС в мире.