1. Pacnew_and_Pacsave
 1.1 查找.pac *文件
  1.1.1 要在/etc存储大多数全局配置的位置进行搜索:
  1.1.2 也可以使用locate
  1.1.3 使用pacman的日志查找它们:
 1.2 管理.pac*文件 pacdiff
 1.3 paddiff帮助
2. pacman-contrib

1. Pacnew_and_Pacsave

https://wiki.archlinux.org/index.php/Pacman/Pacnew_and_Pacsave
*.pacnew文件
在软件包升级期间pacman -Syu (也有覆盖安装时pacman -S upacman -U), 为避免覆盖已存在的用户先前修改过的文件, 会创建一个.pacnew文件。发生这种情况时,pacman的输出中将显示以下消息:
  warning: /etc/pam.d/usermod installed as /etc/pam.d/usermod.pacnew
*.pacsave文件
当卸载一个软件包(pacman -R), 或者upgrade(必须先removed)一个软件包时, 会创建.pacsave文件. When the pacman database has a record that a certain file owned by the package should be backed up, it will create a .pacsave file. 生这种情况时,pacman的输出中将显示以下消息:
  warning: /etc/pam.d/usermod saved as /etc/pam.d/usermod.pacsave

1.1 查找.pac *文件

Pacman不会自动处理.pacnew文件:您必须自己维护这些文件。要发现是否已安装任何.pac *文件,请使用以下方法之一:

1.1.1 要在/etc存储大多数全局配置的位置进行搜索:

$ find /etc -regextype posix-extended -regex ".+\.pac(new|save)" 2> /dev/null
/etc/locale.gen.pacnew
/etc/shadow.pacnew
/etc/pacman.conf.pacnew
/etc/security/limits.d/10-gcr.conf.pacnew
/etc/default/grub.pacnew
/etc/pacman.d/mirrorlist.pacnew
/etc/nftables.conf.pacnew

1.1.2 也可以使用locate

$ sudo updatedb
$ locate --existing --regex "\.pac(new|save)$"
/etc/locale.gen.pacnew
/etc/nftables.conf.pacnew
/etc/pacman.conf.pacnew
/etc/shadow.pacnew
/etc/default/grub.pacnew
/etc/pacman.d/mirrorlist.pacnew
/etc/security/limits.d/10-gcr.conf.pacnew

1.1.3 使用pacman的日志查找它们:

$ grep --extended-regexp "\.pac(new|save)" /var/log/pacman.log
...
[2020-06-25T04:58:54+0800] [ALPM] warning: /etc/pacman.d/mirrorlist installed as /etc/pacman.d/mirrorlist.pacnew

1.2 管理.pac*文件 pacdiff

pacman-contrib提供了用于管理 .pac *文件的简单 pacdiff工具。它将搜索所有 .pacnew和 .pacsave文件,并要求对它们进行任何操作。默认情况下,它使用 vimdiff,但您可以使用指定其他工具。有关其他常见的比较工具,请参见应用程序/实用程序列表#比较,差异,合并。 DIFFPROG=your_editor pacdiff
https://wiki.archlinux.org/index.php/List_of_applications/Utilities#Comparison,_diff,_merge
仅打印出待处理文件
$ pacdiff -l -o
/etc/locale.gen.pacnew
/etc/nftables.conf.pacnew
/etc/pacman.conf.pacnew
/etc/shadow.pacnew
/etc/default/grub.pacnew
/etc/pacman.d/mirrorlist.pacnew
/etc/security/limits.d/10-gcr.conf.pacnew
使用meld作为合并程序处理/etc目录下的*.pac*文件
$ sudo DIFFPROG=meld DIFFSEARCHPATH="/etc" pacdiff
==> pacnew file found for /etc/shadow
:: (V)iew, (S)kip, (R)emove pacnew, (O)verwrite with pacnew, (Q)uit: [v/s/r/o/q] v
r
:: (V)iew, (S)kip, (R)emove pacnew, (O)verwrite with pacnew, (Q)uit: [v/s/r/o/q] removed '/etc/shadow.pacnew'
==> pacnew file found for /etc/security/limits.d/10-gcr.conf
...
命令会逐个列出每一个待处理文件:
输入(v) 回车, 查看差异:
  程序会自动打开meld对比软件, 这里可以手动逐条同步文件, 有时新的配置文件会由于软件的新功能添加新的属性项目, 这时候可以合并到在用的配置文件中,
  然后保存, 退出meld软件后. 进入下一步. (通过(v)打开meld软件查看差异, 不管是否修改保存, 退出后还是等待处理同一对文件.)

  • 如果已经手动合并保存了, 这个*.pac*文件就没用了, 可以使用(r) 回车, 删除该*.pac*文件. 然后开始处理下一对文件.
  • 如果在用的配置文件并没有什么自定义的修改, 可以使用(o) 回车, 使用*.pac*文件覆盖旧的配置文件. 然后开始处理下一对文件.
  • 或者使用(s) 回车, 跳过, 以后在说...

1.3 paddiff帮助

$ pacdiff --help A simple program to merge or remove pacnew/pacsave files. 合并或删除pacnew/pacsave文件的简单程序。
pacdiff v1.3.0 Usage: pacdiff [-l | -f | -p] [--nocolor]  
Search Options: select one (default: --pacmandb) 选择一个(默认值:-pacmandb)
-l/--locate scan using locate 使用定位扫描
-f/--find scan using find 使用查找扫描
-p/--pacmandb scan active config files from pacman database 扫描pacman数据库中的活动配置文件
General Options:    
-o/--output print files instead of merging them 打印文件而不是合并文件
--nocolor remove colors from output 从输出中删除颜色
Environment Variables:    
DIFFPROG override the merge program: (default: 'vim -d') 覆盖合并程序:(默认值:'vim -d')
DIFFSEARCHPATH override the search path. (only when using find) (default: /etc) 覆盖搜索路径。 (仅在使用查找时)

 

2. pacman-contrib

pacman-contrib包含的命令:

checkupdates 检测更新(-Sy)
paccache 清理缓存($ sudo paccache -rk1)
pacdiff 对比管理pac*配置文件($ pacdiff -l -o)
paclist 按库repository列出包
paclog-pkglist 列出所有安装包(pacman -Q)
pacscripts 查看安装脚本
pacsearch 搜索包(pacman -Ss)
pacsort 实现alpm_pkg_vercmp的排序实用程序
pactree 依赖树
rankmirrors 通过连接和打开速度对pacman镜子进行排名。
Pacman镜像文件位于/etc/pacman.d/中。
如果提供了URL,它也可以排名一个镜像。
updpkgsums  


$ paclog-pkglist |wc -l
779

$ sudo paccache -rk1
==> finished: 16 packages removed (disk space saved: 230.82 MiB)
$ sudo pacman -Sc
Packages to keep:
  All locally installed packages
Cache directory: /var/cache/pacman/pkg/
:: Do you want to remove all other packages from cache? [Y/n] y
removing old packages from cache...
Database directory: /var/lib/pacman/
:: Do you want to remove unused repositories? [Y/n] y
removing unused sync repositories...

$ paclog-pkglist |wc -l
779

$ sudo paccache -rk1
==> finished: 16 packages removed (disk space saved: 230.82 MiB)
$ sudo pacman -Sc
Packages to keep:
  All locally installed packages
Cache directory: /var/cache/pacman/pkg/
:: Do you want to remove all other packages from cache? [Y/n] y
removing old packages from cache...
Database directory: /var/lib/pacman/
:: Do you want to remove unused repositories? [Y/n] y
removing unused sync repositories...

$ paclist community |wc -l
104
$ paclist core |wc -l
175
$ paclist extra |wc -l
499

$ pacscripts vlc
==> ERROR: Package vlc does not include any .INSTALL script
$ pacscripts chromium
post_upgrade() {
  if (($(vercmp $2 42.0.2311.90-1) < 0)); then
...
  fi
}
# vim:set ts=2 sw=2 et:

$ checkupdates
ca-certificates-mozilla 3.53.1-1 -> 3.54-1
curl 7.70.0-1 -> 7.71.0-1
gtk-update-icon-cache 1:3.24.20-1 -> 1:3.24.21-1
gtk3 1:3.24.20-1 -> 1:3.24.21-1
imagemagick 7.0.10.21-1 -> 7.0.10.22-1
libfontenc 1.1.4-2 -> 1.1.4-3
libglvnd 1.3.1-1 -> 1.3.2-1
libwacom 1.3-1 -> 1.4-2
nspr 4.25-1 -> 4.26-1
nss 3.53.1-1 -> 3.54-1
perl-http-message 6.24-2 -> 6.25-1
unrar 1:5.9.3-2 -> 1:5.9.4-1

$ sudo pacman -Syu
:: Synchronizing package databases...
 core                                                     134.5 KiB   193 KiB/s 00:01 [#################################################] 100%
 extra                                                   1698.5 KiB   765 KiB/s 00:02 [#################################################] 100%
 community                                                  5.0 MiB  1190 KiB/s 00:04 [#################################################] 100%
:: Starting full system upgrade...
:: Replace intel-tbb with extra/tbb? [Y/n] y
resolving dependencies...
looking for conflicting packages...
Package (16)                           Old Version     New Version     Net Change  Download Size
core/ca-certificates-mozilla           3.53.1-1        3.54-1           -0.02 MiB       0.32 MiB
core/curl                              7.70.0-1        7.71.0-1          0.02 MiB       1.01 MiB
extra/gtk-update-icon-cache            1:3.24.20-1     1:3.24.21-1       0.00 MiB       0.01 MiB
extra/gtk3                             1:3.24.20-1     1:3.24.21-1       0.19 MiB      11.24 MiB
extra/imagemagick                      7.0.10.21-1     7.0.10.22-1       0.03 MiB       2.52 MiB
intel-tbb                              2020.2-1                         -2.18 MiB               
extra/tbb                                              2020.2-1          2.18 MiB       0.38 MiB
extra/libfontenc                       1.1.4-2         1.1.4-3           0.00 MiB       0.02 MiB
extra/libglvnd                         1.3.1-1         1.3.2-1           0.01 MiB       0.36 MiB
extra/libwacom                         1.3-1           1.4-2            -0.01 MiB       0.09 MiB
core/nspr                              4.25-1          4.26-1            0.00 MiB       0.20 MiB
core/nss                               3.53.1-1        3.54-1            0.01 MiB       1.45 MiB
extra/perl-http-message                6.24-2          6.25-1            0.00 MiB       0.07 MiB
extra/unrar                            1:5.9.3-2       1:5.9.4-1         0.00 MiB       0.14 MiB
extra/xorg-fonts-encodings                             1.0.5-2           0.61 MiB       0.55 MiB

Total Download Size:    18.40 MiB
Total Installed Size:  100.52 MiB
Net Upgrade Size:        0.85 MiB
:: Proceed with installation? [Y/n]