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


Я искал сеть для такой информации и нашел разные командные строки, например:

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)

478
2017-09-14 21:54


происхождения


На некоторые из ваших вопросов можно ответить в этом сообщении: askubuntu.com/questions/1143/how-can-i-uninstall-software - Glutanimate
application* могут иногда давать неожиданные результаты - например, если у вас есть файл в текущем каталоге с именем application_information, оболочка будет расширять его до того, как будет передана apt-get. Если это происходит, и вам нужна буквальная звездочка, вы можете использовать application\* или 'application*' - Izkata
application* еще более опасен, если в текущем каталоге нет файлов: apt-get использует регулярные выражения, шаблоны glob. Люди почти уничтожили всю систему, пытающуюся удалить wine*, - Andrea Corbellini
Можете ли вы принять ответ? Быть благодарным людям, которые вам ответили. - m-ric
ни application* ни application\* безопасно! квотирование * с \ или '  ' только увеличивается риск, обеспечивающий * передается как есть apt-get (хотя это обычно так или иначе!), причины apt-get интерпретировать аргумент как регулярное выражение. В регулярном выражении * означает «ноль или более предыдущего символа». Общей формой ошибки является удаление wine*, удаляя все пакеты с помощью win (не wine, win) в любом месте в их именах и всех пакетах в зависимости от любого из них. Видеть это объяснение а также возможные исправления, @Izkata - Eliah Kagan


ответы:


  • apt-get remove packagename

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

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

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

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

  • apt-get autoremove

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

  • aptitude remove packagename или aptitude purge packagename (Также)

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

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

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

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

sudo apt-get remove application*

заключается в следующем:

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

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

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

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

 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

638
2017-09-14 22:04



Опция -purge также удобна при попытке полностью удалить любые остальные зависимости, включая их файлы конфигурации: apt-get-autoremove --purge  Также важно отметить, что параметры конфигурации в вашем домашнем каталоге не зависят от опции -purge. Это вам нужно будет удалить вручную. - Glutanimate
Здесь была ошибка: apt-get принимает RE, а не globs; поэтому apt-get remove pack * удалит все пакеты, которые начинаются с pac, за которым следуют ноль или более k ... что обычно является неожиданным. Я редактировал anser. Смотрите также askubuntu.com/questions/210976/... - Rmano
Я думаю, что этот ответ больше не точен. Или apt remove -s texlive* или его apt-get обратные линии обратной связи, такие как Note, selecting 'texlive-font-utils' for glob 'texlive*' (подразумевая, что они действительно принимают глобусы), за которым следует обычное Package 'texlive-common' is not installed, so not removed, и наконец Remv линий, таких как Remv texlive-font-utils [2015.20160320-1] [...], - Jonathan Y.
@JonathanY. Вы также должны выбрать не установленные пакеты. Во всяком случае, не могли бы вы задать новый вопрос и подробнее рассказать о своей ситуации в вопросе. Я был бы рад посмотреть на это :) - gertvdijk
Я не задаю новый вопрос. Я указываю на возможное изменение, поскольку этот ответ был сделан, что делает некоторые детали неверными. Разумеется, казалось бы, что apt-get remove packa* действительно принимает глобус packa* вместо того, чтобы смотреть на него как на регулярное выражение: он соответствует package но нет pack, - Jonathan Y.


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

sudo apt-get --purge autoremove packagename

Как подробно Вот,

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


92
2017-11-20 20:01



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


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

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

17
2017-09-16 20:08



Хотя вы правы, но можно также использовать sudo apt-get --purge autoremove packagename, Та же 1 команда здесь - Anwar
Может ли полная команда также записываться как apt-get autoremove --purge вместо apt-get purge --auto-remove ? - felwithe
Может кто-нибудь, пожалуйста, застрелите меня? - Martin Andersson


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

sudo apt-get remove gedit*

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

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


7
2017-09-14 22:05





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

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.


5
2018-02-26 09:26





Я нашел эту команду в Интернете.

dpkg --purge --force-depends application

http://www.debian-administration.org/article/Reinstalling_packages_to_fix_problems,


3
2017-09-14 22:10





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

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

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


1
2017-09-14 22:10



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


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


1
2017-08-23 23:32