Я установил Carpadio на мою установку Xubuntu (Live USB), которая затем вытащила более 50 пакетов, как я полагаю, со стороны Ubuntu хранилища. Теперь я хотел бы отменить это. Однако, несмотря на всю мою охоту, я не могу найти ничего более полезного, чем . Как мне отменить команду sudo apt get install , которая просто предлагает apt-get purge
. Это бесполезно, поскольку все, что он делает - это удаляет 2 упаковки (карпадио и карпадио-гномепанель).
/var/log/apt/history.log
содержит список всех пакетов, которые были установлены вместе с этой командой. Так что мне было интересно, есть ли какой-нибудь простой способ убрать их всех? ? Иначе я могу просто переустановить, это была новая установка, но мне любопытно.
Небольшой образец журнала истории (1 / 5-1 / 10 от всего списка)
Командная строка: apt-get install cardapio-gnomepanel
blockquote>
Установка: libdbusmenu -qt2: amd64 (0.9.2-0ubuntu1, автоматический), python-packagekit: amd64 (0.7.2-4ubuntu3, автоматический), cups-pk-helper: amd64 (0.2.1.2-1ubuntu0.1, автоматический), геоклей: amd64 (0.12.0-1ubuntu12, автоматический), unity: amd64 (5.18.0-0ubuntu1, автоматический), индикатор-принтеры: amd64 (0.1.6-0ubuntu1, автоматический), libevolution: amd64 (3.2.3-0ubuntu6, автоматический) ), libqt4-декларативный: 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
: я не уверен почему, но я получил только 1 другой пакет, связанный с python (python-keybinder или что-то еще), как «ненужный», и это все, что удалось удалить с помощью autoremove.Между установкой и деинсталляцией устанавливались только основные изменения
xubuntu-restricted-extras
.
В основном Вы будете иметь обоим apt-get remove
(или склонный - получают чистку), пакет, и работать 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
удаляет (производит чистку) их
Официальная документация относительно autoremove
от apt-get(8)
страница справочника:
autoremove
используется для удаления пакетов, которые были автоматически установлены для удовлетворения зависимостей для других пакетов и больше не теперь необходимы.
Что корректный путь состоит в том, чтобы полностью удалить приложение?
new_file.txt
perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
sudo apt-get remove
[вставить содержимое буфера обмена сюда] Готово.
По сути, нам нужно отформатировать список пакетов из журнала apt во что-то, что apt-get сможет понять. Круглые скобки, слова между ними и запятые должны быть указаны так, чтобы Perl начал играть. Да, есть лучшие (более эффективные) способы - но я сделал это, это легко понять, и это работает.
Следуйте sudo apt-get purge packagename
с
sudo apt-get autoremove.
Если это не метапакет, об этом следует позаботиться.
Также см. Часто задаваемые вопросы в . Как вручную удалить все файлы Cardapio? .
Используйте силу 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
использует тип регулярного выражения, которое не поддерживает несжадные совпадения, что было самым простым способом построения того, что мне нужно)
Если вы хотите удалить пакет и его зависимости, которые были установлены в то время, вы должны использовать:
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
После того, как вы удалите один пакет, и вы можете полностью удалить его, добавив --purge, для, apt-get remove --purge <package>
, он должен дать вам сообщение о том, что загруженные пакеты библиотеки были установлены автоматически и больше не нужны, по адресу в какой момент вы можете запустить apt-get autoremove
, чтобы удалить их.
Если вы только что добавили 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 --reinstall {список пакетов из шага 2}
6) Если что-то пошло не так и вы не можете придумать решение, верните PPA и переустановите все пакеты из двух списков.
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, я выпустил следующее:
sudo apt-get purge unity8-desktop-session-mir
sudo apt-get --purge autoremove
sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts
(было удалено 8 пакетов относящиеся к Unity 8) sudo apt-get --purge autoremove
Это не удалит абсолютно все, что вы установили ранее, но в некоторых случаях достаточно хорошо.
PS: возможно, autoremove
на втором шаге не является необходимым, как я снова издал на четвертом шаге.
Технически операции «удаления» или «автоудаления» не являются «отменой», хотя их можно сделать, чтобы выполнять работу достаточно хорошо в большинстве случаев.
По умолчанию apt-get оставит пакеты, если вы не укажете -o APT::Suggests-Important=0 -o APT::Recommends-Important=0
Более надежно взглянуть на apt history.log
и удалить все установленные пакеты. Я создал небольшой сценарий на основе узлов, чтобы упростить процесс:
https://github.com/rolfen/apt-history
Кроме того, вот еще один , более ручной подход к «откату» изменений:
Для отмены последней способной установки, можно также использовать что-то вроде этого:
sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ")
Это поймает последнюю способную установку из истории и производит чистку, все здесь установили пакеты.
можно создать функцию, вызванную aptpurgelastinstall, чтобы иметь его всегда под рукой (добавит код к ~/.bashrc):
echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ") ; }' >> .bashrc
Теперь просто необходимо ввести aptpurgelastinstall в оболочке для восстановления последней установки.