Pacman常用命令 文内搜索吧

列出已经安装的软件包

https://wiki.archlinux.org/index.php/Pacman_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)  维基

pacman -Q

查看virtualbox包是否已经安装

pacman -Q virtualbox

查看已安装的包virtualbox的详细信息

pacman -Qi virtualbox

列出已安装包virtualbox的所有文件

pacman -Ql virtualbox

查找某个文件属于哪个包

pacman -Qo /etc/passwd

查询包组

pacman -Sg

查询包组所包含的软件包

pacman -Sg gnome

搜索virtualbox相关的包

pacman -Ss virtualbox

从数据库中搜索virtualbox的信息

pacman -Si virtualbox

仅同步源

sudo pacman -Sy

更新系统

sudo pacman -Su

同步源并更新系统

sudo pacman -Syu

同步源后安装包

sudo pacman -Sy virtualbox

从本地数据库中获取virtualbox的信息,并下载安装

sudo pacman -S virtualbox

强制安装virtualbox包

sudo pacman -Sf virtualbox

删除virtualbox

sudo pacman -R virtualbox

强制删除被依赖的包(慎用)

sudo pacman -Rd virtualbox

删除virtualbox包及依赖其的包

sudo pacman -Rc virtualbox

删除virtualbox包及其依赖的包

sudo pacman -Rsc virtualbox

清理/var/cache/pacman/pkg目录下的旧包

sudo pacman -Sc

清除所有下载的包和数据库

sudo pacman -Scc

安装下载的virtualbox包(有时候需要降级包的时候就用这个)

cd /var/cache/pacman/pkg

sudo pacman -U virtualbox-5.2.12-1-x86_64.pkg.tar.xz

升级时不升级virtualbox包

sudo pacman -Su --ignore virtualbox

总结

Manjaro也提供了GUI的包管理工具,可以直接在界面点一点就可以安装软件了。

Pacman是Arch Linux 的包管理器。它将一个简单的二进制包格式和易用的构建系统结合了起来。不管软件包是来自官方的 Arch 库还是用户自己创建,Pacman 都能方便得管理。
更新系统

在 Archlinux 中,使用一条命令即可对整个系统进行更新:
pacman -Syu
如果你已经使用pacman -Sy将本地的包数据库与远程的仓库进行了同步,也可以只执行:pacman -Su
安装包

➔ pacman -S 包名:例如,执行 pacman -S firefox 将安装 Firefox。你也可以同时安装多个包,
只需以空格分隔包名即可。
➔ pacman -Sy 包名:与上面命令不同的是,该命令将在同步包数据库后再执行安装。
➔ pacman -Sv 包名:在显示一些操作信息后执行安装。
➔ pacman -U:安装本地包,其扩展名为 pkg.tar.gz。
➔ pacman -U http://www.example.com/repo/example.pkg.tar.xz 安装一个远程包(不在 pacman 配置的源里面)
删除包

➔ pacman -R 包名:该命令将只删除包,保留其全部已经安装的依赖关系
➔ pacman -Rs 包名:在删除包的同时,删除其所有没有被其他已安装软件包使用的依赖关系
➔ pacman -Rsc 包名:在删除包的同时,删除所有依赖这个软件包的程序
➔ pacman -Rd 包名:在删除包时不检查依赖。
搜索包

➔ pacman -Ss 关键字:在仓库中搜索含关键字的包。
➔ pacman -Qs 关键字: 搜索已安装的包。
➔ pacman -Qi 包名:查看有关包的详尽信息。
➔ pacman -Ql 包名:列出该包的文件。
其他用法

➔ pacman -Sw 包名:只下载包,不安装。
➔ pacman -Sc:清理未安装的包文件,包文件位于 /var/cache/pacman/pkg/ 目录。
➔ pacman -Scc:清理所有的缓存文件。

首先pacman安装软件包有两种理由:

1、通过-U、-S指定安装。

2、作为某软件包的依赖被安装的。

安装软件包:

# pacman -S package_name

安装一个组:

# pacman -S group_name

这两个是一致的,输入组名会让选安装哪些包,输入包名则直接安装。

查组里包括哪些包:

# pacman -Sg group_name

卸载包/组:

# pacman -R(u)(s)(n) package/group_name

(删除依赖)(删除其他不需要用的包(有待研究))(不保留重要配置文件)

系统升级:

# pacman -Syu

搜索数据库:

# pacman -Ss package/group_name

搜索本地安装包:

# pacman -Qs package/group_name

列举数据库某包的详细信息:

# pacman -Si package_name

列举已安装某包的详细信息:

# pacman -Qi package_name

列举某已安装软件的已安装文件:

# pacman -Ql package_name

查看作为依赖被装入且不被任何软件依赖的软件包(孤儿):

# pacman -Qdt

查看指定(-U/S)安装且不被任何其他软件依赖的包:

# pacman -Qet

以上两句,第一句把-t去了,就是查询所有作为依赖被安装的包;第二句把-t去了,就是查询被指定安装的包。

列举特定包的依赖关系树:

# pactree package_name

安装本地/远程包:

# pacman -U 路径/网址

将本地包存入缓存库:

# pacman -U file://路径

Pacman 是一个命令行工具,这意味着当你执行下面的命令时,必须在终端或控制台中进行。

1、更新系统

在 Arch Linux 中,使用一条命令即可对整个系统进行更新:

pacman -Syu

如果你已经使用 pacman -Sy 将本地的包数据库与远程的仓库进行了同步,也可以只执行:

pacman -Su

2、安装包

  • pacman -S 包名 例如,执行 pacman -S firefox 将安装 Firefox。你也可以同时安装多个包,只需以空格分隔包名即可。
  • pacman -Sy 包名 与上面命令不同的是,该命令将在同步包数据库后再执行安装。
  • pacman -Sv 包名 在显示一些操作信息后执行安装。
  • pacman -U 安装本地包,其扩展名为 pkg.tar.gz。

3、删除包

  • pacman -R 包名 该命令将只删除包,不包含该包的依赖。
  • pacman -Rs 包名 在删除包的同时,也将删除其依赖。
  • pacman -Rd 包名 在删除包时不检查依赖。

4、搜索包

  • pacman -Ss 关键字 这将搜索含关键字的包。
  • pacman -Qi 包名 查看有关包的信息。
  • pacman -Ql 包名 列出该包的文件。

5、其他用法

  • pacman -Sw 包名 只下载包,不安装。
  • pacman -Sc Pacman 下载的包文件位于 /var/cache/pacman/pkg/ 目录。该命令将清理未安装的包文件。
  • pacman -Scc 清理所有的缓存文件。

关于 Pacman 更加详细的用法,可以阅读 Pacman 的手册页

Pacman 是一个 软件包管理器, 作为 ArchLinux发行版的一部分. 它最早由 Arch Linux 的 Judd Vinet开发. Pacman 可以解决安装过程中的依赖问题,自动下载并且安装所有需要的软件包。Pacman包管理器是Arch Linux的一大亮点。它将一个简单的二进制包格式和易用的构建系统结合了起来。Pacman使得简单的管理与自定义软件包成为了可能,而不论他们来自于官方的Arch软件库或是用户自己创建的

