Можно ли отменить команду установки apt-get?

62

Я установил Carpadio на мою установку Xubuntu (Live USB), которая затем вытащила, как более 50 пакетов, из, вероятно, стороны Ubuntu репозитория. Теперь я хотел бы отменить это. Однако для всей моей охоты я не могу найти ничего более полезного, чем Как я могу отменить команду sudo apt get install , которая просто предлагает apt-get purge . Это не полезно, так как все, что он делает, это удалить 2 пакета (carpadio и carpadio-gnomepanel).

/var/log/apt/history.log имеет список всех пакетов, которые были установлены вместе с этой командой. Итак, мне было интересно, есть ли какой-нибудь простой способ удалить все из них ? Else, я могу просто переустановить, это была новая установка, но мне любопытно.

Небольшая выборка журнала истории (1 / 5-1 / 10 всего списка)

  

Командная строка: apt-get install cardapio-gnomepanel
  Установите: libdbusmenu-qt2: amd64 (0.9.2-0ubuntu1, автоматический), python-packagekit: amd64 (0.7.2-4ubuntu3, автоматический), cups-pk-helper: amd64 (0.2.1.2-1ubuntu0.1, автоматический) , geoclue: amd64 (0.12.0-1ubuntu12, автоматический), единство: amd64 (5.18.0-0ubuntu1, автоматический), индикатор-принтеры: amd64 (0.1.6-0ubuntu1, автоматический), libevolution: amd64 (3.2.3- 0ubuntu6, автоматический), libqt4-declarative: amd64 (4.8.1-0ubuntu4.3, автоматический), libmtp9: amd64 (1.1.3-1ubuntu0.1, автоматический), tracker-miner-fs: amd64 (0.14.0-2ubuntu1 , автоматический), gir1.2-rb-3.0: amd64 (2.96-0ubuntu4.2, автоматический), python-aptdaemon.pkcompat: amd64 (0.43 + bzr805-0ubuntu7, автоматический), gnome-media: amd64 (3.4.0- 0ubuntu3.1, автоматический), metacity: amd64 (2.34.1-1ubuntu11, автоматический), nautilus: amd64 (3.4.2-0ubuntu6, автоматический), libcompizconfig0: amd64 (0.9.7.0 ~ bzr428-0ubuntu6, автоматический), compiz- plugins-default: amd64 (0.9.7.12-0ubuntu1, автоматический), libunistring0: amd64 (0.9.3-5, автоматический), libebackend-1.2-1: amd64 (3.2.3-0ubuntu7, автоматический), ubuntu-docs: amd64 (12.04.6, автоматический), python-mako: amd64 (0.5.0-1, автоматический),

Для всех тех, кто предложил autoremove : я не уверен, почему, но я получил только один другой связанный с python пакет (python-keybinder или что-то еще) как "лишний", и это все, что autoremove удалось удалить.

Между установкой и удалением, только основное изменение заключалось в установке xubuntu-restricted-extras .     

задан Karthik T 25.01.2013 в 18:03
источник

8 ответов

70

В принципе, вам придется как apt-get remove (или apt-get purge) пакет , так и запускать apt-get autoremove после этого, чтобы вернуть установку package-one .

Давайте посмотрим на весь процесс:

  • sudo apt-get install package-one устанавливает 50 зависимостей с ним с пометкой "автоматически", также как и из выдержки из журнала в вашем вопросе

  • sudo apt-get purge package-one удаляет (очищает) только один, но do запускает это!

    Все последующие действия по установке (если они запущены) приведут к информационному сообщению с ненужными пакетами:

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    Этот список в основном представляет собой список всех пакетов, помеченных как "автоматический", без обратной зависимости от них. Другими словами, нет причин для их установки в отношении управления пакетами.

    Примечание. Установка не требуется! Это просто, чтобы продемонстрировать, что APT умна, чтобы рассказать вам о ваших ненужных пакетах!

  • sudo apt-get autoremove --purge удаляет (очищает) эти

Дополнительная информация

  • Официальная документация по autoremove из справочной страницы apt-get(8) :

      

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

  • Каков правильный способ полностью удалить приложение?

ответ дан gertvdijk 25.01.2013 в 18:13
источник
18

Если вы хотите удалить пакет и его зависимости, установленные в то время, вы должны использовать:

sudo apt-get purge package
sudo apt-get --purge autoremove

