NES*_*HOM 4 aptitude uninstall apt
(我可以列出超过 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
Run Code Online (Sandbox Code Playgroud)
这很好,直到最近运行它后,Qt-Creator 停止编译我的 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
Run Code Online (Sandbox Code Playgroud)
我既没有时间也没有知识去浏览这个列表,找出我真正需要的包以及可以删除的包。
我还尝试将它们全部标记为“手动”,希望这样做后,apt-get autoremove可以确定哪些是真正孤立的和不需要删除的。我用过aptitude keep-all它总是冻结。我发现这是一个应该修复的错误,但显然不是。
问题:在 Ubuntu 中删除不需要的应用程序/库的最安全方法是什么,而不需要一一检查所有软件包及其依赖项?
您的问题“在 Ubuntu 中删除不需要的应用程序/库的最安全方法,不需要一一检查所有软件包及其依赖项”的具体答案是:让 Apt 来完成它的工作。当您更好地了解 apt 如何做出决定时,您就可以做到这一点。对于大多数新用户来说,这是学习曲线的正常部分。那么让我们来讨论一下 Apt 逻辑......
Apt 不知道您是否正在使用包。这不是通灵的。它只知道每个包的依赖关系,以及你告诉它什么。为了使任何包有资格自动删除(孤立),它必须满足两个条件:
auto(而不是manual)manual包直接或间接依赖于包。有三种复杂的行为让用户感到困惑。
Apt 会记住您明确安装的软件包并标记这些软件包manual。所有其他依赖项都标记为auto。
Ubuntu 安装程序在全新安装时标记所有初始包manual。这是为了防止新手不小心移除他们系统的巨大板块。
由于一些 Ubuntu script-fu,内核包的运行方式略有不同。
就是这样 - 两个规则和三个特殊行为。其他一切都是简单的旧逻辑。
让我们看几个常见的例子,看看这些规则和行为是如何应用的。
示例#1:sudo apt install foo libfoo
很明显,任何被调用的东西libfoo都可能是foo. apt 也知道这一点。但是,我们明确告诉 apt 安装libfoo- 它将被标记为manual,并且不符合自动删除的条件。如果我们改为只说sudo apt install foo并让 apt 计算依赖项,那么libfoo将被(正确)标记auto并在foo被删除时有资格自动删除。
示例#2:sudo apt remove ubuntu-desktop
如果您从最小映像构建 Ubuntu 系统,或者如果您在初始安装后安装 LAMP 堆栈或新的桌面环境,那么 Metapackages 之类ubuntu-desktop的非常棒 - 整个堆栈在一个命令中。但是从 apt 的角度来看:单个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
Run Code Online (Sandbox Code Playgroud)
请记住,apt-marking 只是告诉 apt 哪些包是您的顶级应用程序不符合自动删除的条件 - 它并不能保护它们免受人类的愚蠢行为。
对于大多数人来说,浏览自动删除列表的简单方法是简单地查找顶级关键应用程序包 - 您的电子邮件客户端、您的 Web 浏览器、您的 IDE、您最喜欢的游戏。寻找foo,忽略libfoo。当一个人溜走并被移除时,只需重新安装它 - 请记住,告诉系统安装一个软件包会标记它manual。但是,由于您编译软件并使用-dev包,因此您的特定用例更加复杂。没有适合您的神奇解决方案(抱歉)-您必须花时间了解哪些软件包对您很重要……就像我们其他人一样。
警告:所有这些都适用于来自 Ubuntu 存储库的 deb 包。如果你从其他地方添加了很多奇怪的包,那么你必须做更多的包内务处理。请记住,apt 不了解或控制 pip、snap、flatpack、appimage 软件、下载的二进制文件或脚本或编译代码。
| 归档时间: |
|
| 查看次数: |
2273 次 |
| 最近记录: |