[zhangy@BlackGhost ~]$ pacman -h
用法:  pacman <操作> [...]
操作:
 pacman {-h --help}       //帮助
 pacman {-V --version}   //查看版本
 pacman {-D --database} <选项> <软件包>  //pacman管理数据库选项
 pacman {-Q --query}    [选项] [软件包]    //查询安装包
 pacman {-R --remove}   [选项] <软件包>  //删除安装包
 pacman {-S --sync}     [选项] [软件包]      //安装安装包
 pacman {-U --upgrade}  [选项] <文件>   //更新安装包

使用 'pacman {-h --help}' 及某个操作以查看可得的选项

[zhangy@BlackGhost ~]$ pacman -D --help  
用法:  pacman {-D --database} <选项> <软件包>  
选项:  
 --asdeps         标记为非单独指定安装的软件包  
 --asexplicit     标记为单独指定安装的软件包  
 --config <路径>  指定另外的配置文件  
 --logfile <路径> 指定另外的日志文件  
 --noconfirm      不询问确认  
 --noprogressbar  下载文件时不显示进度条  
 --noscriptlet    不执行安装小脚本  
 -v, --verbose        循环执行  
 -- debug        显示除错信息  
 -r, --root <路径>    指定另外的安装根目录  
 -b, --dbpath <路径>  指定另外的数据库位置  
 --cachedir <目录> 指定另外的软件包缓存位置  
 --arch <架构>    设定另外的架构

[zhangy@BlackGhost ~]$ pacman -Q --help  
用法:  pacman {-Q --query} [选项] [软件包]  
选项:  
 -c, --changelog      查看某软件包的更新日志  
 -d, --deps           列出所有作为依赖关系安装的软件包 [过滤器]  
 -e, --explicit       列出所有单独指定安装的软件包 [过滤器]  
 -g, --groups         查看某软件包组所属的所有软件包  
 -i, --info           查看软件包信息 (-ii 查看备份文件)  
 -k, --check          检查该软件包拥有的文件是否存在  
 -l, --list           列出被查询软件包的内容  
 -m, --foreign        列出没有在同步数据库时找到的已安装软件包 [过滤器]  
 -o, --owns <文件>     查询哪个软件包拥有  <文件>  
 -p, --file <软件包> 从某个软件包而不是数据库查询  
 -s, --search 搜寻符合指定字符串的已安装本地的软件包  
 -t, --unrequired     列出所有不被其他软件包要求的软件包 [过滤器]  
 -u, --upgrades       列出所有可升级的软件包 [过滤器]  
 -q, --quiet          在查询或搜索时显示较少的信息  
 --config <路径>  指定另外的配置文件  
 --logfile <路径> 指定另外的日志文件  
 --noconfirm      不询问确认  
 --noprogressbar  下载文件时不显示进度条  
 --noscriptlet    不执行安装小脚本  
 -v, --verbose        循环执行  
 -- debug        显示除错信息  
 -r, --root <路径>    指定另外的安装根目录  
 -b, --dbpath <路径>  指定另外的数据库位置  
 --cachedir <目录> 指定另外的软件包缓存位置  
 --arch <架构>    设定另外的架构

[zhangy@BlackGhost ~]$ pacman -R --help  
用法:  pacman {-R --remove} [选项] <软件包>  
选项:  
 -c, --cascade        删除软件包及所有的依赖于此的软件包  
 -d, --nodeps         略过依赖关系检查  
 -k, --dbonly         只删除数据库记录,不删除文件  
 -n, --nosave         同时删除配置文件  
 -s, --recursive      同时删除 (不会破坏其他软件包的) 依赖关系(-ss·也包括单独指定安装的依赖关系)  
 -u, --unneeded       同时删除不需要的 (且不会破坏其他软件包的) 依赖关系  
 --print          仅打印目标而不执行操作  
 --print-format <字符串>指定如何打印目标  
 --config <路径>  指定另外的配置文件  
 --logfile <路径> 指定另外的日志文件  
 --noconfirm      不询问确认  
 --noprogressbar  下载文件时不显示进度条  
 --noscriptlet    不执行安装小脚本  
 -v, --verbose        循环执行  
 -- debug        显示除错信息  
 -r, --root <路径>    指定另外的安装根目录  
 -b, --dbpath <路径>  指定另外的数据库位置  
 --cachedir <目录> 指定另外的软件包缓存位置  
 --arch <架构>    设定另外的架构

[zhangy@BlackGhost ~]$ pacman -S --help  
用法:  pacman {-S --sync} [选项] [软件包]  
选项:  
 --asdeps         作为非单独指定安装的软件包安装  
 --asexplicit     作为单独指定安装的软件包安装  
 -c, --clean          从缓存目录中删除旧软件包 (-cc 清除所有)  
 -d, --nodeps         略过依赖关系检查  
 -f,  -force          强制安装,覆盖存在冲突的文件  
 -g, --groups         查看某软件包组所属的所有软件包  
 -i, --info           查看软件包信息  
 -l, --list <软件库>    查看在该软件库中的软件包清单  
 -s, --search 按照指定字符串查询远端软件库  
 -u, --sysupgrade     升级所有已安装的软件包 (-uu 可启用降级)  
 -w, --downloadonly   下载但不安装/升级软件包  
 -y, --refresh        从服务器下载新的软件包数据库  
 --needed         不重新安装已经为最新的软件包  
 --ignore <软件包>   升级时忽略某个软件包 (可多次使用)  
 --ignoregroup <软件包组>升级时忽略某个软件包组 (可多次使用)  
 --print          仅打印目标而不执行操作  
 --print-format <字符串>指定如何打印目标  
 -q, --quiet          在查询或搜索时显示较少的信息  
 --config <路径>  指定另外的配置文件  
 --logfile <路径> 指定另外的日志文件  
 --noconfirm      不询问确认  
 --noprogressbar  下载文件时不显示进度条  
 --noscriptlet    不执行安装小脚本  
 -v, --verbose        循环执行  
 -- debug        显示除错信息  
 -r, --root <路径>    指定另外的安装根目录  
 -b, --dbpath <路径>  指定另外的数据库位置  
 --cachedir <目录> 指定另外的软件包缓存位置  
 --arch <架构>    设定另外的架构

[zhangy@BlackGhost ~]$ pacman -U --help  
用法:  pacman {-U --upgrade} [选项] <文件>  
选项:  
 --asdeps         作为非单独指定安装的软件包安装  
 --asexplicit     作为单独指定安装的软件包安装  
 -d, --nodeps         略过依赖关系检查  
 -f,  -force          强制安装,覆盖存在冲突的文件  
 -k, --dbonly         添加数据库记录,不安装或保持现存文件  
 --print          仅打印目标而不执行操作  
 --print-format <字符串> 指定如何打印目标  
 --config <路径>  指定另外的配置文件  
 --logfile <路径> 指定另外的日志文件  
 --noconfirm      不询问确认  
 --noprogressbar  下载文件时不显示进度条  
 --noscriptlet    不执行安装小脚本  
 -v, --verbose        循环执行  
 -- debug        显示除错信息  
 -r, --root <路径>    指定另外的安装根目录  
 -b, --dbpath <路径>  指定另外的数据库位置  
 --cachedir <目录> 指定另外的软件包缓存位置  
 --arch <架构>    设定另外的架构

