页次: 1
1:pacman的卸载选择中的参数n会不保留.pacsave(实际上我卸载命令一直用的Rns),但是并不会删除~/.config目录下的配置文件(wiki也写了:pacman 不会删除软件自己创建的文件(例如主目录中的“点文件”不会被删除。)),虽然大部分时间没有什么影响,但是前不久就遇到了一次问题:准备抛弃chrome改用edge,结果一直显示无法同步,看了下一直连接不到同步服务器,设了hosts也没用,结果把很久以前留下的配置文件删除了就行了。所以有没有办法卸载的时候删除config文件。
2:pacman -Ru的含义是什么,wiki的解释看的不是太懂,目前自己的理解是Rs是卸载软件包组的比如说abc,其中b是c的依赖,按顺序卸载b就不会被卸载?不太明白。
3:上一个问题的延续,目前卸载不被其他包依赖的依赖包使用的命令是pacman -Rns $(pacman -Qtdq)不能使用pacman -Qtdq | pacman -Rns不明白为什么。
4:如果我想卸载一个包,但是它是另一个软件的依赖,只能循环去尝试删除它被依赖的包吗?pactree package_name貌似不会显示被依赖的包。
离线
1. 没有,除非你手动,因为 pacman 不知道应用在你家目录创建了哪些文件
2. Ru 的解释蛮清楚的, Remove unneeded packages, 就移除不需要的包了
3. 我一般使用 `pacman -Rsc $(pacman -Qtdq)` 或者 `paru -c` 后面那个问题我想不起来为什么了。
4. 建议使用 pacman -Rsc foo
离线
1. 因为这个是程序的行为,包管理器管不到。
2. -u 就是 --unneeded 啊,只卸载安装原因为「作为依赖安装」的包
3. 后者后一个 pacman 的 stdin 被占用,pacman 问你问题不是你来回答,而是管道前边那个程序
4. 你可以 -Rs。注意看列表里有没有你需要的包。
离线
对于第一个问题,这个我没有什么好办法。
对于第二个问题:https://man.archlinux.org/man/pacman.8
假设有五个包A,B,C,D,E 依赖关系为A->B->C->D, E为孤包
和-R搭配的选项一共有四个:
-c --cascade 移除指定的包及依赖这些的包,如果
pacman -Rc B
,则移除B,并且移除依赖B的C,依赖C的D
-n --nosave 用于移除配置文件,这里的配置文件由包指定,可以通过
pacman -Qii
查看
-s --recursive 移除指定的包及其依赖的包,如果
pacman -Rs C
,则移除C依赖的B,和B依赖的A,但是现在C被D依赖,会失败
-u --unneeded (这个选项我不确定我的理解是正确的,我做了几个实验确保我后面的陈述没有问题)移除不被其它包依赖的包,如果
pacman -Ru C
,C被D依赖,C不会被移除;
pacman -Ru D E
,D,E都是未被依赖的包,可以被移除(查询未被依赖的包可以通过pacman -Qt);
pacman -Ru C D
D移除后C变成了未被依赖的包,同时也会移除C
对于第三个问题,pacman -R 需要后续参数确定需要移除的包,不支持标准输入,$(pacman -Qtdq)查找了所有安装时标记为被依赖的状态,但是目前未被依赖的包,这些结果作为pacman -Rns的参数传入。如果想要使用pipe通过标准输入传递结果,使用pacman -Qtdq | xargs pacman -Rns
抱歉,上面的命令是没有办法交互的,不要用
我没有仔细看Manual,开头直接告诉非terminal传入的stdin是可以添加“-”传入的
Invoking pacman involves specifying an operation with any potential options and targets to operate on. A target is usually a package name, file name, URL, or a search string. Targets can be provided as command line arguments. Additionally, if stdin is not from a terminal and a single hyphen (-) is passed as an argument, targets will be read from stdin.
pacman -Qtdq | pacman -Rns -
第四个问题,已经告诉你解决办法了,-c
最近编辑记录 Watermelon.Rei (2022-09-19 16:03:07)
离线
哦,原来楼主的 pacman 管道命令最后没加 - 啊……加了那个是可以从 stdin 读包名列表的,但是容易与交互冲突。
离线
第四个问题,并不需要 -c 参数卸载其他的包,加个 -dd 参数就好了
例如 archlinux-keyring 被 base 所依赖
> yay -Rs archlinux-keyring
正在检查依赖关系...
错误:无法准备事务处理 (无法满足依赖关系)
:: 删除 archlinux-keyring 破坏依赖 'archlinux-keyring' (archlinuxcn-keyring 需要)
:: 删除 archlinux-keyring 破坏依赖 'archlinux-keyring' (base 需要)
-> exit status 1
加上两个 d 参数
> yay -Rdds archlinux-keyring
软件包 (1) archlinux-keyring-20220831-1
全部移去体积: 1.57 MiB
:: 打算删除这些软件包吗? [Y/n] n
-> exit status 1
第三个问题,在后面加上一个 - 字符
> yay -Qqs archlinux-keyring | yay -Rs
错误:没有指定目标 (使用 -h 获取帮助)
-> exit status 1
> yay -Qqs archlinux-keyring | yay -Rs -
正在检查依赖关系...
错误:无法准备事务处理 (无法满足依赖关系)
:: 删除 archlinux-keyring 破坏依赖 'archlinux-keyring' (archlinuxcn-keyring 需要)
:: 删除 archlinux-keyring 破坏依赖 'archlinux-keyring' (base 需要)
-> exit status 1
最近编辑记录 nibazshab (2022-09-18 12:07:58)
离线
但是你 -dd 之后软件会出问题啊,下次更新说不定还会回来。
离线
但是你 -dd 之后软件会出问题啊,下次更新说不定还会回来。
但是 -dd 确实满足了楼主的要求,虽然这个方法并不是一个好方法
离线
感谢各位大佬回答
离线
页次: 1