我们如何使用 pacman 更新某些特定的软件包?
例如,我们如何仅更新包(使用正则表达式语法) py.+ 为:
$ sudo pacman -S 'py.+'
error: target not found: py.+
不起作用
请帮忙,提前致谢
答案1
请注意,在 Arch Linux 上,不支持部分升级;您应该始终立即升级整个系统(pacman -Syu
)并在安装新软件包时升级整个系统()。将安装以下版本pacman -Syu package
pacman -S package
package
当前位于您的同步数据库中,可能会重新安装已安装的版本。
pacman -Sy
接下来将更新同步数据库,然后安装最新版本pacman -S package
package
及其依赖项,可能会破坏依赖于后者旧版本的其他已安装软件包。
正如上面链接的 wiki 页面中所述,pacman -Syuw
紧随其后也不是解决方案。pacman -S package
也就是说,基于拱门维基,提供pacman
包列表作为参数的常见方法是使用另一个pacman
实例生成它。例如,要获取有关名称的已安装软件包列表的详细信息或描述1py
以(但不只是)开头py
,过滤掉外来的:
pacman -Qsq '^py[^ ]+$' | xargs pacman -Qnq | xargs -o pacman -Si
wherexargs
用于避免“参数列表太长”错误。
在处理包名称时,假设它们不包含空格、引号、通配符或其他不常见的字符是安全的。否则,不加引号的命令替换可能是一个坏主意2;只需确保 的值IFS
不包含包名称中可能出现的任何字符。
非标准xargs
选项-o
(通常在 Arch Linux 上可用,默认情况下提供其 GNU 实现),它告诉xargs
重新打开标准输入并使其可用于执行的命令,在运行需要用户交互的命令/dev/tty
时是必要的(尽管pacman
在上面的例子中实际上并不需要)。
或者,如果您确信搜索返回的包数量会很小,您可以使用嵌套命令替换:
pacman -Si $(pacman -Qnq $(pacman -Qsq '^py[^ ]+$'))
1 可能需要其他实用程序来执行正则表达式搜索名字仅,例如pacsift
(来自帕西里斯) 或者expac
。请注意,pacman
搜索选项还会检查包的“提供”字段。
2 参见什么时候需要双引号?,为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?和忘记在 bash/POSIX shell 中引用变量的安全隐患。
答案2
它是受支持的,您可以只使用 --ignore package1,package2 并忽略所有内容
所以 sudo 或 doas pacman -Syu --ignore vim,firefox,linux