例1

安装包

安装或者升级单个软件包

pacman -S mysql
2,有时候在不同的软件仓库中,一个软件包有多个版本(比如extra和community)。你可以选择一个来安装
pacman -S extra/mysql
3,步包数据库并且安装一个软件包
pacman -Sy mysql

最后更新 2013-04-24 20:43:32 - 合作编辑者如下:匿名

有误,我来改正
(0)
正确
(8)
例2

删除包

1,删除单个软件包,保留其全部已经安装的依赖关系

pacman -R mysql
2,删除指定软件包,及其所有没有被其他已安装软件包使用的依赖关系:
pacman -Rs mysql

最后更新 2013-04-24 21:08:48 - 合作编辑者如下:张映

有误,我来改正
(0)
正确
(1)
例3
升级系统
pacman -Syu

最后更新 2013-04-24 21:11:01 - 合作编辑者如下:张映

有误,我来改正
(0)
正确
(2)
例4

查询包

查询可用安装包

pacman -Ss mysql
要查询已安装的软件包:
pacman -Qs mysql

最后更新 2013-04-24 21:14:04 - 合作编辑者如下:张映

有误,我来改正
(0)
正确
(1)
例5

其他用法

清理当前未被安装软件包的缓存

pacman -Sc

下载包而不安装

pacman -Sw mysql

最后更新 2013-04-24 21:16:16 - 合作编辑者如下:张映

有误,我来改正
(0)
正确
(2)
例6

# pacman -Rsc package_name   #要删除软件包和所有依赖这个软件包的程序
# pacman -Rdd package_name #要删除软件包,但是不删除依赖这个软件包的其他程序: # pacman 删除某些程序时会备份重要配置文件,在其后面加上*.pacsave扩展名。-n 选项可以删除这些文件
# pacman -Rn package_name
# pacman -Rsn package_name # pacman -Si package_name #显示软件包的详尽的信息 # pacman -Qi package_name #查询本地安装包的详细信息 # pacman -Qii package_name #使用两个 -i 将同时显示备份文件和修改状态 # pacman -Ql package_name #要获取已安装软件包所包含文件的列表 # pacman -Qk package_name #检查软件包安装的文件是否都存在 # pacman -Qo /path/to/file_name #查询数据库获取某个文件属于哪个软件包 # pacman -Qdt #要罗列所有不再作为依赖的软件包(孤立orphans) # pacman -Qet #要罗列所有明确安装而且不被其它包依赖的软件包 # pactree package_name #要显示软件包的依赖树 # pactree -r package_name #检查一个安装的软件包被那些包依赖

Update Proxy Rule

edit .pac/user-rule.txt

genpac -c ~/.pac/config.ini

pacman -Sy abc #和源同步后安装名为abc的包
pacman -S abc #从本地数据库中得到abc的信息,下载安装abc包
pacman -Sf abc #强制安装包abc
pacman -Ss abc #搜索有关abc信息的包
pacman -Si abc #从数据库中搜索包abc的信息
pacman -Q # 列出已经安装的软件包
pacman -Q abc # 检查 abc 软件包是否已经安装
pacman -Qi abc #列出已安装的包abc的详细信息
pacman -Ql abc # 列出abc软件包的所有文件
pacman -Qo /path/to/abc # 列出abc文件所属的软件包
pacman -Syu #同步源,并更新系统
pacman -Sy #仅同步源
pacman -Su #更新系统
pacman -R abc #删除abc包
pacman -Rd abc #强制删除被依赖的包
pacman -Rc abc #删除abc包和依赖abc的包
pacman -Rsc abc #删除abc包和abc依赖的包
pacman -Sc #清理/var/cache/pacman/pkg目录下的旧包
pacman -Scc #清除所有下载的包和数据库
pacman -U abc #安装下载的abs包,或新编译的abc包
pacman -Sd abc #忽略依赖性问题,安装包abc
pacman -Su --ignore foo #升级时不升级包foo
pacman -Sg abc #查询abc这个包组包含的软件包

清除无用的包
sudo pacman -R $(pacman -Qdtq)

Pacman命令介绍

用pacman很久了,一直没有深入去研究到底它包含多少神秘的力量,每次都是pacman -Syu就简单的把所有升级更新问题搞定实在是让笔者懒惰了很多。不过也正是因为pacman的简单让笔者爱不释手,同时Archlinux的强大灵活也让其成为笔者最为心仪的Linux,不过笔者对Archlinux的最终评价就是-Archlinux是一款为折腾而诞生的Linux(至少对笔者来说是这样的)。想要折腾,就用Archlinux吧。今天给大家带来的是Archlinux下最关键,也是灵魂的工具pacman命令介绍(这个工具与debian,ubuntu下的apt-get十分类似),不过命令稍微复杂一些,转过来当做给自己作参考了。

一、首先说说啥是pacman吧:

Pacman 是一个 软件包管理器, 作为 ArchLinux发行版的一部分. 它最早由 Arch Linux 的 Judd Vinet开发. Pacman 可以解决安装过程中的依赖问题,自动下载并且安装所有需要的软件包。Pacman包管理器是Arch Linux的一大亮点。它将一个简单的二进制包格式和易用的构建系统结合了起来。Pacman使得简单的管理与自定义软件包成为了可能,而不论他们来自于官方的Arch软件库或是用户自己创建的。

二、pacman参数详细说明

Pacman常用命令 文内搜索吧
1. [arch@ghostbb ~]$ pacman -h
2. 用法: pacman <操作> [...]
3. 操作:
4. pacman {-h --help} //帮助
5. pacman {-V --version} //查看版本
6. pacman {-D --data base} <选项> <软件包> //pacman管理数据库选项
7. pacman {-Q --query} [选项] [软件包] //查询安装包
8. pacman {-R --remove} [选项] <软件包> //删除安装包
9. pacman {-S --sync} [选项] [软件包] //安装安装包
10. pacman {-U --upgrade} [选项] <文件> //更新安装包
11.
12. 使用 'pacman {-h --help}' 及某个操作以查看可得的选项
Pacman常用命令 文内搜索吧

[arch@ghostbb ~]$ pacman -h
用法: pacman <操作> [...]
操作:
pacman {-h –help} //帮助
pacman {-V –version} //查看版本
pacman {-D –database} <选项> <软件包> //pacman管理数据库选项
pacman {-Q –query} [选项] [软件包] //查询安装包
pacman {-R –remove} [选项] <软件包> //删除安装包
pacman {-S –sync} [选项] [软件包] //安装安装包
pacman {-U –upgrade} [选项] <文件> //更新安装包

使用 ‘pacman {-h –help}’ 及某个操作以查看可得的选项

1,pacman -D

Pacman常用命令 文内搜索吧
1. [arch@ghostbb ~]$ pacman -D --help
2. 用法: pacman {-D --database} <选项> <软件包>
3. 选项:
4. --asdeps 标记为非单独指定安装的软件包
5. --asexplicit 标记为单独指定安装的软件包
6. --config <路径> 指定另外的配置文件
7. --logfile <路径> 指定另外的日志文件
8. --noconfirm 不询问确认
9. --noprogressbar 下载文件时不显示进度条
10. --noscriptlet 不执行安装小脚本
11. -v, --verbose 循环执行
12. -- debug 显示除错信息
13. -r, --root <路径> 指定另外的安装根目录
14. -b, --dbpath <路径> 指定另外的数据库位置
15. --cachedir <目录> 指定另外的软件包缓存位置
16. --arch <架构> 设定另外的架构
Pacman常用命令 文内搜索吧

[arch@ghostbb ~]$ pacman -D –help
用法: pacman {-D –database} <选项> <软件包>
选项:
–asdeps 标记为非单独指定安装的软件包
–asexplicit 标记为单独指定安装的软件包
–config <路径> 指定另外的配置文件
–logfile <路径> 指定另外的日志文件
–noconfirm 不询问确认
–noprogressbar 下载文件时不显示进度条
–noscriptlet 不执行安装小脚本
-v, –verbose 循环执行
— debug 显示除错信息
-r, –root <路径> 指定另外的安装根目录
-b, –dbpath <路径> 指定另外的数据库位置
–cachedir <目录> 指定另外的软件包缓存位置
–arch <架构> 设定另外的架构

2,pacman -Q

Pacman常用命令 文内搜索吧
1. [arch@ghostbb ~]$ pacman -Q --help
2. 用法: pacman {-Q --query} [选项] [软件包]
3. 选项:
4. -c, --changelog 查看某软件包的更新日志
5. -d, --deps 列出所有作为依赖关系安装的软件包 [过滤器]
6. -e, --explicit 列出所有单独指定安装的软件包 [过滤器]
7. -g, --groups 查看某软件包组所属的所有软件包
8. -i, --info 查看软件包信息 (-ii 查看备份文件)
9. -k, --check 检查该软件包拥有的文件是否存在
10. -l, --list 列出被查询软件包的内容
11. -m, --foreign 列出没有在同步数据库时找到的已安装软件包 [过滤器]
12. -o, --owns <文件> 查询哪个软件包拥有 <文件>
13. -p, --file <软件包> 从某个软件包而不是数据库查询
14. -s, --search <regex> 搜寻符合指定字符串的已安装本地的软件包
15. -t, --unrequired 列出所有不被其他软件包要求的软件包 [过滤器]
16. -u, --upgrades 列出所有可升级的软件包 [过滤器]
17. -q, --quiet 在查询或搜索时显示较少的信息
18. --config <路径> 指定另外的配置文件
19. --logfile <路径> 指定另外的日志文件
20. --noconfirm 不询问确认
21. --noprogressbar 下载文件时不显示进度条
22. --noscriptlet 不执行安装小脚本
23. -v, --verbose 循环执行
24. -- debug 显示除错信息
25. -r, --root <路径> 指定另外的安装根目录
26. -b, --dbpath <路径> 指定另外的数据库位置
27. --cachedir <目录> 指定另外的软件包缓存位置
28. --arch <架构> 设定另外的架构
</regex>
Pacman常用命令 文内搜索吧

[arch@ghostbb ~]$ pacman -Q –help
用法: pacman {-Q –query} [选项] [软件包]
选项:
-c, –changelog 查看某软件包的更新日志
-d, –deps 列出所有作为依赖关系安装的软件包 [过滤器]
-e, –explicit 列出所有单独指定安装的软件包 [过滤器]
-g, –groups 查看某软件包组所属的所有软件包
-i, –info 查看软件包信息 (-ii 查看备份文件)
-k, –check 检查该软件包拥有的文件是否存在
-l, –list 列出被查询软件包的内容
-m, –foreign 列出没有在同步数据库时找到的已安装软件包 [过滤器]
-o, –owns <文件> 查询哪个软件包拥有 <文件>
-p, –file <软件包> 从某个软件包而不是数据库查询
-s, –search 搜寻符合指定字符串的已安装本地的软件包
-t, –unrequired 列出所有不被其他软件包要求的软件包 [过滤器]
-u, –upgrades 列出所有可升级的软件包 [过滤器]
-q, –quiet 在查询或搜索时显示较少的信息
–config <路径> 指定另外的配置文件
–logfile <路径> 指定另外的日志文件
–noconfirm 不询问确认
–noprogressbar 下载文件时不显示进度条
–noscriptlet 不执行安装小脚本
-v, –verbose 循环执行
— debug 显示除错信息
-r, –root <路径> 指定另外的安装根目录
-b, –dbpath <路径> 指定另外的数据库位置
–cachedir <目录> 指定另外的软件包缓存位置
–arch <架构> 设定另外的架构

3,pacman -R

Pacman常用命令 文内搜索吧
1. [arch@ghostbb ~]$ pacman -R --help
2. 用法: pacman {-R --remove} [选项] <软件包>
3. 选项:
4. -c, --cascade 删除软件包及所有的依赖于此的软件包
5. -d, --nodeps 略过依赖关系检查
6. -k, --dbonly 只删除数据库记录,不删除文件
7. -n, --nosave 同时删除配置文件
8. -s, --recursive 同时删除 (不会破坏其他软件包的) 依赖关系(-ss·也包括单独指定安装的依赖关系)
9. -u, --unneeded 同时删除不需要的 (且不会破坏其他软件包的) 依赖关系
10. --print 仅打印目标而不执行操作
11. --print-format <字符串>指定如何打印目标
12. --config <路径> 指定另外的配置文件
13. --logfile <路径> 指定另外的日志文件
14. --noconfirm 不询问确认
15. --noprogressbar 下载文件时不显示进度条
16. --noscriptlet 不执行安装小脚本
17. -v, --verbose 循环执行
18. -- debug 显示除错信息
19. -r, --root <路径> 指定另外的安装根目录
20. -b, --dbpath <路径> 指定另外的数据库位置
21. --cachedir <目录> 指定另外的软件包缓存位置
22. --arch <架构> 设定另外的架构
Pacman常用命令 文内搜索吧

[arch@ghostbb ~]$ pacman -R –help
用法: pacman {-R –remove} [选项] <软件包>
选项:
-c, –cascade 删除软件包及所有的依赖于此的软件包
-d, –nodeps 略过依赖关系检查
-k, –dbonly 只删除数据库记录,不删除文件
-n, –nosave 同时删除配置文件
-s, –recursive 同时删除 (不会破坏其他软件包的) 依赖关系(-ss·也包括单独指定安装的依赖关系)
-u, –unneeded 同时删除不需要的 (且不会破坏其他软件包的) 依赖关系
–print 仅打印目标而不执行操作
–print-format <字符串>指定如何打印目标
–config <路径> 指定另外的配置文件
–logfile <路径> 指定另外的日志文件
–noconfirm 不询问确认
–noprogressbar 下载文件时不显示进度条
–noscriptlet 不执行安装小脚本
-v, –verbose 循环执行
— debug 显示除错信息
-r, –root <路径> 指定另外的安装根目录
-b, –dbpath <路径> 指定另外的数据库位置
–cachedir <目录> 指定另外的软件包缓存位置
–arch <架构> 设定另外的架构

4,pacman -S

Pacman常用命令 文内搜索吧
1. [arch@ghostbb ~]$ pacman -S --help
2. 用法: pacman {-S --sync} [选项] [软件包]
3. 选项:
4. --asdeps 作为非单独指定安装的软件包安装
5. --asexplicit 作为单独指定安装的软件包安装
6. -c, --clean 从缓存目录中删除旧软件包 (-cc 清除所有)
7. -d, --nodeps 略过依赖关系检查
8. -f, -force 强制安装,覆盖存在冲突的文件
9. -g, --groups 查看某软件包组所属的所有软件包
10. -i, --info 查看软件包信息
11. -l, --list <软件库> 查看在该软件库中的软件包清单
12. -s, --search <regex表达式> 按照指定字符串查询远端软件库
13. -u, --sysupgrade 升级所有已安装的软件包 (-uu 可启用降级)
14. -w, --downloadonly 下载但不安装/升级软件包
15. -y, --refresh 从服务器下载新的软件包数据库
16. --needed 不重新安装已经为最新的软件包
17. --ignore <软件包> 升级时忽略某个软件包 (可多次使用)
18. --ignoregroup <软件包组>升级时忽略某个软件包组 (可多次使用)
19. --print 仅打印目标而不执行操作
20. --print-format <字符串>指定如何打印目标
21. -q, --quiet 在查询或搜索时显示较少的信息
22. --config <路径> 指定另外的配置文件
23. --logfile <路径> 指定另外的日志文件
24. --noconfirm 不询问确认
25. --noprogressbar 下载文件时不显示进度条
26. --noscriptlet 不执行安装小脚本
27. -v, --verbose 循环执行
28. -- debug 显示除错信息
29. -r, --root <路径> 指定另外的安装根目录
30. -b, --dbpath <路径> 指定另外的数据库位置
31. --cachedir <目录> 指定另外的软件包缓存位置
32. --arch <架构> 设定另外的架构
</regex表达式>
Pacman常用命令 文内搜索吧

[arch@ghostbb ~]$ pacman -S –help
用法: pacman {-S –sync} [选项] [软件包]
选项:
–asdeps 作为非单独指定安装的软件包安装
–asexplicit 作为单独指定安装的软件包安装
-c, –clean 从缓存目录中删除旧软件包 (-cc 清除所有)
-d, –nodeps 略过依赖关系检查
-f, -force 强制安装,覆盖存在冲突的文件
-g, –groups 查看某软件包组所属的所有软件包
-i, –info 查看软件包信息
-l, –list <软件库> 查看在该软件库中的软件包清单
-s, –search 按照指定字符串查询远端软件库
-u, –sysupgrade 升级所有已安装的软件包 (-uu 可启用降级)
-w, –downloadonly 下载但不安装/升级软件包
-y, –refresh 从服务器下载新的软件包数据库
–needed 不重新安装已经为最新的软件包
–ignore <软件包> 升级时忽略某个软件包 (可多次使用)
–ignoregroup <软件包组>升级时忽略某个软件包组 (可多次使用)
–print 仅打印目标而不执行操作
–print-format <字符串>指定如何打印目标
-q, –quiet 在查询或搜索时显示较少的信息
–config <路径> 指定另外的配置文件
–logfile <路径> 指定另外的日志文件
–noconfirm 不询问确认
–noprogressbar 下载文件时不显示进度条
–noscriptlet 不执行安装小脚本
-v, –verbose 循环执行
— debug 显示除错信息
-r, –root <路径> 指定另外的安装根目录
-b, –dbpath <路径> 指定另外的数据库位置
–cachedir <目录> 指定另外的软件包缓存位置
–arch <架构> 设定另外的架构

5,pacman -U

Pacman常用命令 文内搜索吧
1. [arch@ghostbb ~]$ pacman -U --help
2. 用法: pacman {-U --upgrade} [选项] <文件>
3. 选项:
4. --asdeps 作为非单独指定安装的软件包安装
5. --asexplicit 作为单独指定安装的软件包安装
6. -d, --nodeps 略过依赖关系检查
7. -f, -force 强制安装,覆盖存在冲突的文件
8. -k, --dbonly 添加数据库记录,不安装或保持现存文件
9. --print 仅打印目标而不执行操作
10. --print-format <字符串> 指定如何打印目标
11. --config <路径> 指定另外的配置文件
12. --logfile <路径> 指定另外的日志文件
13. --noconfirm 不询问确认
14. --noprogressbar 下载文件时不显示进度条
15. --noscriptlet 不执行安装小脚本
16. -v, --verbose 循环执行
17. -- debug 显示除错信息
18. -r, --root <路径> 指定另外的安装根目录
19. -b, --dbpath <路径> 指定另外的数据库位置
20. --cachedir <目录> 指定另外的软件包缓存位置
21. --arch <架构> 设定另外的架构
Pacman常用命令 文内搜索吧

[arch@ghostbb ~]$ pacman -U –help
用法: pacman {-U –upgrade} [选项] <文件>
选项:
–asdeps 作为非单独指定安装的软件包安装
–asexplicit 作为单独指定安装的软件包安装
-d, –nodeps 略过依赖关系检查
-f, -force 强制安装,覆盖存在冲突的文件
-k, –dbonly 添加数据库记录,不安装或保持现存文件
–print 仅打印目标而不执行操作
–print-format <字符串> 指定如何打印目标
–config <路径> 指定另外的配置文件
–logfile <路径> 指定另外的日志文件
–noconfirm 不询问确认
–noprogressbar 下载文件时不显示进度条
–noscriptlet 不执行安装小脚本
-v, –verbose 循环执行
— debug 显示除错信息
-r, –root <路径> 指定另外的安装根目录
-b, –dbpath <路径> 指定另外的数据库位置
–cachedir <目录> 指定另外的软件包缓存位置
–arch <架构> 设定另外的架构

三,一些常規用法

1,安装包

安装或者升级单个软件包,或者一列软件包(包含依赖包),使用如下命令:

pacman -S mysql

有时候在不同的软件仓库中,一个软件包有多个版本(比如extra和community)。你可以选择一个来安装:

pacman -S extra/mysql
pacman -S community/mysql

你也可以在一个命令里同步包数据库并且安装一个软件包:

pacman -Sy mysql

2,删除包

删除单个软件包,保留其全部已经安装的依赖关系

pacman -R mysql

删除指定软件包,及其所有没有被其他已安装软件包使用的依赖关系:

pacman -Rs mysql

3,升级系统

pacman -Syu

安装一个本地包:

pacman -U 后面根上已下载的包或者是远程URL

当我们用pacman进行升级时,经常会遇到下载的包没有,到源里看时,要升级的包是有的,但是版本不一样,你要下的版本是没有,这种情况下,就可以用pacman -u

4,查询包

查询可用安装包

pacman -Ss mysql

要查询已安装的软件包:

pacman -Qs mysql

5,其他用法

清理当前未被安装软件包的缓存(/var/cache/pacman/pkg):

pacman -Sc

下载包而不安装它:

pacman -Sw mysql

来源:http://xiexiejiao.cn/linux/pacman-introduce.html

 

1、使用包文件加入一个新的软件包

# pacman --add foo.pkg.tar.gz
# pacman -A foo.pkg.tar.gz

这将会在系统上安装 foo.pkg.tar.gz 软件包。如果不能满足依赖关系,pacman 会退出并显示错误和报

告所缺少的依赖关系,但不会尝试自动解决依赖关系,如果你需要这功能,看看 --sync 选项。

2、使用包文件升级一个软件包

# pacman --upgrade foo.pkg.tar.gz
# pacman -U foo.pkg.tar.gz

本质上这和 --add 是一样的,但它会还有升级已安装的软件包而不需要额外的开销。我个人很难想像你

会宁愿用 --add 而不是 --upgrade。

3、卸载软件包

# pacman --remove foo
# pacman -R foo

这会卸载属于 foo 的所有文件,已编辑过的配置文件除外。只需提供包名就可以了,无需使用 tar.gz

的后缀。

如果需要完全卸载一个软件包,在上面的命令里加入 --nosave 选项就可以了。

4、更新软件包列表

# pacman --sync --refresh
# pacman -Sy

这将会从 /etc/pacman.conf 内定义的软件库中取得新的主软件包列表以及将它解压添加至数据库域。

在使用 --sysupgrade 之前你应该使用它来确保你得到的都是最新的软件包。取决于你 pacman.conf 的

设定,这个命令可能需要一个可用的因特网链接来接入基于 FTP 的软件库。它和 Debian 的 apt-get

update 命令很相似。

5、升级系统

# pacman --sync --sysupgrade
# pacman -Su

这个命令会将本地的软件包版本与通过 --refresh 下载的主软件包列表内的版本对比,然后升级系统内

所有过时的软件包。偶而运行这个命令可以让你的系统保持在最新的状态。注意:这个命令并不会更新

主软件包列表,所以通常较为聪明的做法是把它们联合在一起:

# pacman --sync --refresh --sysupgrade
# pacman -Syu
通过这些选项,pacman 将自动取得当前的主软件包列表和进行全面的系统升级,所有的依赖关系将会被

自动解决。你将想要经常的运行这个。

6、从软件库加入/升级一个软件包

# pacman --sync foo
# pacman -S foo

取得以及安装 foo 并满足它所有的依赖关系。在使用 sync 选项前,确认你已经更新了软件包列表,又

或是在安装前加入了 --refresh 或 -y 的选项。不同于 --add,--sync 的安装和升级并没有不同。取

决于你 pacman.conf 的设定,这个功能需要可用的因特网链接。

7、列出已安装的软件包

# pacman --query
# pacman -Q

显示系统内所有已安装软件包的列表。

8、查看指定软件包是否已安装

# pacman --query foo
# pacman -Q foo

你可以输入需要查找的名称而不是完整的软件名。如果 foo 已安装,那这个命令将会显示它的名称以及

9、显示指定软件包的信息

# pacman --query --info foo
# pacman -Qi foo

显示已安装软件包 foo 的信息(大小、安装日期、创建日期、依赖关系、冲突等)。显示一个未安装的

软件包的信息,可以加入 --file 或是 -p 选项,分别是:

# pacman --query --info --file foo.pkg.tar.gz
# pacman -Qip foo.pkg.tar.gz

10、显示软件包所包含的文件列表

# pacman --query --list foo
# pacman -Ql foo

列出属于 foo 软件包的所有文件。

11、查找指定文件所属的软件包# pacman --query --owns /path/to/file

# pacman -Qo /path/to/file
显示文件通过完整路径作为参数所引用的软件包名称和版本

用法

下面只是一个可执行操作的小部分示范,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}

安装包组

一些包属于一个可以同时安装的软件包组[broken link: invalid section]。例如,运行下面的命令

# 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 文件不会被删除。

升级软件包

警告: * 建议所有用户都 经常性的更新系统

一个 pacman 命令就可以升级整个系统。花费的时间取决于系统有多老。这个命令会同步非本地(local)软件仓库并升级系统的软件包:

# pacman -Syu

查询包数据库

pacman 使用 -Q 参数查询本地软件包数据库。参见:

$ pacman -Q --help

使用 -S 参数来查询远程同步的数据库。参见:

$ pacman -S --help

pacman 可以在包数据库中查询软件包,查询位置包含了软件包的名字和描述:

$ pacman -Ss string1 string2 ...

有时,-s的内置正则会匹配很多不需要的结果,所以应当指定仅搜索包名,而非描述或其他子段,下面的命令就会返回很多不必要结果:

$ pacman -Ss '^vim-'

要查询已安装的软件包:

$ pacman -Qs string1 string2 ...

按文件名查找软件库:

$ pacman -Fs string1 string2 ...

显示软件包的详尽的信息:

$ pacman -Si package_name

查询本地安装包的详细信息:

$ pacman -Qi package_name

使用两个 -i 将同时显示备份文件和修改状态:

$ pacman -Qii package_name

要获取已安装软件包所包含文件的列表:

$ pacman -Ql package_name

查询远程库中软件包包含的文件:

$ pacman -Fl package_name

检查软件包安装的文件是否都存在:

$ pacman -Qk package_name

两个参数k将会执行一次更彻底的检查。 查询数据库获取某个文件属于哪个软件包:

$ pacman -Qo /path/to/file_name

查询文件属于远程数据库中的哪个软件包:

$ pacman -Fo /path/to/file_name

要罗列所有不再作为依赖的软件包(孤立orphans):

$ pacman -Qdt

要罗列所有明确安装而且不被其它包依赖的软件包:

$ pacman -Qet

要显示软件包的依赖树:

$ pactree package_name

检查一个安装的软件包被那些包依赖,可以使用 pkgtoolsAUR中的whoneeds:

$ whoneeds package_name

或者pactree中使用-r:

$ pactree -r package_name

更多信息查看pacman tips

数据库结构

pacman数据库通常位于 /var/lib/pacman/sync. 对于每一个在/etc/pacman.conf中指定的软件仓库, 这里都有一个一致的数据库。数据库文件夹里每个tar.gz文件都包含着一个仓库的软件包信息。例如which 包:

