Как иметь дело с 'Кв. - добираются, автоудаляют' в Ubuntu

(Я могу перечислить больше чем 20 страниц с видом подобных вопросов/проблем. Но, я не мог найти решение. Так, терпите меня прежде, чем отметить это как дубликат.)

Это были почти три недели, которые я переключил от Windows до Linux (Ubuntu). Я пытался найти правильные инструменты для своих приложений. Так, я пробовал много различных приложений в Linux. В результате я установил/удалил большое использование приложений apt-get.

После одного из них устанавливают/удаляют команды, apt-get предложенный работать apt-get autoremove команда. Я сделал так, и затем я понял, что это также удалило некоторые мои настольные приложения и вид моей настольной среды, полностью измененной. Поскольку я не опытен в Linux, я закончил тем, что провел время и переустановил его!

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

sudo deborphan --guess-all | xargs sudo apt-get -y remove --purge

Это было очень хорошо до недавно, что после выполнения его, Спокойный Создатель прекратил компилировать мой код C++ с ошибкой cannot find -lGL. Это было очень хорошо правильно перед использованием deborphan. К счастью я смог зафиксировать его путем переустановки libgl1-mesa-dev пакет.

Так, это, к сожалению, было также концом моего доверия deborphan.

Теперь, после нескольких дней использования ни одного из apt-get autoremove ни deborphan, вот является длинный список пакетов этим apt предлагает для удаления:

 0 upgraded, 0 newly installed, 79 to remove and 0 not upgraded.> The following packages will be REMOVED:   fonts-wine
 geany-plugins-common gir1.2-evince-3.0 gir1.2-gconf-2.0
 gir1.2-nautilus-3.0 gir1.2-poppler-0.18 libboost-atomic1.62-dev  
 libboost-atomic1.62.0 libboost-chrono1.62-dev libboost-chrono1.62.0
 libboost-context1.62-dev libboost-context1.62.0  
 libboost-coroutine1.62-dev libboost-coroutine1.62.0
 libboost-date-time1.62-dev libboost-date-time1.62.0
 libboost-exception1.62-dev   libboost-fiber1.62-dev
 libboost-fiber1.62.0 libboost-filesystem1.62-dev
 libboost-graph-parallel1.62-dev libboost-graph-parallel1.62.0  
 libboost-graph1.62-dev libboost-graph1.62.0 libboost-iostreams1.62-dev
 libboost-locale1.62-dev libboost-locale1.62.0   libboost-log1.62-dev
 libboost-log1.62.0 libboost-math1.62-dev libboost-math1.62.0
 libboost-mpi-python1.62-dev libboost-mpi-python1.62.0  
 libboost-mpi1.62-dev libboost-mpi1.62.0
 libboost-program-options1.62-dev libboost-program-options1.62.0
 libboost-python1.62-dev   libboost-python1.62.0
 libboost-random1.62-dev libboost-regex1.62-dev
 libboost-serialization1.62-dev libboost-serialization1.62.0  
 libboost-signals1.62-dev libboost-signals1.62.0
 libboost-system1.62-dev libboost-test1.62-dev libboost-test1.62.0  
 libboost-thread1.62-dev libboost-timer1.62-dev libboost-timer1.62.0
 libboost-type-erasure1.62-dev libboost-type-erasure1.62.0  
 libboost-wave1.62-dev libboost-wave1.62.0 libboost1.62-dev
 libboost1.62-tools-dev libhwloc-dev libibverbs-dev libieee1284-3:i386 
 libnuma-dev libopenmpi-dev libpython3-dev libpython3.6-dev libwine
 libwine:i386 linux-headers-4.13.0-21 linux-headers-4.13.0-21-generic  
 linux-image-4.13.0-21-generic linux-image-extra-4.13.0-21-generic
 mc-data mpi-default-dev ocl-icd-libopencl1:i386 python-glade2         
 python3-dev python3.6-dev thunderbird-locale-en wine32:i386 wine64

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

Я также пытался отметить их всех как "руководство" с надеждой это после выполнения так, apt-get autoremove может определить, которые являются действительно висячей строкой и нежелательный, чтобы быть удаленными. Я использовал aptitude keep-all и всегда замораживается. Я нашел, что это - ошибка, которая, как предполагают, была зафиксирована, но по-видимому не.

