(Я могу перечислить больше чем 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, которая не включает проверку всех пакетов и их зависимостей один за другим?
Определенный ответ на Ваш вопрос "самый безопасный подход для удаления нежелательных приложений/библиотек в Ubuntu, которая не включает проверку всех пакетов и их зависимостей один за другим": Позвольте Кв. сделать, это - задание. Можно сделать это, когда Вы лучше понимаете, как склонный делает, это - решения. Для самых новых пользователей это - нормальная часть кривой обучения. Поэтому давайте обсудим логику Кв....
Кв. понятия не имеет, используете ли Вы пакет или нет. Это не экстрасенс. Это только знает зависимости каждого пакета, и что Вы говорите этому. Для любого пакета для имения право на (осиротевшее) автоудаление это должно соответствовать двум критериям:
auto
(вместо manual
)manual
пакет зависит - прямо или косвенно - на пакет.Существует три усложняющих поведения, которые смущают пользователей.
Apt помнит, который упаковывает Вас, явно устанавливают, и отмечает те пакеты manual
. Все другие зависимости отмечены auto
.
Установщик Ubuntu отмечает ВСЕ начальные пакеты на новой установке manual
. Это должно сохранить новых людей от случайного удаления огромных плит их системы.
Пакеты ядра работают немного по-другому из-за небольшого количества сценария-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 программное обеспечение, загруженные двоичные файлы или сценарии или скомпилированный код.