Получить список установленных программ и приложений [dублировать]

Еще одна идея добавить к уже широкому набору опций из превосходного ответа Сержа.

Возможно, вы сможете использовать alias для этого - возможно, с некоторыми небольшими изменениями в том, как вы сейчас это делаете вещи.

alias - это просто слово, которое вы выбираете для сопоставления с большей строкой, которую оболочка будет расширять каждый раз, когда она встречается с ней. Возможно, наиболее часто используемым случаем является применение «по умолчанию» к существующей команде, например:

alias ls='ls -a --color=auto'

Однако нет необходимости, чтобы ваш alias был назван в честь существующей команды - или даже короче, чем шаблон назначения - так что вы могли бы, например, alias tgzcreator='tar -czvf'

alias es используют ресурс с оболочкой, в которой они определены. «Persistent» alias es для вас можно настроить в ~/.bash_aliases, который должен быть автоматически загружен с помощью наиболее хорошо написанных сценариев .bashrc по умолчанию.

Обратите внимание на пару советов: [ ! d6] Вместо того, чтобы беспокоиться в конкретном сценарии, будет ли ранее установленный alias мешать вашему коду, вы можете префикс его с обратной косой чертой, чтобы предотвратить пропущение alias. например Обычно я alias cp до cp -i, чтобы случайно не перезаписывать вещи, но в некоторых сценариях я явно хочу перезаписать вещи. (Я не собираюсь использовать какое-то ужасное обходное решение, например, создание известного пользователя un alias ed!) Итак, в этом скрипте я буду использовать \cp src dst alias. Возможно, по умолчанию не найдены источники в сценариях оболочки , которые запускают свою собственную неинтерактивную копию оболочки. Вы можете убедиться, что они расширены, установив опцию expand_aliases в вашем скрипте. Я получил это от: https://stackoverflow.com/questions/2197461/how-to-set-an-alias-inside-a-bash-shell-script-so-that-is-it-visible-from-the -ou

Итак, исходя из ограниченного контекста, доступного в вашем сообщении, вы можете сделать что-то , если вот так:

shopt -s expand_aliases
alias get_etc_dir='find /etc -type d'
alias get_etc_fil='find /etc -type f'

Для вас , это может не работать без настройки, например изменение вашего параметризованного типа inode в суффикс с псевдонимом. Это просто еще один вариант того, как пользователи могут сократить фрагменты кода в целом. В любом случае, я попытался объяснить подробно на основе того, что знаю, и надеюсь, что это где-то полезно.

(Также я бы предложил переместить это в Unix / Linux SE, считая, что это идеальный вариант для вещи, которые не являются специфичными для Ubuntu?)

1633
задан 8 June 2016 в 20:48

34 ответа

APT-Clone. Этот пакет можно использовать для клонирования / восстановления пакетов в системе на основе apt. Он будет сохранять / восстанавливать пакеты, sources.list, keyring и автоматически установленные состояния. Он также может сохранять / восстанавливать больше загружаемых пакетов, используя dpkg-repack. source: man apt-clone

APT-Clone используется ubiquity (установщик Ubuntu) для процесса обновления. Это намного лучше, чем решение dpkg --get-selections, потому что:

Он сохраняет всю информацию о репозиториях. Он отслеживает, какие пакеты были автоматически установлены. Он позволяет переупаковывать локально установленные файлы DEB.

Как использовать

Он сохраняет всю информацию о репозиториях. Сделать резервную копию sudo apt-clone clone path-to/apt-clone-state-ubuntu-$(lsb_release -sr)-$(date +%F).tar.gz Он отслеживает, какие пакеты были автоматически установлены.

Он делает простой gzipped tar-файл, который можно легко отредактировать и просмотреть перед восстановлением на других машинах. Вот пример его структуры:

