您尚未登录。

#1 2022-03-29 18:02:06

freezai
会员
注册时间: 2011-11-20
帖子: 128

〖已解决〗到底什么是“孤立”包?

这个问题是从我想要删除一些没有用的包开始的。
我从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的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有

离线

#2 2022-03-29 18:16:44

SamLukeYes
会员
所在地: Canton, China
注册时间: 2020-07-19
帖子: 320
个人网站

Re: 〖已解决〗到底什么是“孤立”包?

你的操作有大问题。执行了 pacman -D --asdeps $(pacman -Qqe) 之后,你所有单独指定安装的软件包就都被标记为作为依赖安装的了。现在你的 pacman 数据库中关于哪些包是单独指定安装的信息已经丢失了,以后在卸载软件包的时候带 s 选项都会很危险,除非你从执行这个操作前的备份或快照中恢复,或者借助 pacman.log 和你的记忆恢复这一部分信息。

离线

#3 2022-03-29 20:04:36

freezai
会员
注册时间: 2011-11-20
帖子: 128

Re: 〖已解决〗到底什么是“孤立”包?

SamLukeYes 说:

你的操作有大问题。执行了 pacman -D --asdeps $(pacman -Qqe) 之后,你所有单独指定安装的软件包就都被标记为作为依赖安装的了。现在你的 pacman 数据库中关于哪些包是单独指定安装的信息已经丢失了,以后在卸载软件包的时候带 s 选项都会很危险,除非你从执行这个操作前的备份或快照中恢复,或者借助 pacman.log 和你的记忆恢复这一部分信息。

谢谢,那为什么用pacman -Qt命令,还是把这些包列出来呢?还是我对-Qt命令理解错了,不是把孤立的包列出来?(用-Qtdq和-Qtt列出来的包差不多)


Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有

离线

#4 2022-03-29 20:14:18

SamLukeYes
会员
所在地: Canton, China
注册时间: 2020-07-19
帖子: 320
个人网站

Re: 〖已解决〗到底什么是“孤立”包?

freezai 说:
SamLukeYes 说:

你的操作有大问题。执行了 pacman -D --asdeps $(pacman -Qqe) 之后,你所有单独指定安装的软件包就都被标记为作为依赖安装的了。现在你的 pacman 数据库中关于哪些包是单独指定安装的信息已经丢失了,以后在卸载软件包的时候带 s 选项都会很危险,除非你从执行这个操作前的备份或快照中恢复,或者借助 pacman.log 和你的记忆恢复这一部分信息。

谢谢,那为什么用pacman -Qt命令,还是把这些包列出来呢?还是我对-Qt命令理解错了,不是把孤立的包列出来?(用-Qtdq和-Qtt列出来的包差不多)

-Qt 不是把孤立包列出来,而是把“不被任何包需要的包”列出来,正常情况下其中会包括单独指定安装的包。如果一个不被任何包需要的包是作为依赖安装的,它才是孤立包。

离线

#5 2022-03-29 21:04:20

freezai
会员
注册时间: 2011-11-20
帖子: 128

Re: 〖已解决〗到底什么是“孤立”包?

SamLukeYes 说:
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的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有

离线

#6 2022-03-29 21:22:40

SamLukeYes
会员
所在地: Canton, China
注册时间: 2020-07-19
帖子: 320
个人网站

Re: 〖已解决〗到底什么是“孤立”包?

freezai 说:

也就是说,我虽然执行了 pacman -D --asdeps $(pacman -Qqe) ,只是把那些单独指定安装的包在pacman的数据库里标记为“作为依赖安装的”,但用pacman -Qt并不是看这个标记,而是看它是不是被其他包需要(就是pacman -Qi里的“Required By ”),所以即使我把这个标记改了,那些单独指定安装的包仍然会被-Qt参数列出来。我这么理解对吗?

从 pacman 的手册来看,确实是这个意思。

另外再次提醒你,能回滚的话还是尽快回滚吧。在没有正确标记单独指定安装的软件包的情况下,一些 AUR helper 或者其他包管理前端可能会产生预期之外的损坏系统的行为。

离线

#7 2022-03-29 22:16:14

freezai
会员
注册时间: 2011-11-20
帖子: 128

Re: 〖已解决〗到底什么是“孤立”包?

SamLukeYes 说:
freezai 说:

也就是说,我虽然执行了 pacman -D --asdeps $(pacman -Qqe) ,只是把那些单独指定安装的包在pacman的数据库里标记为“作为依赖安装的”,但用pacman -Qt并不是看这个标记,而是看它是不是被其他包需要(就是pacman -Qi里的“Required By ”),所以即使我把这个标记改了,那些单独指定安装的包仍然会被-Qt参数列出来。我这么理解对吗?