, но для отмены действий apt вы можете использовать скрипт apt-undo . Это простой скрипт, который может отменить действия apt , выполненные в Ubuntu. Следует отметить, что этот скрипт может работать, только если вы используете его вместо apt-get для установки / обновления / удаления / очистки / понижения пакетов.

Чтобы установить apt-undo в Ubuntu, запустите в терминале следующие команды:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

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

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

Чтобы отменить, указанные выше действия aptitude выполняют следующие команды в терминале:

apt-undo undo
    
ответ дан Ramin 25.01.2013 в 18:15
7

Используйте силу Unix. Возьмите строку файла журнала, которая у вас есть, и постройте команду, которая отменит действие apt. Например:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

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

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(Я использовал perl вместо sed , потому что sed использует тип регулярного выражения, который не поддерживает не-жадные совпадения, что было самым простым способом построения того, что мне нужно)

    
ответ дан Robie Basak 25.01.2013 в 18:46
1

После удаления одного пакета, и его можно полностью удалить, добавив -purge, for, apt-get remove --purge <package> , он должен предоставить вам сообщение о том, что упакованные им библиотеки библиотеки были установлены автоматически и больше не нужны, на в котором вы можете запустить apt-get autoremove , чтобы удалить их.

    
ответ дан Ken Kinder 25.01.2013 в 18:12
1

Следуйте за sudo apt-get purge packagename с помощью

sudo apt-get autoremove. 

Если это метапакет, это должно позаботиться об этом.

Также см. faq на Как вручную удалить файлы all Cardapio вручную? .     

ответ дан chaskes 25.01.2013 в 18:13
1
  1. Вставьте длинный список нежелательных пакетов из журнала apt в файл new_file.txt
  2. Выполнить perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. Скопировать выходные данные последней команды в буфер обмена или на нем в первую очередь .
  4. Выполнить sudo apt-get remove [вставить содержимое буфера обмена здесь]

Готово.

В принципе, нам нужно отформатировать список пакетов из журнала apt, что-то apt-get может понять. Скобки, слова между ними и запятые должны идти так, чтобы в них вмешался perl. Да, есть лучшие (более эффективные) способы - но я сделал это, его легко понять, и он работает.     

ответ дан Insperatus 02.02.2013 в 10:59
0

Если вы только что добавили ppa и хотите вернуться, вам необходимо выполнить описанные ниже действия. Понять это может не удастся, если вы установили другие пакеты, которые вы не хотите удалять. Я уверен, что это можно сделать с помощью скрипта. Лично я считаю, что это должно быть частью apt, и должно быть лучшее администрирование, какие пакеты устанавливаются из-за зависимостей и которые устанавливаются по запросу пользователя.

1) удалите ppa из /etc/apt/sources.list Помните время, когда вы добавили ppa. Если вам повезет, вам не нужно быть точным.

2) введите список переустановок с момента установки PPA: cat /var/log/dpkg.log | grep 'upgrade'

3) сделайте список, который нужно удалить, с момента установки PPA: cat /var/log/dpkg.log | grep 'install'

4) удалите все пакеты с шага 3: sudo apt-get удалить {список пакетов с шага 3}

5) переустановите все пакеты с шага 2: sudo apt-get install --reinstall {список пакетов с шага 2}

6) Если все пошло не так, и вы не можете придумать решение, верните PPA и переустановите все пакеты из двух списков.

    
ответ дан VincentSC 20.08.2013 в 18:24
0

Я знаю, что это довольно старый вопрос, но я пришел сюда, чтобы найти помощь, и, возможно, я могу помочь кому-то. У меня была ситуация, похожая на @ Karthik-T, после установки unity8-desktop-session-mir . Я знаю, что это большой. Он достал с собой 233 пакета.

Используя autoremove , я удаляю только 34 из них. Дело в том, что во время установки unity8-desktop-session-mir он удалил два пакета ( python3-aptdaemon.pkcompat и evolution-data-server-online-accounts ). Он указан в /var/log/apt/history.log после раздела Install .

Чтобы полностью отменить установку Unity 8, я опубликовал следующее:

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (удалено 8 пакетов, связанных с Unity 8)
  4. sudo apt-get --purge autoremove

Это не удалит абсолютно все, что вы установили раньше, но в некоторых случаях это достаточно хорошо.

PS: возможно, autoremove на шаге два не требуется, как я уже выпустил на шаге 4.

    
ответ дан user536838 03.08.2016 в 12:47