% tree which-2.20-6
which-2.20-6
|-- depends
`-- desc

这个 depends 项列出了该软件的依赖包, 而desc有该包的介绍,例如文件大小和MD5值 。

清理软件包缓存

pacman 将下载的软件包保存在 /var/cache/pacman/pkg/ 并且不会自动移除旧的和未安装版本的软件包,因此需要手动清理,以免该文件夹过于庞大。

使用内建选项即可清除未安装软件包的缓存:

# pacman -Sc
警告:
  • 仅在确定当前安装的软件包足够稳定且不需要降级时才执行清理。pacman -Sc仅会保留软件包的当前有效版本,旧版本的软件包被清理后,只能从其他地方如 Arch Linux Archive (简体中文)中获取了。
  • pacman -Scc 可以清理所有缓存,但这样 pacman 在重装软件包时就只能重新下载了。除非空间不足,否则不应这么做。

由于以上种种局限,建议使用专门的脚本去处理清理哪些、清理多少缓存:

pacman-contrib 提供的 paccache 命令默认会删除近3个版本前的软件包

# paccache -r
Tip: 可以使用 pacman hooks 自动执行清理,这里是参考示例。

也可以自己设置保留最近几个版本:

# paccache -rk 1

清理所有未安装包的缓存文件,再此运行paccache:

# paccache -ruk0

更多功能参见paccache -h

paccache,还可以使用 Arch User Repository 中的 pkgcachecleanAUR

# pkgcacheclean

,以及pacleanerAUR,这两个是未来的替代工具.

其它命令

升级系统时安装其他软件包:

# pacman -Syu package_name1 package_name2 ...

下载包而不安装它:

# pacman -Sw package_name

安装一个本地包(不从源里下载):

# pacman -U /path/to/package/package_name-version.pkg.tar.xz

要将本地包保存至缓存,可执行:

# pacman -U file://path/to/package/package_name-version.pkg.tar.xz

安装一个远程包(不在 pacman 配置的源里面):

# pacman -U http://www.example.com/repo/example.pkg.tar.xz

要禁用 -S, -U-R 动作,可以使用 -p 选项.

pacman 会列出需要安装和删除的软件,并在执行动作前要求需要的权限。

安装原因

pacman数据库按照软件包被安装的原因,将其分为两类:

  • 指定安装包:通过pacman-S或者-U指令安装的软件包。
  • 依赖包:指定安装包所依赖的软件包,尽管命令中未传入,但仍然会被安装。

当安装软件包时,可以把安装原因指定设为依赖:

# pacman -S --asdeps package_name

但是当重新安装该软件包时,安装原因将会被设为软件包所默认的。 指定安装的软件包列表可用pacman -Qe, 已安装的依赖包可用pacman -Qd获取。 改变某个已安装软件包的安装原因,可以执行:

# pacman -D --asdeps package_name

使用--asexplicit改为指定安装

查询一个包含具体文件的包名

同步文件数据库:

# pacman -Fy

查询包含某个文件的包名,比如:

# pacman -Fs pacman
core/pacman 5.0.1-4
usr/bin/pacman
usr/share/bash-completion/completions/pacman
extra/xscreensaver 5.36-1
usr/lib/xscreensaver/pacman
提示: 可以设置一个 crontab 或者 systemd timer 来定期同步文件信息数据库。

如果需要高级功能请安装 pkgfile,它使用一个单独的数据库来保存文件和它们所关联的软件包的信息。

配置

pacman 的配置文件位于/etc/pacman.confman pacman.conf 可以查看配置文件的进一步信息。

通用选项

通用选项都在[options]段。阅读 man 手册或者查看默认的 pacman.conf 可以获得有关信息和用法。

升级前对比版本

要查看旧版和新版的有效安装包,请取消/etc/pacman.conf中"VerbosePkgLists"的注释。修改后的pacman -Syu输出如下:

Package (6)             Old Version  New Version  Net Change  Download Size

extra/libmariadbclient  10.1.9-4     10.1.10-1      0.03 MiB       4.35 MiB
extra/libpng 1.6.19-1 1.6.20-1 0.00 MiB 0.23 MiB
extra/mariadb 10.1.9-4 10.1.10-1 0.26 MiB 13.80 MiB

彩色输出

Pacman 具有颜色选项,取消 "Color" 行的注释即可.

不升级软件包

如果由于某种原因,用户不希望升级某个软件包,可以加入内容如下:

IgnorePkg = 软件包名

多软件包可以用空格隔开,也可是用 glob 模式。如果只打算忽略一次升级,可以使用 --ignore 选项。

忽略了的软件包可通过 pacman -S 升级。

不升级软件包组

和软件包一样,也可以不升级某个软件包组:

IgnoreGroup = gnome

跳过软件包文件

Warning: 跳过软件包时请考虑清楚,Arch 官方并不支持 部分更新

要跳过某些文件夹的安装,可以将它们放到 NoExtract 中,例如不想安装 systemd unit 文件:

NoExtract=usr/lib/systemd/system/*

后面的规则覆盖前面的规则,加上 ! 可以取消跳过效果.

保留多个配置文件

如果你有多个配置文件(比如,主配置和测试testing仓库生效的配置文件),需要共享一些设置:

Include = /path/to/common/settings

/path/to/common/settings文件中是两个配置文件共享的相同配置。

Hooks

pacman可以在更新安装前后时,运行/usr/share/libalpm/hooks/文件夹下的hooks,更多的hooks文件夹HooDir可以在pacman.conf中设置,默认/etc/pacman.d/hooks。Hook文件必须以.hook结尾。

软件仓库

除了特殊的options[broken link: invalid section]section, 每个pacman.conf中的section都定义了一个使用的软件包仓库,仓库是多个软件包的逻辑上的集合,他们物理上存储在一个或多个服务器:这也是为什么每一个服务器都叫做这个仓库的镜像

仓库区分为官方]与[Unofficial user repositories|非官方两类。配置文件中仓库的顺序十分重要;当几个仓库出现同名安装包,不管版本号是否相同,pacman将使用配置文件中排前的仓库。upgrade[broken link: invalid section]升级整个系统,来让新添加的仓库生效。

每个仓库设置都可以直接指定镜像列表或者Include引用其他的文件:例如,官方镜像引用了/etc/pacman.d/mirrorlist/。具体查看Mirrors

软件包的安全性

pacman 4 支持软件包签名。语句 SigLevel = Required DatabaseOptional 将启用全局签名验证,但会被每个软件仓库的 SigLevel 行所覆盖。详情参见 pacman-key.

一般注意事项

警告: 小心使用 --force 开关。使用不当会造成大问题。 请在 Arch 新闻里要求这么做的时候才用。

pacman 附带了许多实用工具能让系统使用更加便捷。所有工具功能都能通过 --help 开关查看。运行:

$ pacman -Ql pacman | awk -F"[/ ]" '/\/usr\/bin/ {print $5}'

查看完整列表

问题解决

升级时遇到问题: "file exists in filesystem"(conflicting files)!

如果碰到这个帖子的错误:

error: could not prepare transaction
error: failed to commit transaction (conflicting files)
package: /path/to/file exists in filesystem
Errors occurred, no packages were upgraded.

发生了什么事: pacman 检测到文件冲突,而且按照设计,pacman 不会覆盖文件。这是设计功能,不是缺陷。

先用 (pacman -Qo 文件的完整路径 检查哪个软件包提供了文件。如果是其它软件包,请报告问题。如果不是其它软件包提供,将已经存在的文件重命名并重新升级。如果一切顺利,可以删掉备份文件。

如果是通过 make install 等非 pacman 方式安装的软件,安装的文件不属于任何软件包!需要先手动删除这些文件,这样就可以正常安装软件了。不属于任何软件包的文件列表一文中提供了查找这些文件的脚本。

每一个安装的软件包都会提供一个 /var/lib/pacman/local/$package-$version/files 文件,包含此软件包的元数据。如果文件损坏或者丢失,将会导致升级时出现file exists in filesystem 错误。此错误通常只会影响一个软件包,除了手动删除或移动所有的问题文件,可以作为特例使用pacman -S --force $packagepacman 强制覆盖这些文件。

警告: --force 选项非常危险,建议在 Arch 新闻中明确通知的时候才使用它,否则可能导致系统无法启动。

"failed to commit transaction (invalid or corrupted package" 错误

看看/var/cache/pacman/pkg中是否有*.part结尾的文件,它们是没有完全下载的文件,删除它们并重新执行更新。这些程序一般是自定义的XferCommand 下载命令造成的。

# find /var/cache/pacman/pkg/ -iname "*.part" -exec rm {} \;

"error: failed to init transaction (unable to lock database)" 错误

pacman 在更新软件包数据库前,比如安装软件包时会创建一个文件锁 /var/lib/pacman/db.lck。该文件会阻止其他 pacman 实例在同一时间修改软件包数据库。如果 pacman 在更新数据库时收到干扰,旧锁会一直存在。如果确认 pacman 没有在运行,那么删掉文件锁:

# rm /var/lib/pacman/db.lck

安装时无法获取软件包

错误内容包含:Not found in sync db, Target not foundFailed retrieving file.

首先确认软件包确实存在(并注意错别字)。如果确认软件包存在,可能本地数据库过时了或者软件仓库没有配置好,试试 pacman -Syyu 强制数据库更新和升级。

也有可能包含该软件包的软件仓库没有启动。例如,该软件包可能在 multilib 仓库里,但该仓库没有在 pacman.conf 中启用。

参阅FAQ#Why is there only a single version of each shared library in the official repositories?.

pacman 重复升级同一个包

注意: pacman 版本 3.4 在遇到重复条目时会显示错误,因此这个问题过时了。

这是因为在 /var/lib/pacman/local/ 有重复的条目,例如有两个 linux 条目。pacman -Qi 输出正确的版本,但是 pacman -Qu 识别了旧版本,因此尝试升级。

解决方法:删除 /var/lib/pacman/local/ 中多余的条目。

pacman 完全坏掉,如何修复?

如果 pacman 完全坏掉不能使用,需要手动下载或构建需要的软件包(openssl, libarchivepacman) 并解压到根目录。pacman 会和默认配置文件一起恢复。之后,用 pacman 重新安装这些软件包以保证数据库的完整性。

pacman 更新时崩溃

如果 pacman 在删除、重新安装或更新软件包时 "数据库写入" 出错:

  1. 从 Arch 安装媒体启动,最好用最新的安装媒体
  2. 挂载根文件系统,通过 df -h 确认根文件目录包含足够的空间
  3. 如果系统使用默认的数据库目录位置,可以通过root用户执行下面命令pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syyu
  4. 更新之后,可以通过下面命令确认是否还存在损坏的包:find /mnt/usr/lib -size 0
  5. 通过下面命令重新安装依然损坏的软件包:pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S package.

pacman crashes the official installation media

The official installation media (ISO) before version 10.2015 are not setup to be updated itself at runtime. Running pacman -Syu from a booted install media console may crash unexpectedly any time, as soon as memory is depleted. This happens because the install media image build reports an arbitrary capacity (of 32GB) to pacman, regardless of available free memory.[1] At the same time the ISO reserves only a low static memory allotment for operations (/run/archiso/cowspace of 256MB RAM) of the live system, in order to allow installation on machines with low resources. If the machine has more RAM available, you can override the allotment by setting the cow_spacesize= kernel option for the ISO manually, e.g. cow_spacesize=2GB.

If you use the install media to update an installed system, you simply have to use the --root= option along with a --cachedir= path to point pacman to available real storage. For example, see #pacman 更新时崩溃.

If you require an install media with persistent dataspace, the Archiso build script can be used to create one along with its boot options.

升级系统重启后,出现"unable to find root device"错误,无法登陆

很有可能 initramfs 在内核升级时损坏,例如错误的使用 pacman--force 选项。有两个选择:

Fallback 启动项

提示: 如果删除了此启动项,可以在启动时进入启动加载器的手动模式,将 initramfs 修改为 initramfs-linux-fallback.img 继续启动。

如果系统可以启动,运行如下命令可以生产原始内核 linux 的 initramfs:

# mkinitcpio -p linux

Chroot 修复

如果上面方法不行,请下载最新的安装程序进行启动,执行:

# mount /dev/sdxY /mnt         #Your root partition.
# mount /dev/sdxZ /mnt/boot #If you use a separate /boot partition.
# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd-tools linux

重新安装内核(linux 软件包)将会自动运行 mkinitcpio -p linux 重新生成 initramfs 镜像,不需要单独生成。

之后建议执行 exit, umount /mnt/{boot,} 然后 reboot.

Note: 如果无法进入 arch-chroot 或 chroot 环境,但是需要重新安装软件包,可以使用 pacman -r /mnt -Syu foo bar

Signature from "User <email@gmail.com>" is unknown trust, installation failed

试试以下途径:

  • 更新已知密钥:pacman-key --refresh-keys;
  • 手动升级archlinux-keyring软件包:pacman -Sy archlinux-keyring && pacman -Su.
  • 查看pacman-key#Resetting all the keys.

Request on importing PGP keys

If installing Arch with an outdated ISO, you are likely prompted to import PGP keys. Agree to download the key to proceed. If you are unable to add the PGP key successfully, update the keyring or upgrade archlinux-keyring (see above).

Error: key "0123456789ABCDEF" could not be looked up remotely

If packages are signed with new keys, which were only recently added to archlinux-keyring, these keys are not locally available during update (chicken-egg-problem). The installed archlinux-keyring does not contain the key, until it is updated. Pacman tries to bypass this by a lookup through a key-server, which might not be possible e.g. behind proxys or firewalls and results in the stated error. Upgrade archlinux-keyring first as shown above.

不停看到错误 "PackageName: signature from "User <email@archlinux.org>" is invalid"

When the system time is faulty, signing keys are considered expired (or invalid) and signature checks on packages will fail with the following error:

error: PackageName: signature from "User <email@archlinux.org>" is invalid
error: failed to commit transaction (invalid or corrupted package (PGP signature))
Errors occured, no packages were upgraded.

Make sure to correct the system time, for example with ntpd -qg run as root, and run hwclock -w as root before subsequent installations or upgrades.

'warning: current locale is invalid; using default "C" locale' 错误

错误信息已经很明确了,locale 设置不正确,请阅读Locale进行设置。

pacman不使用我的代理设置

正确设置环境变量($http_proxy, $ftp_proxy etc.)如果使用sudo,需要让 sudo 将这些变量传递给 pacman.

如何重装所有包并保留安装和依赖信息?

重装所有软件包:pacman -S $(pacman -Qnq)-S 选项会保留安装缘由)。

接着需要重装外来包(不在官方仓库里的软件包)。外来包可通过pacman -Qmq查看。

"Cannot open shared object file" 错误

It looks like previous pacman transaction removed or corrupted shared libraries needed for pacman itself.

To recover from this situation you need to unpack required libraries to your filesystem manually. First find what package contains the missed library and then locate it in the pacman cache (/var/cache/pacman/pkg/). Unpack required shared library to the filesystem. This will allow to run pacman.

需要重新安装损坏的软件包. Note that you need to use --force flag as you just unpacked system files and pacman does not know about it. pacman will correctly replace our shared library file with one from package.

That's it. Update the rest of the system.

软件包下载停滞

Some issues have been reported regarding network problems that prevent pacman from updating/synchronizing repositories. [2] [3] When installing Arch Linux natively, these issues have been resolved by replacing the default pacman file downloader with an alternative (see Improve pacman performance for more details). When installing Arch Linux as a guest OS in VirtualBox, this issue has also been addressed by using Host interface instead of NAT in the machine properties.

无法从镜像服务器获取 'core.db'

如果从正确的镜像服务器收到此错误,请换一个域名解析服务器

上一篇:LAMP环境配置踩坑2外网无法访问


下一篇:[笔记]用gdb调试core dump