您尚未登录。

#1 2022-09-16 00:50:43

Nirlvy
会员
注册时间: 2022-07-06
帖子: 57

关于pacman的一些问题

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貌似不会显示被依赖的包。

离线

#2 2022-09-16 10:30:23

sukanka
会员
所在地: Amoy, China
注册时间: 2020-04-05
帖子: 170
个人网站

Re: 关于pacman的一些问题

1. 没有,除非你手动,因为 pacman 不知道应用在你家目录创建了哪些文件
2. Ru 的解释蛮清楚的, Remove unneeded packages, 就移除不需要的包了
3. 我一般使用 `pacman -Rsc $(pacman -Qtdq)` 或者 `paru -c` 后面那个问题我想不起来为什么了。
4. 建议使用 pacman -Rsc foo

离线

#3 2022-09-16 10:33:31

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

Re: 关于pacman的一些问题

1. 因为这个是程序的行为,包管理器管不到。
2. -u 就是 --unneeded 啊,只卸载安装原因为「作为依赖安装」的包
3. 后者后一个 pacman 的 stdin 被占用,pacman 问你问题不是你来回答,而是管道前边那个程序
4. 你可以 -Rs。注意看列表里有没有你需要的包。

离线

#4 2022-09-16 10:59:42

Watermelon.Rei
会员
注册时间: 2021-12-29
帖子: 114

Re: 关于pacman的一些问题

对于第一个问题,这个我没有什么好办法。




对于第二个问题: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

crJFX.png

-n --nosave 用于移除配置文件,这里的配置文件由包指定,可以通过

pacman -Qii

查看

cr2zy.png

-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)

离线

#5 2022-09-16 19:52:12

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

Re: 关于pacman的一些问题

哦,原来楼主的 pacman 管道命令最后没加 - 啊……加了那个是可以从 stdin 读包名列表的,但是容易与交互冲突。

离线

#6 2022-09-18 12:03:29

nibazshab
会员
注册时间: 2022-02-04
帖子: 137

Re: 关于pacman的一些问题

第四个问题,并不需要 -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)

离线

#7 2022-09-18 13:19:42

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

Re: 关于pacman的一些问题

但是你 -dd 之后软件会出问题啊,下次更新说不定还会回来。

离线

#8 2022-09-18 17:18:29

nibazshab
会员
注册时间: 2022-02-04
帖子: 137

Re: 关于pacman的一些问题

依云 说:

但是你 -dd 之后软件会出问题啊,下次更新说不定还会回来。

但是 -dd 确实满足了楼主的要求,虽然这个方法并不是一个好方法

离线

#9 2022-09-19 15:14:59

Nirlvy
会员
注册时间: 2022-07-06
帖子: 57

Re: 关于pacman的一些问题

感谢各位大佬回答

离线

页脚