/ ├── etc │   └── apt │   ├── preferences.d │   ├── sources.list │   ├── sources.list.d │   │   ├── anton_-ubuntu-dnscrypt-vivid.list │   │   ├── maarten-baert-ubuntu-simplescreenrecorder-vivid.list │   │   └── megasync.list │   ├── trusted.gpg │   └── trusted.gpg.d │   ├── anton__ubuntu_dnscrypt.gpg │   ├── anton__ubuntu_dnscrypt.gpg~ │   ├── maarten-baert_ubuntu_simplescreenrecorder.gpg │   └── maarten-baert_ubuntu_simplescreenrecorder.gpg~ └── var └── lib └── apt-clone ├── extended_states ├── installed.pkgs └── uname
27
ответ дан 23 July 2018 в 18:49

В Unix StackExchange объясняется, как использовать aptitude для отображения пакетов, не установленных в качестве зависимостей, и как сравнить этот список со списком пакетов по умолчанию для вашей версии Ubuntu.

Чтобы получить файл манифеста для настольных версий 12.04 и новее, посетите отличное объяснение в Unix StackExchange , выберите свою версию и прокрутите вниз ниже изображений компакт-диска в раздел файлов. Вы найдете что-то вроде «ubuntu-12.04.4-desktop-amd64 + mac.manifest», который соответствует вашей архитектуре.

Для версий сервера вам нужно будет получить файл манифеста из ISO, который был используется для установки исходной системы. Для сервера VPS или облака ваш провайдер может сделать изображения доступными или вам может потребоваться связаться с ними.

Вот пример использования кода из указанной ссылки, а также изменения для установки на новый сервер.

Старый сервер (код из другого сообщения, вывод сохранен в файл):

aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currently-installed.list wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \ | cut -f1 | sort -u > default-installed.list comm -23 currently-installed.list default-installed.list > user-installed.list

На новом сервере скопируйте файл с помощью scp, затем используйте команду sed для добавления 'install' для каждой строки (-i выполняет inline-replace). Затем вы можете использовать список в качестве входа в «dpkg -set-selections» и установить пакеты с помощью apt-get:

scp user@oldserver:user-installed.list . sed -i 's/$/\tinstall/' user-installed.list sudo dpkg --set-selections < user-installed.list sudo apt-get dselect-upgrade

Перед тем как начать эту задачу, я рекомендую прочитать и понять все части сообщение, упомянутое в начале, а затем обратитесь к справочному руководству по aptitude для получения подробной информации о шаблонах поиска.

24
ответ дан 23 July 2018 в 18:49

Чтобы сохранить список установленных пакетов в файле с именем installed_packages.txt, просто запустите:

dpkg-query --list >> installed_packages.txt
13
ответ дан 23 July 2018 в 18:49

Создайте резервную копию установленных пакетов:

dpkg --get-selections > list.txt

Затем (в другой системе) восстановите установки из этого списка:

dpkg --clear-selections sudo dpkg --set-selections < list.txt

Чтобы избавиться от устаревших пакеты:

sudo apt-get autoremove

Чтобы установить, как во время резервного копирования (то есть установить пакеты, установленные dpkg --set-selections):

sudo apt-get dselect-upgrade
179
ответ дан 23 July 2018 в 18:49
  • 1
    Отличный совет о восстановлении на другой машине. +1. – Drew Noakes 17 January 2013 в 06:28
  • 2
    Миграция между двумя разными машинами ubuntu 12.04, этот подход нарушил мою систему. это заняло некоторое время, пока я не понял, что каким-то образом ubuntu-desktop удалился - возможно, из-за одной из команд dpkg. будьте осторожны, мне потребовались часы, чтобы восстановить повреждение! – Karl Frisk 19 August 2013 в 21:02
  • 3
    И иногда система обновляет приложение, которое вы специально хотите, чтобы система не касалась его когда-либо, выполните пожар в конце команд sudo apt-mark hold name-your-package . Это предотвратит обновление apt-get до текущей версии, которая является по умолчанию для процесса обновления. – Faron 1 March 2016 в 04:29

Другие вопросы по тегам:

Похожие вопросы: