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


546

Я искал в сети такую ​​информацию и нашел разные командные строки, например:

sudo apt-get remove application
sudo apt-get remove application*

sudo apt-get remove --purge application
sudo apt-get remove --purge application*

sudo apt-get purge application
sudo apt-get purge application*

Итак, каков правильный путь? Нужно ли использовать это "*"?

После этого я также нашел эти команды:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)

1
Ответы на некоторые ваши вопросы можно найти в этом сообщении: askubuntu.com/questions/1143/how-can-i-uninstall-software
Glutanimate,

8
application*может иногда давать неожиданные результаты - например, если у вас есть файл в текущем каталоге с именем application_information, оболочка расширит его, прежде чем он будет передан в apt-get. Если это происходит, и вы хотите буквальную звездочку, вы можете использовать application\*или'application*'
Izkata

6
application*Еще более опасно, когда в текущем каталоге нет файлов: apt-getиспользуются регулярные выражения, без шаблонов глобуса. Люди почти стерли всю систему, пытаясь удалить wine*.
Андреа Корбеллини

3
Можете ли вы принять ответ? Быть благодарным людям, которые ответили вам.
М-рик

Ни то, application*ни другое не application\*безопасно! Цитирование *с \или ' 'только увеличивает риск, обеспечение *передается как это apt-get(хотя обычно это все равно!), Заставляет apt-getинтерпретировать аргумент как регулярное выражение. В регулярном выражении *означает «ноль или более предшествующего символа». Распространенная форма ошибки является удаление wine*, удаление всех пакетов с win(не wine, win) где - нибудь в их именах и все пакетах в зависимости от какого - либо из них. Смотрите это объяснение и возможные исправления . @Izkata
Каган

Ответы:


705
  • apt-get remove packagename

    удалит двоичные файлы, но не файлы конфигурации или данных пакета packagename. Это также не повлияет на установленные с ним зависимости от времени установки.

  • apt-get purge packagename или же apt-get remove --purge packagename

    удалит все, что касается пакета packagename, но не зависимости, установленные с ним при установке. Обе команды эквивалентны.

    Особенно полезно, когда вы хотите «начать все сначала» с приложением, потому что вы испортили конфигурацию. Однако он не удаляет файлы конфигурации или данных, находящиеся в домашних каталогах пользователей, обычно в скрытых папках. Нет простого способа удалить их.

  • apt-get autoremove

    удаляет потерянные пакеты, т. е. установленные пакеты, которые раньше устанавливались как зависимости, но больше не используются. Используйте это после удаления пакета, в котором установлены зависимости, которые вас больше не интересуют.

  • aptitude remove packagenameили aptitude purge packagename(аналогично)

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

И многие другие существуют. dpkgМожно использовать команды более низкого уровня (расширенные) или инструменты GUI, такие как Muon, Synaptic, Software Center и т. Д. Не существует единого «правильного» способа удаления приложений или выполнения других задач, взаимодействующих с управлением пакетами.

Список, который вы нашли, это просто примеры. Убедитесь, что вы понимаете значения и попробуйте, что он хочет сделать, прежде чем принимать действие (вам нужно нажать, Yпрежде чем он действительно выполнит действия, как предложено).

Звездочка в вопросе, вероятно, неверна ; apt-getпринимает регулярное выражение, а не шаблон глобуса в качестве оболочки. Так что же происходит с

sudo apt-get remove application*

является следующим:

  1. Оболочка пытается развернуться, application*просматривая файлы в текущем каталоге. Если (как это обычно имеет место) он ничего не находит, он возвращает шаблон глобуса без изменений (при условии, что bashздесь используется поведение по умолчанию --- zshпроизойдет ошибка).

  2. apt-getудалят пакеты, имя которых содержит строку , которая удовлетворяет регулярное выражение application*, то есть, с applicatioпоследующими произвольным числом n: applicatio, application, applicationn, libapplicatioи т.д.

  3. Чтобы увидеть, как это может быть опасно, попробуйте (без root для двойной безопасности) apt-get -s remove "wine*"( -sсмоделируйте вещь вместо того, чтобы делать это) - он скажет, что удалит все пакеты, которые имеют "win" в своем имени и зависимых, почти вся система ...

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

 sudo apt-get remove "^application.*"

(обратите внимание на кавычки и точку), которая удалит все пакеты, имя которых начинается с application.

Эти команды,

sudo updatedb                  # <-- updates the locate database (index). harmless
sudo locate application        # <-- locates the file 'application'. harmless
sudo rm -rf (file/folder name) # <-- removes files/dirs recursively. dangerous.

полностью выходят за рамки управления пакетами. Не удаляйте файлы, принадлежащие пакетам, без использования менеджера пакетов! Это запутается и это неправильный способ делать вещи.

Если вы не знаете, к какому пакету принадлежит файл, попробуйте это:

dpkg -S /path/to/file

9
Параметр --purge также удобен при попытке полностью удалить все оставшиеся зависимости, включая их файлы конфигурации: apt-get-autoremove --purge также важно отметить, что файлы конфигурации в вашем домашнем каталоге не затрагиваются параметром --purge. Эти вам придется удалить вручную.
Glutanimate,

1
Здесь произошла ошибка: apt-get принимает RE, а не globs; поэтому apt-get remove pack * удалит все пакеты, которые начинаются с pac, за которым следует ноль или более k ..., что обычно неожиданно. Я отредактировал ансер. См. Также askubuntu.com/questions/210976/…
Rmano

Я думаю, что этот ответ уже не точен. Либо apt remove -s texlive*или его apt-getответные строки возврата, такие как Note, selecting 'texlive-font-utils' for glob 'texlive*'(подразумевая, что они действительно принимают globs), за которыми следуют обычные Package 'texlive-common' is not installed, so not removedи, наконец, Remvстроки, такие как Remv texlive-font-utils [2015.20160320-1] [...].
Джонатан Я.

@JonathanY. Вы также выбрали бы неустановленные пакеты. В любом случае, не могли бы вы задать НОВЫЙ вопрос и прояснить немного подробнее, какова ваша ситуация в этом вопросе. Я был бы счастлив взглянуть на это :)
gertvdijk

Я не задаю новый вопрос. Я указываю на возможное изменение, так как этот ответ был сделан, что делает некоторые детали неверными. Конечно, может показаться, что apt-get remove packa*это действительно занимает глобус packa*вместо того, чтобы смотреть на него как на регулярное выражение: оно соответствует, packageно не соответствует pack.
Джонатан Я.

110

Для Ubuntu 12.04 и, возможно, выше, правильный метод:

sudo apt-get --purge autoremove packagename

Как подробно здесь .

Не используйте, так packagename*как это может удалить непреднамеренные пакеты и вызвать больше проблем, чем решает. Или , если вы должны, по крайней мере , запустить его с -s, --simulate, --dry-runфлаг первым , чтобы увидеть именно то , что он будет делать , не делать этого.


13
это правильный ответ, краткий и краткий:
Анвар

20

Вы можете использовать эту команду:

sudo apt-get purge --auto-remove packagename

Он удалит необходимые пакеты вместе с зависимостями, установленными с этими пакетами. --auto-removeВариант (будучи псевдоним autoremove) работает аналогично sudo apt-get autoremove. Используя эту команду, мы можем запустить одну команду:

sudo apt-get purge --auto-remove packagename

Вместо:

sudo apt-get purge packagename
sudo apt-get autoremove

2
Хотя вы правы, но можно также использовать sudo apt-get --purge autoremove packagename. Та же самая команда здесь
Анвар

Может ли полная команда также быть записана как apt-get autoremove --purgeвместо apt-get purge --auto-remove?
Felwithe

3
Может кто-нибудь, пожалуйста, застрелить меня?
Мартин Андерссон

7

Вы можете безопасно использовать sudo apt-get remove --purge applicationили sudo apt-get remove applications99% времени. Когда вы используете purgeфлаг, он просто удаляет также все файлы конфигурации. Который может или не может быть тем, что вы хотите, в зависимости от того, хотите ли вы переустановить указанное приложение. application*Будет соответствовать все приложения , которые начинаются с application, которые, как правило плагины, дополнительные функции и т.д. основного приложения вы удаляете. т.е.

sudo apt-get remove gedit*

устранило бы gedit, gedit-pluginsи gedit-common. Как правило, в этом нет необходимости, поскольку большинство плагинов / связанных программ зависят от основного приложения и будут автоматически удалены (или помечены для удаления) при удалении основного приложения.

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


5

Я получил несколько сообщений об ошибке при удалении пакета. Единственный способ, который я нашел, это сработало:

mv /var/lib/dpkg/info/package.* /tmp/
dpkg --remove --force-remove-reinstreq package

Я обнаружил, что, хотя с использованием только

dpkg --remove --force-remove-reinstreq package

не удаляет пакет, он показывает мне правильный путь к файлу для перемещения:

mv /var/lib/dpkg/info/package.* /tmp/

Замените пакет с вашим именем приложения. Используйте sudo в Ubuntu, станьте пользователем root в Debian.



1

Это зависит от приложения, которое вы хотите удалить. Обязательно проверяйте его зависимости перед выполнением команды yes. Когда вы удаляете что-либо из командной строки, иногда будет отображаться несколько библиотек, которые больше не нужны. Их можно удалить с помощью apt-get autoremove.

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

Если вы хотите сделать это более безопасным способом, вы всегда можете удалить его, используя только центр программного обеспечения или apt-get removenamename. Если зависимости больше не нужны, выполните apt-get autoremove позже.


Я думаю, что вся система пакетов Debian была разработана специально, чтобы не удалять пакет, если есть другие пакеты, зависящие от него. Вас могут (услужливо) спросить, хотите ли вы также удалить все зависимые пакеты, и именно здесь вы должны прочитать список пакетов, которые должны быть удалены, и я думаю, что вы пытаетесь сказать.
Xen2050

1

Я просто хотел уточнить одну вещь, которая кажется здесь источником путаницы. dpkgУтилита не знает или отслеживать пакеты зависимостей по отношению друг к другу, который был большой причиной того, что aptбыла разработана я считаю. Вы можете прочитать об этом в разделе 8.6 на этой странице FAQ по Debian GNU / Linux - Инструменты управления пакетами Debian

  • С помощью apt: Если я хотел очистить пакет A, и у него есть зависимость, называемая пакетом B, а у пакета B не было других зависимых пакетов, то пакеты A и B будут удалены. Если пакет B DID имеет другие зависимые пакеты, то будет очищен только пакет A.

  • С dpkg: какая зависимость? Вы только что сказали мне, чтобы очистить чертов
    пакет, вот что я и сделал! Плохое планирование с вашей стороны не
    является чрезвычайной ситуацией с моей стороны.

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

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --dry-run --purge

apt-get autoremove -y; apt-get --dry-run purge -y $(dpkg --list |grep '^rc' |awk '{print $2}')

Удалите, --dry-runчтобы выполнить фактическую операцию очистки, вместо того, чтобы сообщать, какие действия она бы предприняла.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.