这个问题是从我想要删除一些没有用的包开始的。
我从wiki上看到递归删除“孤立包”的命令是
# pacman -Qtdq | pacman -Rns -
但当我运行这个命令之后,我发现系统要把几乎所有明确安装的包都删掉,例如xorg组里的包、xfce4组里的包、firefox等等一看就不应该删的包。而且删除的体积大约是18个G,我archlinux分区里如果不算home,也就20多G,如果连/opt也不算的话,勉强20个G,所以从体积上看也是包括了大多数安装包的。我担心自己命令输入有误,又试了几次,包括直接复制wiki里的命令尝试,结果都是一样的。然后我紧接着在后面看到一个命令,就是
# pacman -D --asdeps $(pacman -Qqe)
其实这个命令是在“Removing everything but essential packages”条目下的,但是我当时错误的理解了“essential packages”的含义。也是因为上面阐述的问题,让我错误理解了“孤立”包的含义——当时我认为只要安装原因不是“作为依赖安装”且不被其他软件包依赖的,都是孤立包,那明确指定安装的包肯定是符合“孤立包”的含义了,所以要先把明确指定安装的包改成作为依赖安装,这样就“可以”了。后面的事情就是原帖说明的了。
感谢SamLukeYes和依云的帮助,我正确理解了命令和“孤立”包的含义,也通过pacman.log里的记录把安装原因改回来了。
但就是这一来一回的更改包安装原因之后,一开始那个“运行pacman -Qtdq | pacman -Rns -会删除所有明确指定安装包“的问题莫名奇妙的就消失了,再运行时只删除了大概40来个包,几百M大小,没有一个是我明确指定安装的包。
虽然不知道怎么就解决了,但总算是解决了。
PS: 空间不足的问题是靠pacman -Scc和删掉一些看过的视频解决的。
==============================================================分割线========================================================================
最近觉得archlinux的分区有点儿紧张了,想删掉一些没用的包。网上搜了一下,看有人说“孤立”的包可以删掉。
但是我用pacman -Qtdq列了一下,发现它给我列出了几乎所有的安装包,然后我有趣wiki上看了一下,说要用pacman -D --asdeps $(pacman -Qqe)命令把所有明确安装的包变成“依赖”关系,再看哪些包是孤立的。
我运行了命令之后,确实显示大量的安装包被设置成“作为依赖安装”了,但我再运行pacman -Qtdq时,还是给我列出几乎全部的安装包。
我还安装了一个pamac,用它看,除了它自己不是孤立包之外,其他都是孤立包……
这是咋回事?还是我操作有啥问题?
谢谢大家。
最近编辑记录 freezai (2022-04-03 15:07:32)
Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有
离线
你的操作有大问题。执行了 pacman -D --asdeps $(pacman -Qqe) 之后,你所有单独指定安装的软件包就都被标记为作为依赖安装的了。现在你的 pacman 数据库中关于哪些包是单独指定安装的信息已经丢失了,以后在卸载软件包的时候带 s 选项都会很危险,除非你从执行这个操作前的备份或快照中恢复,或者借助 pacman.log 和你的记忆恢复这一部分信息。
离线
你的操作有大问题。执行了 pacman -D --asdeps $(pacman -Qqe) 之后,你所有单独指定安装的软件包就都被标记为作为依赖安装的了。现在你的 pacman 数据库中关于哪些包是单独指定安装的信息已经丢失了,以后在卸载软件包的时候带 s 选项都会很危险,除非你从执行这个操作前的备份或快照中恢复,或者借助 pacman.log 和你的记忆恢复这一部分信息。
谢谢,那为什么用pacman -Qt命令,还是把这些包列出来呢?还是我对-Qt命令理解错了,不是把孤立的包列出来?(用-Qtdq和-Qtt列出来的包差不多)
Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有
离线
SamLukeYes 说:你的操作有大问题。执行了 pacman -D --asdeps $(pacman -Qqe) 之后,你所有单独指定安装的软件包就都被标记为作为依赖安装的了。现在你的 pacman 数据库中关于哪些包是单独指定安装的信息已经丢失了,以后在卸载软件包的时候带 s 选项都会很危险,除非你从执行这个操作前的备份或快照中恢复,或者借助 pacman.log 和你的记忆恢复这一部分信息。
谢谢,那为什么用pacman -Qt命令,还是把这些包列出来呢?还是我对-Qt命令理解错了,不是把孤立的包列出来?(用-Qtdq和-Qtt列出来的包差不多)
-Qt 不是把孤立包列出来,而是把“不被任何包需要的包”列出来,正常情况下其中会包括单独指定安装的包。如果一个不被任何包需要的包是作为依赖安装的,它才是孤立包。
离线
freezai 说:SamLukeYes 说:你的操作有大问题。执行了 pacman -D --asdeps $(pacman -Qqe) 之后,你所有单独指定安装的软件包就都被标记为作为依赖安装的了。现在你的 pacman 数据库中关于哪些包是单独指定安装的信息已经丢失了,以后在卸载软件包的时候带 s 选项都会很危险,除非你从执行这个操作前的备份或快照中恢复,或者借助 pacman.log 和你的记忆恢复这一部分信息。
谢谢,那为什么用pacman -Qt命令,还是把这些包列出来呢?还是我对-Qt命令理解错了,不是把孤立的包列出来?(用-Qtdq和-Qtt列出来的包差不多)
-Qt 不是把孤立包列出来,而是把“不被任何包需要的包”列出来,正常情况下其中会包括单独指定安装的包。如果一个不被任何包需要的包是作为依赖安装的,它才是孤立包。
感谢,原来是这样啊。
也就是说,我虽然执行了 pacman -D --asdeps $(pacman -Qqe) ,只是把那些单独指定安装的包在pacman的数据库里标记为“作为依赖安装的”,但用pacman -Qt并不是看这个标记,而是看它是不是被其他包需要(就是pacman -Qi里的“Required By ”),所以即使我把这个标记改了,那些单独指定安装的包仍然会被-Qt参数列出来。我这么理解对吗?
Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有
离线
也就是说,我虽然执行了 pacman -D --asdeps $(pacman -Qqe) ,只是把那些单独指定安装的包在pacman的数据库里标记为“作为依赖安装的”,但用pacman -Qt并不是看这个标记,而是看它是不是被其他包需要(就是pacman -Qi里的“Required By ”),所以即使我把这个标记改了,那些单独指定安装的包仍然会被-Qt参数列出来。我这么理解对吗?
从 pacman 的手册来看,确实是这个意思。
另外再次提醒你,能回滚的话还是尽快回滚吧。在没有正确标记单独指定安装的软件包的情况下,一些 AUR helper 或者其他包管理前端可能会产生预期之外的损坏系统的行为。
离线
freezai 说:也就是说,我虽然执行了 pacman -D --asdeps $(pacman -Qqe) ,只是把那些单独指定安装的包在pacman的数据库里标记为“作为依赖安装的”,但用pacman -Qt并不是看这个标记,而是看它是不是被其他包需要(就是pacman -Qi里的“Required By ”),所以即使我把这个标记改了,那些单独指定安装的包仍然会被-Qt参数列出来。我这么理解对吗?
从 pacman 的手册来看,确实是这个意思。
另外再次提醒你,能回滚的话还是尽快回滚吧。在没有正确标记单独指定安装的软件包的情况下,一些 AUR helper 或者其他包管理前端可能会产生预期之外的损坏系统的行为。
多谢多谢
不过系统回滚是没戏了,我没有备份(的磁盘空间)。我先把home里一些重要的个人文件备份一下,要是系统出问题了大不了重新安装吧。
Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有
离线
那我建议你自己准备一份文件,然后进行以下操作:
* pacman -Qdtt
* 挑几个你知道自己需要用的包, pacman -D --asexplicite xxx 标记上。然后在你的文件里记上这些包是需要的,并且可选地注册需要的原因
* 跳回第一步重做
当你的 pacman -Qdtt 里输出的包名你都不需要的时候,你就可以删掉它们啦。
离线
那我建议你自己准备一份文件,然后进行以下操作:
* pacman -Qdtt
* 挑几个你知道自己需要用的包, pacman -D --asexplicite xxx 标记上。然后在你的文件里记上这些包是需要的,并且可选地注册需要的原因
* 跳回第一步重做当你的 pacman -Qdtt 里输出的包名你都不需要的时候,你就可以删掉它们啦。
多谢,但是这其中有不少是类似lib开头的、python-开头的,那些我也不知道需不需要啊。
而且有500多个包了,只能这样一个一个的看吗?
Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有
离线
不知道要不要的,就假定不需要,卸载了出问题再装回来,顺便记下来缺少它会出什么问题。
500个包那么少,我都快1800个包了呢。
离线
不知道要不要的,就假定不需要,卸载了出问题再装回来,顺便记下来缺少它会出什么问题。
500个包那么少,我都快1800个包了呢。
多谢多谢
您是专业人员啊,我哪比得了。我的电脑就是上网和娱乐用的,装个浏览器和几个游戏以及一些必要的应用而已,-Qdtt出来的有那么多就算不少了
最近编辑记录 freezai (2022-03-31 11:04:21)
Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有
离线
你都 -D --asdeps 了,-Qdtt 可不就多起来了么。
离线
你都 -D --asdeps 了,-Qdtt 可不就多起来了么。
这倒是。
那我就有另一疑问了:在我尚未运行pacman -D --asdeps $(pacman -Qqe)的时候,我是先按照wiki上的这条: Removing unused packages (orphans)
的说明,首先运行的 pacman -Qtdq | pacman -Rns - (也用了一次-Qttdq),但是给我显示要删除的有上千个包啊,而且这些包里几乎包括了所有我自己安装的包(比如xorg、xfce4、firefox、hexchat这类等等)。
所以如果按照wiki上的说明来删除孤立包的话,实际上就把除了最初安装使的base、linux等基础包外,就把其他的几乎所有指定安装的包都删掉了啊。这是我理解错了吗,还是哪里除了问题?
Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有
离线
那我就有另一疑问了:在我尚未运行pacman -D --asdeps $(pacman -Qqe)的时候,我是先按照wiki上的这条: Removing unused packages (orphans)
的说明,首先运行的 pacman -Qtdq | pacman -Rns - (也用了一次-Qttdq),但是给我显示要删除的有上千个包啊,而且这些包里几乎包括了所有我自己安装的包(比如xorg、xfce4、firefox、hexchat这类等等)。
所以如果按照wiki上的说明来删除孤立包的话,实际上就把除了最初安装使的base、linux等基础包外,就把其他的几乎所有指定安装的包都删掉了啊。这是我理解错了吗,还是哪里除了问题?
这不对啊。正常来说 pacman -Qtdq 这个命令不会列出多少包来的。
离线
这不对啊。正常来说 pacman -Qtdq 这个命令不会列出多少包来的。
是不是因为我这个系统是用rsycn从另一块硬盘上迁移过来的原因,但我早忘了用的什么参数了,毕竟一晃都好几年了。
Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有
离线