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

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

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

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

Командная строка: apt-get install cardapio-gnomepanel
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), geoclue:amd64 (0.12.0-1ubuntu12, automatic), unity:amd64 (5.18.0-0ubuntu1, automatic), indicator-printers:amd64 (0.1.6-0ubuntu1, automatic), libevolution:amd64 (3.2.3-0ubuntu6, automatic), libqt4-declarative:amd64 (4.8.1-0ubuntu4.3, automatic), libmtp9:amd64 (1.1.3-1ubuntu0.1, automatic), tracker-miner-fs:amd64 (0.14.0-2ubuntu1, automatic), gir1.2-rb-3.0:amd64 (2.96-0ubuntu4.2, automatic), python-aptdaemon.pkcompat:amd64 (0.43+bzr805-0ubuntu7, automatic), gnome-media:amd64 (3.4.0-0ubuntu3.1, automatic), metacity:amd64 (2.34.1-1ubuntu11, automatic), nautilus:amd64 (3.4.2-0ubuntu6, automatic), libcompizconfig0:amd64 (0.9.7.0~bzr428-0ubuntu6, automatic), compiz-plugins-default:amd64 (0.9.7.12-0ubuntu1, automatic), libunistring0:amd64 (0.9.3-5, automatic), libebackend-1.2-1:amd64 (3.2.3-0ubuntu7, automatic), ubuntu-docs:amd64 (12.04.6, automatic), python-mako:amd64 (0.5.0-1, automatic),

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

Между установкой и удалением единственным существенным изменением была установка xubuntu-restricted-extras.

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

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

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

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

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

    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 удаляет (очищает) эти

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

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

sudo apt-get purge packagesudo apt-get --purge autoremove

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

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

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

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

apt-undo install yourpackagesapt-undo remove yourpackagesapt-undo purge yourpackagesapt-undo upgradeapt-undo dist-upgradeapt-undo install yourpackages=old.versionapt-undo install yourpackages=new.version

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

apt-undo undo

Используйте возможности 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 использует тип регулярного выражения, который не поддерживает не жадные совпадения, что было самым простым способом построения того, что мне было нужно)

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

Сделано.

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

Чтобы отменить последнюю установку apt, вы также можете использовать это:

sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep -E ":amd64|:i386|:arm" | tr "\n" " ")

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

Вы можете создать функцию с именем ”aptpurgelastinstall“, выполнив эту команду:

echo -e "\n# undo the last apt installation with aptpurgelastinstall" >> ~/.bashrc && echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep -E ":amd64|:i386|:arm" | tr "\n" " ") ; }' >> ~/.bashrc && . ~/.bashrc

Теперь вам просто нужно ввести aptpurgelastinstall в командной оболочке, чтобы отменить последнюю установку.


Если вы хотите указать, сколько предыдущих установок должно быть удалено (все за один шаг), затем измените 1 в коде на $1.

Затем вы можете ввести, например aptpurgelastinstall 3 в оболочке и последние три установки будут полностью очищены.

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

Следуйте за sudo apt-get purge packagename с

sudo apt-get autoremove. 

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

Также смотрите часто задаваемые вопросы по адресу Как мне вручную удалить все Файлы Cardapio?.

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

По умолчанию apt-get оставит пакеты позади, если вы не укажете -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

Надежнее взглянуть на apt history.log и удалите все установленные пакеты. Я создал небольшой скрипт на основе узлов, чтобы облегчить этот процесс:

https://github.com/rolfen/apt-history

Кроме того, вот еще один, более ручной подход к "откату" изменений:

https://unix.stackexchange.com/a/236711

Если вы только что добавили 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 remove {список пакетов с шага 3}

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

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

Я знаю, что это довольно старый вопрос, но я пришел сюда в поисках помощи, и, возможно, я смогу кому-то помочь.У меня была ситуация, похожая на ситуацию @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 на втором шаге в этом нет необходимости, так как я снова выдал на четвертом шаге.

В этом случае немного поздно помогать, но в следующий раз, когда вы захотите что-то установить, подумайте о том, чтобы сначала выполнить симуляцию. Запустите “sudo apt-get install -s package”, где “-s” обозначает симуляцию, а пакет будет заменен именем соответствующего программного обеспечения.

@KarthikT Тогда я совершенно не понимаю, почему “автоматическое удаление” у вас не работает. Либо вы каким-то образом отметили все пакеты как установленные вручную сейчас, либо это простое недоразумение. Это очень просто: apt-get autoremove просто удаляет все автоматически установленные помеченные пакеты без причины иметь их сейчас. Если это не сработает для вас, я думаю, вы что-то изменили в своей системе, о чем не сообщили в своем вопросе.

@vasa1 Да, я корю себя за это. apt-get также запрашивает [Y / n], это должно было быть моим выходом…

  • Я получил только 1 другой пакет, связанный с python (python-keybinder или summat), как “ненужный” * Вы действительно удалили пакет cardapio-gnomepanel?

@gertvdijk да, apt-get remove carpadio тоже взял это с собой.

Все, что я сделал после установки carpadio и перед его удалением, это установил xubuntu-restricted-extras. Я не ожидал, что у этого будет unity и т.д. В качестве зависимых, поэтому я не упоминал об этом.

@gertvdijk и “система” - это постоянный живой usb, я не знаю, имеет ли это значение.

@KarthikT Нет, оба не имеют отношения к моим знаниям, но в любом случае хорошо включить это в ваш вопрос.

Мой question решал практически идентичную проблему. Ключом к ее решению был запуск однострочной строки в соответствующей части журнала apt и вставка выходных данных после знакомого “sudo apt-get remove”