为什么80%的码农都做不了架构师?>>>
package: /path/to/file exists in filesystem Errors occurred, no packages were upgraded.
不知道干了什么之后,只要通过pacman -Sy 安装(譬如安装sudo 还有mutt)都会报上述的错误。摸了一个晚上都解决不了。后来查看wiki,说明如下:
pacman 检测到文件冲突,而且按照设计,pacman 不会覆盖文件。这是设计功能,不是缺陷。先用 (pacman -Qo 文件的完整路径 检查哪个软件包提供了文件。如果是其它软件包,请报告问题。如果不是其它软件包提供,将已经存在的文件重命名并重新升级。如果一切顺利,可以删掉备份文件。如果是通过 make install 等非 pacman 方式安装的软件,安装的文件不属于任何软件包!需要先手动删除这些文件,这样就可以正常安装软件了。不属于任何软件包的文件列表一文中提供了查找这些文件的脚本。每一个安装的软件包都会提供一个 /var/lib/pacman/local/$package-$version/files 文件,包含此软件包的元数据。如果文件损坏或者丢失,将会导致升级时出现file exists in filesystem 错误。此错误通常只会影响一个软件包,除了手动删除或移动所有的问题文件,可以作为特例使用pacman -S --force $package让 pacman 强制覆盖这些文件。警告: --force 选项非常危险,建议在 Arch 新闻中明确通知的时候才使用它,否则可能导致系统无法启动。
由于报错文件估摸上百个,所以只拿了最后一个文件通过pacman -Qo 文件绝对路径 ,查看文件所属。但是结果上该文件没有所属,手动删臣妾又做不到。后来就壮着胆通过pacman -S --force 包名 进行强制安装,终得解决,只是不知有没其他后遗症。
pacman -S --force sudo
转自官方wiki
用法
下面只是一个可执行操作的小部分示范,pacman 的其他示例请阅读pacman(8)。
提示: 使用过其它发行版的用户,可以参考 Pacman Rosetta 中的对比.
安装软件包
注意: 软件包通常有很多可选依赖, 它们为软件提供额外功能, 并不强制要求安装它们。 安装软件时, pacman 将会输出它的可选依赖, 但是这个输出不会在 pacman.log
中;当你想浏览已安装软件的可选依赖时可以使用pacman -Si
,得到关于可选依赖的简短描述。
警告: 在Arch下安装软件包时,未更新系统前,不要更新软件包数据库(例如,可能出现某软件包不再出现在官方库)。操作时,应使用pacman -Syu package_name
, 而不要使用(pacman -Sy package_name
),否则可能会有依赖问题。参见 System maintenance (简体中文)#不支持部分升级 和 BBS#89328.
安装指定的包
安装或者升级单个软件包,或者一列软件包(包含依赖包),使用如下命令:
# pacman -S package_name1 package_name2 ...
用正则表达式安装多个软件包(参见 pacman 小贴士[broken link: invalid section]和这个帖子):
# pacman -S $(pacman -Ssq package_regex)
有时候在不同的软件仓库中,一个软件包有多个版本(比如[extra]和[testing])。可以选择一个来安装:
# pacman -S extra/package_name
安装多个含有相似名称的软件包,而并非整个包组或全部匹配的软件包; 例如,plasma:
# pacman -S plasma-{desktop,mediacenter,nm}
当然,可以多层扩展,并不作限制:
# pacman -S plasma-{workspace{,-wallpapers},pa}
安装包组
一些包属于一个可以同时安装的软件包组。例如,运行下面的命令
# pacman -S gnome
会提醒用户选择 gnome
内需要安装的包。
有的包组包含大量的软件包,有时用户只需其中几个。除了逐一键入序号外,pacman 还支持选择或排除某个区间内的的软件包:
Enter a selection (default=all): 1-10 15
这将选中序号 1 至 10 和 15 的软件包。而
Enter a selection (default=all): ^5-8 ^2
将会选中除了序号 5 至 8 和 2 之外的所有软件包。
想要查看哪些包属于 gnome 组,运行:
# pacman -Sg gnome
也可以访问 https://www.archlinux.org/groups/ 查看可用的包组。
注意: 如果列表中的包已经安装在系统中,它会被重新安装,即使它已经是最新的。可以用 --needed
选项覆盖这种行为。
删除软件包
删除单个软件包,保留其全部已经安装的依赖关系
pacman -R package_name
删除指定软件包,及其所有没有被其他已安装软件包使用的依赖关系:
pacman -Rs package_name
要删除软件包和所有依赖这个软件包的程序:
警告: 此操作是递归的,请小心检查,可能会一次删除大量的软件包。
# pacman -Rsc package_name
要删除软件包,但是不删除依赖这个软件包的其他程序:
# pacman -Rdd package_name
pacman 删除某些程序时会备份重要配置文件,在其后面加上*.pacsave扩展名。-n 选项可以避免备份这些文件:
pacman -Rn package_name
注意: pacman 不会删除软件自己创建的文件(例如主目录中的 .dot
文件不会被删除。
升级软件包
警告: * 建议所有用户都 经常性的更新系统。
- Arch 只支持系统完整升级,详细参见