从 pacman 的手册来看,确实是这个意思。

另外再次提醒你,能回滚的话还是尽快回滚吧。在没有正确标记单独指定安装的软件包的情况下,一些 AUR helper 或者其他包管理前端可能会产生预期之外的损坏系统的行为。

多谢多谢

不过系统回滚是没戏了,我没有备份(的磁盘空间)。我先把home里一些重要的个人文件备份一下,要是系统出问题了大不了重新安装吧。


Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有

离线

#8 2022-03-29 22:27:52

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,446
个人网站

Re: 〖已解决〗到底什么是“孤立”包?

那我建议你自己准备一份文件,然后进行以下操作:

* pacman -Qdtt
* 挑几个你知道自己需要用的包, pacman -D --asexplicite xxx 标记上。然后在你的文件里记上这些包是需要的,并且可选地注册需要的原因
* 跳回第一步重做

当你的 pacman -Qdtt 里输出的包名你都不需要的时候,你就可以删掉它们啦。

在线

#9 2022-03-30 16:51:52

freezai
会员
注册时间: 2011-11-20
帖子: 128

Re: 〖已解决〗到底什么是“孤立”包?

依云 说:

那我建议你自己准备一份文件,然后进行以下操作:

* pacman -Qdtt
* 挑几个你知道自己需要用的包, pacman -D --asexplicite xxx 标记上。然后在你的文件里记上这些包是需要的,并且可选地注册需要的原因
* 跳回第一步重做

当你的 pacman -Qdtt 里输出的包名你都不需要的时候,你就可以删掉它们啦。

多谢,但是这其中有不少是类似lib开头的、python-开头的,那些我也不知道需不需要啊。
而且有500多个包了,只能这样一个一个的看吗?


Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有

离线

#10 2022-03-30 17:09:45

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,446
个人网站

Re: 〖已解决〗到底什么是“孤立”包?

不知道要不要的,就假定不需要,卸载了出问题再装回来,顺便记下来缺少它会出什么问题。
500个包那么少,我都快1800个包了呢。

在线

#11 2022-03-31 11:03:50

freezai
会员
注册时间: 2011-11-20
帖子: 128

Re: 〖已解决〗到底什么是“孤立”包?

依云 说:

不知道要不要的,就假定不需要,卸载了出问题再装回来,顺便记下来缺少它会出什么问题。
500个包那么少,我都快1800个包了呢。

多谢多谢

您是专业人员啊,我哪比得了。我的电脑就是上网和娱乐用的,装个浏览器和几个游戏以及一些必要的应用而已,-Qdtt出来的有那么多就算不少了 tongue tongue tongue

最近编辑记录 freezai (2022-03-31 11:04:21)


Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有

离线

#12 2022-03-31 11:58:35

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,446
个人网站

Re: 〖已解决〗到底什么是“孤立”包?

你都 -D --asdeps 了,-Qdtt 可不就多起来了么。

在线

#13 2022-03-31 17:48:05

freezai
会员
注册时间: 2011-11-20
帖子: 128

Re: 〖已解决〗到底什么是“孤立”包?

依云 说:

你都 -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的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有

离线

#14 2022-03-31 18:37:08

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,446
个人网站

Re: 〖已解决〗到底什么是“孤立”包?

freezai 说:

那我就有另一疑问了:在我尚未运行pacman -D --asdeps $(pacman -Qqe)的时候,我是先按照wiki上的这条: Removing unused packages (orphans)
的说明,首先运行的 pacman -Qtdq | pacman -Rns - (也用了一次-Qttdq),但是给我显示要删除的有上千个包啊,而且这些包里几乎包括了所有我自己安装的包(比如xorg、xfce4、firefox、hexchat这类等等)。
所以如果按照wiki上的说明来删除孤立包的话,实际上就把除了最初安装使的base、linux等基础包外,就把其他的几乎所有指定安装的包都删掉了啊。这是我理解错了吗,还是哪里除了问题?

这不对啊。正常来说 pacman -Qtdq 这个命令不会列出多少包来的。

在线

#15 2022-03-31 19:19:41

freezai
会员
注册时间: 2011-11-20
帖子: 128

Re: 〖已解决〗到底什么是“孤立”包?

依云 说:

这不对啊。正常来说 pacman -Qtdq 这个命令不会列出多少包来的。

是不是因为我这个系统是用rsycn从另一块硬盘上迁移过来的原因,但我早忘了用的什么参数了,毕竟一晃都好几年了。


Arch Linux的老小白
—“老”当总讲,就是一贯地卖年糕
—连驴打滚都没卖过
—没有

离线

页脚