0. 参考原文 1. 查询 1.1 pacman -Q 选项(查询已安装的包,多个过滤器) 1.2 pacman -F 选项(文件数据库查询) 1.3 Pactree 树状显示依赖项 1.4 pacreport列出未拥有的文件 1.5 /etc/pacreport.conf 1.6 pac* 1.7 paclog查看日至 2. 进阶查询语句(个别不支持fish,请在bash下运行) 2.1 列出所有已安装的软件包及其各自的大小 2.2 要列出明确安装的软件包(不在base元软件包或组 base-devel中),包含大小和说明: 2.3 要列出几个软件包的下载大小(packages留空以列出所有软件包): 2.4 列出标记为升级的软件包及其下载大小 2.5 使用expac列出最后安装的20个软件包,请运行: 2.6 明确安装的但不在base元软件包的软件: 2.7 列出不在base 元软件包或base-devel 软件包组中的显式安装的软件包: 2.8 列出所有其他软件包不需要的安装软件包,这些软件包不在基本 meta软件包或base-devel软件包组中: 2.9 列出所有不在指定存储库repo_name中的已安装软件包 2.a 列出repo_name存储库中的所有已安装软件包: 2.b 列出Arch Linux ISO上所有不在base元软件包中的软件包: 2.c 列出开发包(不稳定包) 2.d 浏览包(互动:左边列表,右边描述) 2.e 识别任何软件包都不拥有的文件 2.f 获取几个软件包的依赖项列表 2.g 列出更改的备份文件 3. pacman进阶选项 3.1 几个可以双写的选项[谨慎使用] 3.2 安装原因[避免使用] 3.3 指定文件安装[避免使用] 4. 删除 4.1 卸载已安装软件 4.2 清理缓存的安装包文件 4.3 删除未使用的软件包(孤立的) 4.4 除去必要软件包以外的所有软件 4.5 重新安装所有软件包 4.6 列出软件包中所有更改的文件 5. [避免使用]某些pacman命令 6. 包装安全Pacman-key
0. 参考原文
pacman: https://wiki.archlinux.org/index.php/Pacman
pacman 提示和技巧: https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks
Arch Linux 系统维护: https://wiki.archlinux.org/index.php/System_maintenance
pacman-key: https://wiki.archlinux.org/index.php/Pacman-key
https://wiki.archlinux.org/index.php/Pacman/Package_signing
1. 查询
1.1 pacman -Q 选项(查询已安装的包,多个过滤器)
$ pacman -Q | [filter] 选项描述 | 中文翻译 |
-d, --deps | list packages installed as dependencies [filter] | 列出安装为依赖项的软件包[过滤器] |
-e, --explicit | list packages explicitly installed [filter] | 列出明确安装的软件包[过滤器] |
-m, --foreign | list installed packages not found in sync db(s) [filter] | 列出已安装的非官方库软件包 |
-n, --native | list installed packages only found in sync db(s) [filter] | 列出已安装的官方库软件包 |
-t, --unrequired | list packages not (optionally) required by any package (-tt to ignore optdepends) [filter] |
列出任何软件包都不要求(可选)的软件包 (-tt忽略optdepends)[过滤器] |
-u, --upgrades | list outdated packages [filter] | 列出过期的软件包[过滤器] |
-o, --owns <file> | query the package that owns <file> | 查询拥有<file>的软件包 |
$ pacman -Qm 列出已安装的非官方库软件包(通常是手动下载并安装或包裹从仓库取出)
1.2 pacman -F 选项(文件数据库查询)
搜索包含特定文件的软件包
同步文件数据库:
$ sudo pacman -Fy
搜索包含文件的软件包,例如:
$ sudo pacman -F iw
core/iw 5.4-1 [installed]
usr/bin/iw
或者:
$ sudo pacman -Qo iw
/usr/bin/iw is owned by iw 5.4-1
列出查询包所拥有的文件
$ sudo pacman -Fl iw
iw usr/
iw usr/bin/
iw usr/bin/iw
iw usr/share/
iw usr/share/man/
iw usr/share/man/man8/
iw usr/share/man/man8/iw.8.gz
或者:
$ sudo pacman -Ql iw
iw /usr/
iw /usr/bin/
iw /usr/bin/iw
iw /usr/share/
iw /usr/share/man/
iw /usr/share/man/man8/
iw /usr/share/man/man8/iw.8.gz
1.3 Pactree 树状显示依赖项
要查看程序包的依赖关系树:
$ pactree iw
iw
└─libnl
└─glibc
├─linux-api-headers provides linux-api-headers>=4.10
├─tzdata
└─filesystem
└─iana-etc
反向查看
$ pactree -r iw
iw
这个结果表示没有任何其他软件依赖iw,若不需要,可以直接删除.也就是pacman -Qt选项能够查到的内容.
$ pacman -F pactree
community/pacman-contrib 1.3.0-2 [installed]
usr/bin/pactree
$ pacman -Qo pactree
/usr/bin/pactree is owned by pacman-contrib 1.3.0-2
找到pactree来自pacman-contrib, 再看看这个包里还有什么?
$ pacman -Fl pacman-contrib
$ pacman -Ql pacman-contrib |grep bin
pacman-contrib /usr/bin/checkupdates
pacman-contrib /usr/bin/paccache
pacman-contrib /usr/bin/pacdiff
pacman-contrib /usr/bin/paclist
pacman-contrib /usr/bin/paclog-pkglist
pacman-contrib /usr/bin/pacscripts
pacman-contrib /usr/bin/pacsearch
pacman-contrib /usr/bin/pacsort
pacman-contrib /usr/bin/pactree
pacman-contrib /usr/bin/rankmirrors
pacman-contrib /usr/bin/updpkgsums
1.4 pacreport列出未拥有的文件
$ sudo pacreport --unowned-files
/etc/.pwd.lock
/etc/.updated
...
/var/spool/cups/c00027
/var/spool/cups/tmp/.cache/
Unneeded Packages Installed Explicitly:
...
xfdesktop 2.43 M (xfce4)
xfwm4-themes 3.53 M (xfce4)
xorg-server 4.30 M (xorg)
youtube-dl 12.59 M
zip 558.12 K
Unneeded Packages Installed As Dependencies:
Installed Packages Not In A Repository:
Missing Group Packages:
Package Cache Size:
$ sudo pacreport --unowned-files |wc -l
373
如下, pacreport属于pacutils
$ pacman -Qo pacreport
/usr/bin/pacreport is owned by pacutils 0.9.0-1
$ pacman -F pacreport
community/pacutils 0.9.0-1 [installed]
usr/bin/pacreport
列出这个包里的其他命令
$ pacman -Fl pacutils |wc -l
53
$ pacman -Ql pacutils |grep bin
pacutils usr/bin/paccapability
pacutils usr/bin/paccheck
pacutils usr/bin/pacconf
pacutils usr/bin/pacfile
pacutils usr/bin/pacinfo
pacutils usr/bin/pacini
pacutils usr/bin/pacinstall
pacutils usr/bin/paclock
pacutils usr/bin/paclog
pacutils usr/bin/pacremove
pacutils usr/bin/pacrepairdb
pacutils usr/bin/pacrepairfile
pacutils usr/bin/pacreport
pacutils usr/bin/pacsift
pacutils usr/bin/pacsync
pacutils usr/bin/pactrans
1.5 /etc/pacreport.conf
跟踪软件包创建的未拥有文件
大多数系统会在正常操作过程中缓慢收集一些ghost文件,例如状态文件,日志,索引等。
http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html#S3-RPM-INSIDE-FLIST-GHOST-DIRECTIVE
从pacutils包的pacreport命令可用于通过跟踪这些文件及其关联/etc/pacreport.conf(参见pacreport(1) )。
https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks#Tracking_unowned_files_created_by_packages
https://jlk.fjfi.cvut.cz/arch/manpages/man/pacreport.1#FILES
INI样式的配置文件列出了与--unowned-files一起运行时要忽略的路径。
- 可以在“[Options]”部分中使用“ IgnoreUnowned”指定应始终忽略的路径。
- 可以在“[PkgIgnoreUnowned]”部分列出仅在安装了特定软件包的情况下才应忽略的路径,使用软件包名称作为选项名称,并忽略路径作为值。
- 可以多次指定所有选项。路径可能包括外壳样式的glob。安装根目录不应包含在路径中。
/etc/pacreport.conf
[Options]
IgnoreUnowned = home/*
IgnoreUnowned = proc/*
IgnoreUnowned = mnt/*
[PkgIgnoreUnowned]
grub = boot/grub/*
linux = boot/initramfs-linux-fallback.img
linux = boot/initramfs-linux.img
linux = boot/vmlinuz-linux
pacman = var/lib/pacman/local
pacman = var/lib/pacman/sync
1.6 pac*
Pkg | /bin/pac… | des | cn |
pacman | pacman | Package manager utility | 包管理器实用程序 |
pacman-conf | Query pacman's configuration file | 查询pacman的配置文件 | |
pacman-db-upgrade | Executable, Upgrade the local pacman database to a newer format | 可执行,将本地pacman数据库升级为较新的格式 | |
pacman-key | Manage pacman's list of trusted keys | 管理pacman的受信任密钥列表 | |
pacman-contrib | paccache | Flexible pacman cache cleaning utility | 灵活的pacman缓存清理实用程序 |
pacdiff | Pacorig, pacnew and pacsave maintenance utility | Pacorig,pacnew和pacsave维护实用程序 | |
paclist | Executable, List all packages installed from a given repository | 可执行,列出从给定存储库安装的所有软件包 | |
paclog-pkglist | Executable, Parse a log file into a list of currently installed packages | 可执行,将日志文件解析为当前已安装软件包的列表 | |
pacscripts | Executable, Prints the {pre,post}_{install,remove,upgrade} scripts of a given package. | 可执行,打印给定软件包的{pre,post}_{install,remove,upgrade}脚本。 | |
pacsearch | Executable, Perform a pacman search using both the local and the sync databases. | 可执行,同时使用本地和同步数据库执行pacman搜索 | |
pacsort | Sort utility implementing alpm_pkg_vercmp | 排序工具,实现alpm_pkg_vercmp | |
pactree | Package dependency tree viewer | 包依赖关系树查看器 | |
pacmatic | pacmatic | PACMATIC performs a bunch of mundane tasks that you must do before every invocation of Pacman... | PACMATIC执行一堆平凡的任务,您必须在每次调用Pacman之前执行这些任务。 |
pacutils | paccapability | Query libalpm capabilities | 查询libalpm功能 |
paccheck | Check installed packages | 检查已安装的软件包 | |
pacconf | Query pacman's configuration file | 查询pacman的配置文件 | |
pacfile | Display information about package files | 显示有关软件包文件的信息 | |
pacinfo | Display package information | 显示包装信息 | |
pacini | Query pacman-style configuration files | 查询pacman风格的配置文件 | |
pacinstall | Install/remove alpm packages | 安装/删除alpm软件包 | |
paclock | Executable, lock/unlock the alpm database | 可执行,锁定/解锁alpm数据库 | |
paclog | Filter pacman log entries | 过滤pacman日志条目 | |
pacremove | Install/remove alpm packages | 安装/删除alpm软件包 | |
pacrepairdb | Fix corrupted database entries | 修复损坏的数据库条目 | |
pacrepairfile | Reset properties on alpm-managed files | 重置Alpm托管文件的属性 | |
pacreport | Display a summary of installed packages | 显示已安装软件包的摘要 | |
pacsift | Query and filter packages | 查询和过滤包 | |
pacsync | Update sync databases | 更新同步数据库 | |
pactrans | Install/remove alpm packages | 安装/删除alpm软件包 |
$ paclist core |wc -l
172
$ paclist extra |wc -l
508
$ paclist community |wc -l
96
1.7 paclog查看日至
$ cat /var/log/pacman.log
$ sudo journalctl -r |grep pacman |more
$ paclog --help
paclog - filter pacman log entries
usage: paclog [options] [filters]
options: | ||
--config=<path> | set an alternate configuration file | 设置备用配置文件 |
--root=<path> | set an alternate installation root | 设置备用安装根目录 |
--sysroot=<path> | set an alternate installation system root | 设置备用安装系统根目录 |
--debug | enable extra debugging messages | 启用额外的调试消息 |
--logfile=<path> | set an alternate log file | 设置备用日志文件 |
--[no-]color | color output | 颜色输出 |
--pkglist | list installed packages (EXPERIMENTAL) | 列出已安装的软件包(EXPERIMENTAL) |
filters: | ||
--action=<action> | show <action> entries | 显示<action>条目 install, reinstall, upgrade, downgrade, remove, all. |
--after=<date> | show entries after <date> | 在<date>之后显示条目 |
--before=<date> | show entries before <date> | 显示<date>之前的条目 |
--caller=<name> | show entries from program <name> | 显示程序<名称>中的条目 |
--commandline | show command line entries | 显示命令行条目 |
--grep=<regex> | show entries matching <regex> | 显示与<regex>匹配的条目 |
--package=<pkg> | show entries affecting <pkg> | 显示影响<pkg>的条目 |
--warnings | show notes/warnings/errors | 显示笔记/警告/错误 |
2. 进阶查询语句(个别不支持fish,请在bash下运行)
2.1 列出所有已安装的软件包及其各自的大小
$ LC_ALL=C pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h
...
110.65MiB gimp
117.18MiB linux-headers
139.32MiB gcc
149.57MiB gcc-libs
162.18MiB virtualbox
187.05MiB firefox
187.96MiB chromium
294.43MiB noto-fonts-cjk
383.93MiB libreoffice-fresh
516.18MiB linux-firmware
2.2 要列出明确安装的软件包(不在base元软件包或组 base-devel中),包含大小和说明:
$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort | uniq)) | sort -n
56.01 MiB gramps Genealogy program, which helps you track your family tree
56.44 MiB perl A highly capable, feature-rich programming language
57.98 MiB adobe-source-han-sans-cn-fonts Adobe Source Han Sans Subset OTF - Simplified Chinese OpenType/CFF fonts
58.65 MiB vlc Multi-platform MPEG, VCD/DVD, and DivX player
74.60 MiB linux The Linux kernel and modules
83.83 MiB mesa An open-source implementation of the OpenGL specification
110.65 MiB gimp GNU Image Manipulation Program
117.18 MiB linux-headers Headers and scripts for building modules for the Linux kernel
149.57 MiB gcc-libs Runtime libraries shipped by GCC
162.18 MiB virtualbox Powerful x86 virtualization for enterprise as well as home use
187.05 MiB firefox Standalone web browser from mozilla.org
187.96 MiB chromium A web browser built for speed, simplicity, and security
294.43 MiB noto-fonts-cjk Google Noto CJK fonts
383.93 MiB libreoffice-fresh LibreOffice branch which contains new features and program enhancements
516.18 MiB linux-firmware Firmware files for Linux
$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort | uniq)) | sort -n |wc -l
212
$ pacman -Qe |wc -l
234
2.3 要列出几个软件包的下载大小(packages留空以列出所有软件包):
$ expac -S -H M '%k\t%n' |wc -l
10619
$ expac -S -H M '%k\t%n' chromium
57.81 MiB chromium
2.4 列出标记为升级的软件包及其下载大小
$ expac -S -H M '%k\t%n' $(pacman -Qqu) | sort -sh |wc -l
10619
2.5 使用expac列出最后安装的20个软件包,请运行:
$ expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 5
2020-05-12 05:39:46 intel-ucode
2020-05-12 05:39:46 libcddb
2020-05-12 05:39:46 sysstat
2020-05-12 05:39:46 xf86-video-intel
2020-05-12 21:57:18 tree
2.6 明确安装的但不在base元软件包的软件:
$ comm -23 <(pacman -Qqe | sort) <(expac -l '\n' '%E' base | sort) |wc -l
234
$ pacman -Qqe |wc -l
234
2.7 列出不在base 元软件包或base-devel 软件包组中的显式安装的软件包:
$ comm -23 <(pacman -Qqe | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort -u) |wc -l
212
2.8 列出所有其他软件包不需要的安装软件包,这些软件包不在基本 meta软件包或base-devel软件包组中:
$ comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort -u) |wc -l
134
pacman -Qt |wc -l
139
如上, 但显示描述
$ expac -H M '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort -u))
...
xfdesktop A desktop manager for Xfce
xfwm4-themes A set of additional themes for the Xfce window manager
xorg-server Xorg X server
youtube-dl A small command-line program to download videos from YouTube.com and a few more sites
$ expac -H M '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort -u)) |wc -l
134
2.9 列出所有不在指定存储库repo_name中的已安装软件包
comm -23 <(pacman -Qq | sort) <(pacman -Sql repo_name | sort)
$ comm -23 <(pacman -Qq | sort) <(pacman -Sql core | sort) |wc -l
605
$ comm -23 <(pacman -Qq | sort) <(pacman -Sql extra | sort) |wc -l
268
$ comm -23 <(pacman -Qq | sort) <(pacman -Sql community | sort) |wc -l
681
2.a 列出repo_name存储库中的所有已安装软件包:
comm -12 <(pacman -Qq | sort) <(pacman -Sql repo_name | sort)
$ comm -12 <(pacman -Qq | sort) <(pacman -Sql core | sort) |wc -l
172
$ comm -12 <(pacman -Qq | sort) <(pacman -Sql extra | sort) |wc -l
509
$ comm -12 <(pacman -Qq | sort) <(pacman -Sql community | sort) |wc -l
96
== or ==
$ paclist core |wc -l
172
$ paclist extra |wc -l
508
$ paclist community |wc -l
96
2.b 列出Arch Linux ISO上所有不在base元软件包中的软件包:
$ comm -23 <(curl https://git.archlinux.org/archiso.git/plain/configs/releng/packages.x86_64) <(expac -l '\n' '%E' base | sort)
wget
wireless-regdb
wireless_tools
wpa_supplicant
wvdial
xfsprogs
xl2tpd
$ comm -23 <(curl https://git.archlinux.org/archiso.git/plain/configs/releng/packages.x86_64) <(expac -l '\n' '%E' base | sort) |wc -l
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 712 100 712 0 0 838 0 --:--:-- --:--:-- --:--:-- 837
80
2.c 列出开发包(不稳定包)
$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'
2.d 浏览包(互动:左边列表,右边描述)
$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'
需要安装fzf, 输入字母以过滤软件包列表;使用箭头键(或Ctrl-j/ Ctrl-k)进行导航;按Enter下看到包的信息较少。
如果您发现一个特定的程序包package占用了大量空间,并且想找出哪些文件占了大部分,那么这一程序可能会派上用场。
pacman -Qlq package | grep -v '/$' | xargs du -h | sort -h
$ pacman -Qlq iw | grep -v '/$' | xargs du -h | sort -h
4.0K /usr/share/man/man8/iw.8.gz
260K /usr/bin/iw
2.e 识别任何软件包都不拥有的文件
列出所有感兴趣的文件,并对照pacman检查它们:
提示:该lostfiles脚本执行类似的步骤,而且还包括一个广泛的黑名单从输出除去共同误报。
# find /etc /usr /opt /var | LC_ALL=C pacman -Qqo - 2>&1 > /dev/null | cut -d ' ' -f 5-
...
# find /etc /usr /opt /var | LC_ALL=C pacman -Qqo - 2>&1 > /dev/null | cut -d ' ' -f 5- |wc -l
13256
2.f 获取几个软件包的依赖项列表
注意:要仅显示本地已安装软件包的树,请使用pacman -Qi。
$ LC_ALL=C pacman -Si packages | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u
或者,使用expac:
$ expac -l '\n' %E -S packages | sort -u
$ C_ALL=C pacman -Si iw | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u
libnl
$ C_ALL=C pacman -Qi iw | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u
libnl
$ pactree iw
iw
└─libnl
└─glibc
├─linux-api-headers provides linux-api-headers>=4.10
├─tzdata
└─filesystem
└─iana-etc
2.g 列出更改的备份文件
如果要备份系统配置文件,可以复制所有文件,/etc/但是通常您只对已更改的文件感兴趣。可以使用以下命令查看修改后的备份文件:
以root用户权限运行此命令将确保/etc/sudoers输出中包括仅root用户可读的文件(例如)。
$ sudo pacman -Qii | awk '/^MODIFIED/ {print $2}'
/etc/cups/printers.conf
/etc/fstab
/etc/group
/etc/gshadow
/etc/hosts
/etc/passwd
/etc/resolv.conf
/etc/shadow
/etc/shells
/etc/security/limits.d/10-gcr.conf
/etc/locale.gen
/etc/default/grub
/etc/iptables/iptables.rules
/etc/mkinitcpio.conf
/etc/nftables.conf
/etc/pacman.conf
/etc/pacman.d/mirrorlist
/etc/privoxy/config
/etc/sudoers
/etc/systemd/logind.conf
/etc/UPower/UPower.conf
...
3. pacman进阶选项
3.1 几个可以双写的选项[谨慎使用]
- | 选项 | 选项描述 | 中文翻译 |
-S | -c, --clean | remove old packages from cache directory (-cc for all) | 从缓存目录中删除旧软件包(-cc删除全部) |
----RS-U | -d, --nodeps | skip dependency version checks (-dd to skip all checks) | 跳过依赖性版本检查(-dd跳过所有检查) |
---Q-S-- | -i, --info | view package information (-ii for backup files) | 查看软件包信息(-ii表示备份文件) |
-D-Q---- | -k, --check | test local database for validity (-kk for sync databases) | 测试本地数据库的有效性(-kk用于同步数据库) |
-R | -s, --recursive | remove unnecessary dependencies (-ss includes explicitly installed dependencies) |
删除不必要的依赖项 (-ss包括显式安装的依赖项) |
-Q | -t, --unrequired | list packages not (optionally) required by any package (-tt to ignore optdepends) [filter] |
列出任何软件包都不要求(可选)的软件包 (-tt忽略optdepends)[过滤器] |
-S | -u, --sysupgrade | upgrade installed packages (-uu enables downgrades) | 升级已安装的软件包(-uu启用降级) |
--F--S-- | -y, --refresh | download fresh package databases from the server (-yy to force a refresh even if up to date) |
从服务器下载新的软件包数据库 (-yy,即使是最新也要强制刷新) |
3.2 安装原因[避免使用]
- | 选项 | 选项描述 | 中文翻译 |
-D---S-U | --asdeps | mark packages as non-explicitly installed | 将软件包标记为非明确安装 |
-D---S-U | --asexplicit | mark packages as explicitly installed | 将软件包标记为明确安装 |
#pacman -D –asdeps
#pacman -S –asdeps
#pacman -U –asdeps
可能会被作为孤儿程序卸载
在重新安装软件包时,默认情况下会保留当前的安装原因。
3.3 指定文件安装[避免使用]
# pacman -Sw 下载软件包而不安装它:
# pacman -U /path/…pkg.tar.xz 安装不是来自远程存储库的“本地”软件包(例如,该软件包来自AUR):
# pacman -U file:///path/…pkg.tar.xz 要将本地软件包的副本保留在pacman的缓存中,请使用:
# pacman -U http://…/…pkg.tar.xz 安装“远程”软件包(不是从pacman的配置文件中所述的存储库中获取):
-S, 官方库下载安装;
-U, 指定pkg.tar.xz软件包安装;
-R, 卸载;
均可使用( -p, --print)选项打印目标而不是执行操作
4. 删除
4.1 卸载已安装软件
卸载软件包 | s3 |
#pacman -R | 删除单个软件包,保留所有依赖项的安装 |
#pacman -Rs | 删除任何其他已安装软件包都不需要的软件包及其依赖项 |
#pacman -Rsu | 当删除包含其他需要的软件包的组时,(-Rs)有时可能会拒绝运行。请尝试(-Rsu) |
#pacman -Rsc | 要删除软件包,其依赖项以及所有依赖于目标软件包的软件包: 警告:此操作是递归的,因此必须小心使用,因为它会删除许多可能需要的软件包。 |
#pacman -Rdd | 要删除另一个软件包所需的软件包,而不删除从属软件包: 警告:以下操作可能会破坏系统,应避免。请参阅系统维护#避免使用某些pacman命令。 https://wiki.archlinux.org/index.php/System_maintenance#Avoid_certain_pacman_commands |
#pacman -Rn | 删除某些应用程序时,Pacman保存重要的配置文件,并以扩展名.pacsave命名。 为防止创建这些备份文件,请使用以下-n选项: |
4.2 清理缓存的安装包文件
清理程序包缓存 | Pacman将下载的软件包存储在其中/var/cache/pacman/pkg/,并且不会自动删除旧版本或已卸载的版本。方便重新安装 |
#paccache -r | 删除旧的软件包(包含已安装和已卸载), 保留最新的3个版本 |
#paccache -rk1 | 删除旧的软件包(包含已安装和已卸载), 保留最新的1个版本 |
#paccache -ruk0 | 删除所有已卸载软件包的缓存版本 |
#pacman -Sc | 要删除所有当前未安装的缓存软件包以及未使用的同步数据库 |
#pacman -Scc | 要从缓存中删除所有文件,请使用两次清洁开关,这是最激进的方法,不会在缓存文件夹中保留任何内容: 警告:除非一个人迫切需要释放一些磁盘空间,否则应避免从高速缓存中删除所有以前版本的已安装软件包和所有未卸载软件包。这将防止降级或重新安装软件包,而无需再次下载它们。 |
4.3 删除未使用的软件包(孤立的)
$ sudo pacman -Qqdt | sudo pacman -Rs -
error: argument '-' specified with empty stdin
== or ==
$ sudo pacman -Rns $(pacman -Qtdq)
error: no targets specified (use -h for help)
4.4 除去必要软件包以外的所有软件
如果有必要删除除基本软件包以外的所有软件包,一种方法是将非必需软件包的安装原因设置为依赖关系,然后删除所有不必要的依赖关系。
首先,对于“按显式”安装的所有软件包,将其安装原因更改为“作为依赖项”:
# pacman -D --asdeps $(pacman -Qqe)
然后,安装原因更改为“为明确”只有基本的包,那些你不希望删除,以避免针对他们:
# pacman -D --asexplicit base linux linux-firmware
可以将其他软件包添加到上述命令中,以避免被删除。有关功能完整的基本系统可能需要的其他软件包的更多信息,请参见安装指南#Install基本软件包。
https://wiki.archlinux.org/index.php/Installation_guide#Install_essential_packages
这还将选择要删除的引导加载程序的软件包。该系统仍应可引导,但是没有它,引导参数可能无法更改。
最后,按照#删除未使用的程序包(孤立)中的说明,删除所有安装原因为“依赖”的程序包。
4.5 重新安装所有软件包
# pacman -Qqn | pacman -S -
4.6 列出软件包中所有更改的文件
如果您怀疑文件损坏(例如,由于软件/硬件故障),但是不确定文件是否损坏,则可能要与软件包中的哈希值进行比较。这可以通过pacutils完成:
# paccheck --md5sum --quiet
5. [避免使用]某些pacman命令
https://wiki.archlinux.org/index.php/System_maintenance#Avoid_certain_pacman_commands
- 避免进行部分升级。换句话说,永不运行pacman -Sy;相反,请始终使用pacman -Syu。
- 避免使用(--overwrite)选项。该选项接受包含glob的参数, 会绕过与glob匹配的文件的文件冲突检查。仅应在Arch开发人员明确建议的情况下使用。
- 避免使用(-d, --nodeps)选项。pacman -Rdd 在软件包卸载过程中会跳过依赖性检查。结果,可能会删除提供严重依赖性的程序包,从而导致系统损坏。
6. 包装安全Pacman-key
Pacman支持软件包签名,这可以为软件包增加额外的安全性。默认配置SigLevel = Required DatabaseOptional启用全局级别的所有软件包的签名验证:每个存储库SigLevel行都可以覆盖此签名。有关包签名和签名验证的更多详细信息,请参阅pacman-key。
https://wiki.archlinux.org/index.php/Pacman-key
https://wiki.archlinux.org/index.php/Pacman/Package_signing
刷新密钥
$ pacman-key --refresh-keys
重置所有密钥
如果要删除或重置系统中安装的所有密钥,则可以以root用户身份删除文件夹/etc/pacman.d/gnupg并重新运行,pacman-key --init然后pacman-key --populate archlinux重新添加默认密钥。
$ pacman-key --init
$ pacman-key --populate archlinux