Вопрос: Что самый безопасный подход должен удалить нежелательные приложения/библиотеки в Ubuntu, которая не включает проверку всех пакетов и их зависимостей один за другим?

3
задан 12 March 2018 в 05:31

1 ответ

Правила для автоудаления на самом деле довольно просты.

Определенный ответ на Ваш вопрос "самый безопасный подход для удаления нежелательных приложений/библиотек в Ubuntu, которая не включает проверку всех пакетов и их зависимостей один за другим": Позвольте Кв. сделать, это - задание. Можно сделать это, когда Вы лучше понимаете, как склонный делает, это - решения. Для самых новых пользователей это - нормальная часть кривой обучения. Поэтому давайте обсудим логику Кв....

Кв. понятия не имеет, используете ли Вы пакет или нет. Это не экстрасенс. Это только знает зависимости каждого пакета, и что Вы говорите этому. Для любого пакета для имения право на (осиротевшее) автоудаление это должно соответствовать двум критериям:

  1. Это должно быть способно отмечено как auto (вместо manual)
  2. Нет manual пакет зависит - прямо или косвенно - на пакет.

Существует три усложняющих поведения, которые смущают пользователей.

  1. Apt помнит, который упаковывает Вас, явно устанавливают, и отмечает те пакеты manual. Все другие зависимости отмечены auto.

  2. Установщик Ubuntu отмечает ВСЕ начальные пакеты на новой установке manual. Это должно сохранить новых людей от случайного удаления огромных плит их системы.

  3. Пакеты ядра работают немного по-другому из-за небольшого количества сценария-fu Ubuntu.

Вот именно - два правила и три специальных поведения. Все остальное - простая логика.

Давайте посмотрим на пару типичных примеров, чтобы видеть, как те правила и поведения применяются.

Пример № 1: sudo apt install foo libfoo

Довольно очевидно что что-либо позвонившее libfoo вероятно, зависимость foo. И склонный знает это, также. Однако мы явно сказали склонный установить libfoo - это будет отмечено manual, и не будет иметь право на автоудаление. Мы вместо этого сказали только sudo apt install foo и позвольте склонный, вычисляют зависимости, затем libfoo был бы (правильно) отмечен auto и стал бы имеющим право на автоудаление когда foo удален.

Пример № 2: sudo apt remove ubuntu-desktop

Если Вы создаете систему Ubuntu из минимального изображения, или если Вы устанавливаете стопки ЛАМПЫ или новые Настольные среды после начальной установки, то Метапакеты как ubuntu-desktop являются большими - целый стек в одной команде. Но посмотрите на него с точки зрения Кв.: сингл manual пакет и десятки (сотен) auto зависимости. Момент Вы удаляете метапакет из-за попытки другого приложения... хорошо, Вы получаете идею.

Выход должен просто отметить Ваши ключевые приложения верхнего уровня как manual:

sudo apt install foo       // Even if foo is already installed
sudo apt-mark manual foo   // Does the same thing
sudo apt-mark auto libfoo  // Makes libfoo eligible for autoremoval someday when foo gets removed
sudo apt remove foo        // Apt will remove foo *regardless* of apt-mark

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

Простой способ просмотреть список автоудаления для большинства людей состоит в том, чтобы просто искать пакеты ключевого приложения верхнего уровня - Ваш почтовый клиент, Ваш веб-браузер, Ваш IDE, Ваша любимая игра. Искать foo, проигнорировать libfoo. Когда каждый действительно проносится и удален, просто переустанавливает, это - помнит, что сообщение системы установить пакет отмечает его manual. Однако Ваш конкретный вариант использования более сложен, так как Вы компилируете программное обеспечение и использование -dev пакеты. Нет никакого волшебного решения для Вас (извините) - необходимо не торопиться для изучения, какие пакеты важны для Вас... точно так же, как остальная часть нас сделала.

Протест: Все это относится к deb пакетам от репозиториев Ubuntu. Если Вы еще добавляете много странных пакетов от где-нибудь, то существует больше обслуживания пакета, которое необходимо сделать. Помните, что склонный не знает о, ни управление зернышком, снимком, плоским корпусом, appimage программное обеспечение, загруженные двоичные файлы или сценарии или скомпилированный код.

4
ответ дан 1 December 2019 в 15:50

Другие вопросы по тегам:

Похожие вопросы: